Поиск и выборка с таблиц

Автор Geldor, 2 сентября 2016, 17:17

0 Пользователи и 1 гость просматривают эту тему.

Geldor

Добрый день!
Прошу у местных гуру, намекнуть в какую сторону мне копать, для решения моей задачи. Т.е., примерный принцип, какие формулы использоваться могут, что почитать по этой теме.. А то уж очень не хочется корпеть неделями над многотомниками уокенбаха  ;)

Дано:
(Таблица 1). В ней 2 колонки, во второй колонке от 1 до 3 цифр.
Страна   || Код
Украина ||  380
Россия   ||  7
Бельгия  || 32
....

(Таблица 2). В ней просто 1 длинный столбик из рандомных номеров, вида:
38050773383
79112002293
324558370704
...

Я же хочу сделать так, чтобы в (Таблице 2) рядом рядом был еще столбик в котором будет извлечен(из имеющегося столбика) код страны, а еще рядом, будет написано название страны.
Т.е. чтобы (Таблица 2) приняла вид:
38050773383  || 380  || Украина
79112002293  || 7  || Россия
324558370704  || 32  || Бельгия
...

Поначалу, я пытался просто обрезать номер слева с помощью MID(). Оставив только 3 цифры. Но вот некоторые коды состоят с 1(или 2) цифр. И код России "получится" 791. Думал сделать тройное условие IF, обрезая по одной цифре до 79 и 7 и поочередно сравнивания трижды со всеми полями во втором столибке (Таблицы 1). А в Таблице 1 200+ значений... Представляете какая строка сравнения IF будет? Calc зависнет же  ;D Как грамотно обрезать? А после того как обрезал, я так понимаю нужно выполнить для третьего столбика(с названием) вот такую процедуру, как описано здесь? http://www.planetaexcel.ru/techniques/2/92/ Естественно, заменив на формулы Calc.

На 99% я уверен, что в даном случае мыслю просто неправильно и не в том направлении, и должны быть какие-то более логичные и элегантные способы решения этой на первой взгляд несложной задачи.  ???

JohnSUN

Извини, но не выйдет... И не потому, что три вложенные IF не сработают, а потому что в (Таблица 1) у тебя должны быть строки
Россия   ||  7
и
Казахстан   ||  7

То есть по "семёрке" ты однозначно страну не вычислишь
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Geldor

#2
Цитата: JohnSUN от  2 сентября 2016, 15:31То есть по "семёрке" ты однозначно страну не вычислишь
Да, есть такое. Но в даном случае, разрешается просто сделать(обобщить)
Россия/Казахстан || 7
И дальше уже самому разобраться с конкретными номерами. По крайней мере круг гораздо сужается.

Поэтому, этот момент не учитываем. Все значения кодов будут разные.

Т.е. меня интересует можно ли как-то еще принципиально решить проблему кроме горы вложений IF?(в которых очень легко запутаться будет). И вообще, такое ощущение, что это будет своеобразный "говнокод", как у девелоперов говорят :)

JohnSUN

Ну, мы здесь вместо "говнокод" обычно используем слово "костыль"
И вообще-то к трем вложенным IF это не относится - запутаться в трёх IF можно, но сложно... Какая там максимальная длина кода? Три? Четыре цифры? Больше?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

TimSha

#4
Как вариант - для упрощения задачи и решения: вторую таблицу разнести на два поля/столба - собственно номер и отдельно код. С этим будут заморочки - см. количество знаков в номере: менее 11, равно 11, более 11; да и цифр в номере как угадать - село, город - 5,6,7 знаков?
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)

rami

#5
Цитата: JohnSUN от  2 сентября 2016, 16:06Какая там максимальная длина кода? Три? Четыре цифры? Больше?
Начинать нужно с таблицы используемых кодов, может не все коды нужны. Автор вопроса должен выложить файл с образцами входных данных и таблицей нужных кодов.

Geldor

Цитата: JohnSUN от  2 сентября 2016, 16:06И вообще-то к трем вложенным IF это не относится - запутаться в трёх IF можно, но сложно... Какая там максимальная длина кода? Три? Четыре цифры? Больше?
Достаточно три цифры. Просто в каждом условии IF же будет типа похожей процедуры поиска диапазона значений(как в ссылке что я скинул в 1м сообщении). Получается нормальная такая строка в итоге. А я и в коротенькой формуле MID разбирался полчаса, пока не раздуплил в чем ошибки :)
В общем, вопрос не у времени тут больше, а у принципиальном желании понять, что можно улучшить в алгоритмах подобного рода. А как вы уже сказали, "костыли" то они и в африке "костыли"...


Цитата: TimSha от  2 сентября 2016, 16:10Как вариант - для упрощения задачи и решения: вторую таблицу разнести на два поля/столба - собственно номер и отдельно код. С кодом будут заморочки - см. количество знаков в номере: менее 11, равно 11, более 11.
Хм, почему именно 11?

Цитата: rami от  2 сентября 2016, 16:11Начинать нужно с таблицы используемых кодов, может не все коды нужны.
вы правы, совсем уж экзотических стран нету, поэтому хоть список и немалый, но он в пределах от 1 до 3 цифр кода.

И прокомментируйте, пожалуйста, ссылку которую я скидывал(планетаексель). Это годится в даном случае, для того чтобы найти нужные строки в таблице кодов(таблице 1) ?

Geldor

Цитата: rami от  2 сентября 2016, 16:11Автор вопроса должен выложить файл с образцами входных данных и таблицей нужных кодов.

JohnSUN

Цитата: Geldor от  2 сентября 2016, 18:29
И прокомментируйте, пожалуйста, ссылку которую я скидывал(планетаексель). Это годится в даном случае, для того чтобы найти нужные строки в таблице кодов(таблице 1) ?
Ну, почему ради обычного VLOOKUP (ВПР в русскоязычном Экселе) нужно лезть куда-то кроме этого вот форума, а? Просто пишем в строке поиска "VLOOKUP таблица" и сразу находим кучу материала. Например, Поиск по списку значений из других списков
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

TimSha

Цитата: Geldor от  2 сентября 2016, 16:52почему именно 11?
Как правило, но мо быть и другое...
Во всяком случае остается пока в силе: "...при звонках абонентам операторов других государств, необходимо знать  международные коды  сотовой связи и коды стран. Формат номера при наборе выглядит следующим образом: +7 – 10 – международный код страны – код города абонента – номер абонента."
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)

JohnSUN

Для какого офиса нужна формула?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от  2 сентября 2016, 17:13Для какого офиса нужна формула?
OpenOffice (либра не признаёт документ своим)

Geldor

Цитата: JohnSUN от  2 сентября 2016, 19:13
Для какого офиса нужна формула?
Я использую Calc от Openoffice.

Файлик с примером тут http://forumooo.ru/index.php/topic,5848.0/msg,37350.html


Цитата: JohnSUN от  2 сентября 2016, 17:03Ну, почему ради обычного VLOOKUP (ВПР в русскоязычном Экселе) нужно лезть куда-то кроме этого вот форума, а? Просто пишем в строке поиска "VLOOKUP таблица" и сразу находим кучу материала. Например, Поиск по списку значений из других списков
Да пока что этот "влукап" еще китайская грамота :-\ Сейчас в процессе разбирания тонны материала, после того как нагуглил по "поиск в столбце". Надеюсь, не зря пытаюсь разобраться, и что эта формула в даной задаче "в тему" будет.

rami

#13
Вот костыль от меня ;D

JohnSUN

Ага... А если надумаешь установить LibreOffice, то тогда костыль и от меня
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне