Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Как перечислить все возможные комбинации двух фрагментов текста на основании таблицы возможных совпадений?
 
Здравствуйте, уважаемые знатоки! Помогите, пожалуйста, срочно решить задачу, суть которой изложена на скрине. Заранее благодарю!
777.png (35.24 КБ)
 
Прекрасная картина, какие цвета, какие утонченные линии.
 
Код
Помогите
покажи что сделал! что не получается?
Помощью не считается выполнение за тебя твоего учебного задания
 
Цитата
БМВ написал:
какие утонченные линии.
БМВ, обычные границы ячеек))) Вот если бы хотя бы пунктиром...
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Александр Моторин, Вы знакомы с автором темы?
 
anton_vlad, может файл покажете вместо Вашей чудной картинки, которая так понравилась уважаемому БМВ)?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Александр Моторин,я вообще не сталкивался раньше с подобными задачами. Только одна глупая идея есть - скопировать эту таблицу и, в зависимости от того, 1 или 0 стоит в исходной, заполнять в соседней каждую ячейку.
Например, заполним первую ячейку новой таблицы так: =ЕСЛИ(B5=1;$A$5&"-"&B4;"").
Далее протягиваем эту ячейку вправо.
Получаем строку со значениями 154F-MCO; пропуск; пропуск; 154F-TSK; 154F-BNV.
Аналогично поступаем со следующими строками.
На выходе получится таблица, в которой будут представлены все возможные комбинации и пропуски.
Потом каким-то образом нужно будет представить все оставшиеся в таблице полученные значения в виде одной колонки.

Я понимаю, что это совсем неверный метод, но, повторюсь, не сталкивался ранее с подобными задачами и даже не представляю, как ее можно решить кратко и красиво(( Если не можете помочь с выполнением, будьте добры, хотя бы подскажите нужную формулу, я буду сам разбираться.
Изменено: anton_vlad - 29 Мар 2018 20:28:49
 
anton_vlad, для начала хотя бы прикрепите Excel-файл - у нас ведь форум по Excel, а Вы картинки показываете. Или Вы полагаете, что потенциальные помощники должны срисовать с экрана данные в свои файлы?
 
Прошу прощения, вот файл
Изменено: anton_vlad - 29 Мар 2018 20:33:44
 
=IF(SUM($B$5:$F$8)>=ROWS($J$8:$J8);INDEX($A:$A;INT(SMALL(IF($B$5:$F$8=1;ROW($B$5:$F$8)+COLUMN($B$5:$F$8)*10^-3);ROWS($J$8:$J8))))&"-"&
INDEX($4:$4;MOD(SMALL(IF($B$5:$F$8=1;ROW($B$5:$F$8)+COLUMN($B$5:$F$8)*10^-3);ROWS($J$8:$J8));1)*10^3);"")
 
БМВ, благодарю Вас! А это точно самый простой способ решения?
 
конечно нет, но простой скучный :-) последовательность 1,2,3, ..... разбивается с учетом кратности и получается тот же индекс ячейки, остается только понять ,1 или 0 и вывести или пропустить.
Изменено: БМВ - 29 Мар 2018 20:53:08
 
А можно поподробней о простом? Какие формулы нужно использовать, что делать с индексами. Просто, боюсь, что если я покажу Ваше решение, то ничем хорошим для меня это не закончится)
 
1. забыл сказать что формула требует массивного ввода
2. А вы попробуйте разобраться, там ничего сложного нет. Списывая бездумно- это чистописание, а вот если с пониманием - это обучение.
3. Не даю локализованный вариант, в том числе и для того, чтоб что-то в задании сделали сами.
 
Хорошо, но хотя бы формулы назовите, пожалуйста, которые необходимо использовать при простом методе решения - я буду искать их сейчас и разбираться)
Я до этого вообще не работал с массивами. Учу самостоятельно, но знаком только с основами - ВПР, ЕСЛИ, основные математические плюс почти все текстовые формулы.
Изменено: anton_vlad - 29 Мар 2018 21:08:34
 
Цитата
anton_vlad написал:
формулы назовите
Формулу можно написать, а функцию можно назвать :-)
вот тут справочник, который поможет перевести.

Однако может кто сжалится и напишет что-то более компактное и простое.
 
anton_vlad, здравствуйте и вам! Если макрос подойдёт вам, то пробуйте…
Код макроса
Изменено: Jack Famous - 29 Мар 2018 23:18:30
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Jack Famous, Dim arr ????  и  out.Resize(UBound(arr) + 1).Value = arr не в кассу массив и двумерный и (1 to N,1 to1)
Изменено: БМВ - 29 Мар 2018 23:23:58
 
БМВ, пробовал и объявлять arr()as string (в таком случае ошибка #9 Out of range) и наполнять arr(i,1) - всё одно #15 Type Mismatch
Цитата
БМВ написал:
out.Resize(UBound(arr) + 1).Value = arr
ошибка до этого возникает - с выводом я бы разобрался (наверное) )))
Изменено: Jack Famous - 29 Мар 2018 22:47:51
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Jack Famous, выше смотрите, я не про стринги :-), а про размерность. она сама при таком заполнении не сменится.

и хватит будить во мне спящего прогера :-)
Изменено: БМВ - 29 Мар 2018 22:58:17
 
БМВ, не заметил, что вы код добавили - решил сначала с запасом объявлять, а извлекать только заполненные)))
спасибо вам за науку!  :idea:
Цитата
БМВ написал:
хватит будить во мне спящего прогера
я не специально  :D
модераторам - удалите пожалуйста оффтоп, если посчитаете нужным (ответ в #17 исправил)
Изменено: Jack Famous - 29 Мар 2018 23:25:55
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Jack Famous, ну это Dim arr(0 To 1000000, 1 To 1) As String на мой взгляд при известной размерности исходного масиива точно перебор. достаточно или объявить после Set enter Или изменить размерность. но уже перемножив количество строк на количество столбцов за минусом заголовков.
 
БМВ, ну я в #17 ваш вариант взял, конечно (когда есть возможность узнать размерность, такие жертвы ни к чему)  :)  только sum(rng) - это как раз область с цифрами. Ещё раз большое спасибо!
Изменено: Jack Famous - 29 Мар 2018 23:17:05
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Вы тут немножко на своём языке общаетесь в последних сообщениях :D  а простую формулу мне так никто и не подсказал  :cry:  :cry:  
 
Выражаясь ещё проще: какая формула поможет из того, что слева, получить то, что справа?
Изменено: anton_vlad - 30 Мар 2018 00:14:32
 
=ЕСЛИ(СТРОКА()>СЧЁТЗ($B$2:$F$5);"";ИНДЕКС($A$1:$F$5;ЦЕЛОЕ(НАИМЕНЬШИЙ(ЕСЛИ(НЕ(ЕПУСТО($B$2:$F$5));СТРОКА($B$2:$F$5)+СТОЛБЕЦ($B$2:$F$5)/10);СТРОКА()));ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(НЕ(ЕПУСТО($B$2:$F$5));СТРОКА($B$2:$F$5)+СТОЛБЕЦ($B$2:$F$5)/10);СТРОКА());1)*10))
это формула массива
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
anton_vlad,
от сложной формулы
Цитата
БМВ написал:
=IF(SUM($B$5:$F$8)>=ROWS($J$8:$J8);INDEX($A:$A;INT(SMALL(IF($B$5:$F$8=1;ROW($B$5:$F$8)+COLUMN($B$5:$F$8)*10^-3);ROWS($J$8:$J8))))&"-"&INDEX($4:$4;MOD(SMALL(IF($B$5:$F$8=1;ROW($B$5:$F$8)+COLUMN($B$5:$F$8)*10^-3);ROWS($J$8:$J8));1)*10^3);"")
через дополнительные промежуточные вычисления и области, перешли к простой
Цитата
Ігор Гончаренко написал:
=ЕСЛИ(СТРОКА()>СЧЁТЗ($B$2:$F$5);"";ИНДЕКС($A$1:$F$5;ЦЕЛОЕ(НАИМЕНЬШИЙ(ЕСЛИ(НЕ(ЕПУСТО($B$2:$F$5));СТРОКА($B$2:$F$5)+СТОЛБЕЦ($B$2:$F$5)/10);СТРОКА()));ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(НЕ(ЕПУСТО($B$2:$F$5));СТРОКА($B$2:$F$5)+СТОЛБЕЦ($B$2:$F$5)/10);СТРОКА());1)*10))
:)
Ладно, положу файл с формулой, за труды, так сказать.
 
БМВ, Ігор Гончаренко, огромное вам спасибо, сейчас буду разбираться! :D  
 
Если уж с промежутком, то вот так
 
Спасибо, второй вариант выглядит более человечным. Пусть и решается задача в этом случае двумя шагами, а не одним космическим по сложности, но всё же это и не перебор вручную. Сейчас буду разбираться и адаптировать второй вариант решения под свою таблицу размерностью 18х25 :)   Ещё раз благодарю за помощь!
Изменено: anton_vlad - 30 Мар 2018 10:49:48
Страницы: 1 2 След.
Читают тему (гостей: 1)