понедельник, 30 мая 2011 г.

Хитрый ход

Однажды столкнулся с уже ранее описанной проблемой. Надо связать две таблички, но ключевые поля в них имеют разный формат: в одной общий а в другой текстовый. Привожу пример.
Как видно из рисунка мне нужно поле TF_OKATO, таблички 1 "привпэрить" к табличке 2. Однако функция ВПР брыкается и выдает #Н/Д. Как вариант решения проблемы можно табличку 2 сохранить в формате .DBF и потом в монопольном доступе попытаться изменить формат поля KOD_TO на текстовый. Однако такие варианты не всегда проходят, да и возится долго и неудобно. Другой вариант - можно задать полю KOD_TO текстовый формат, а потом перебить вручную коды. Надежен, но возни еще больше, особенно если табличка большая. И тут пришла в голову мысль, если функция СЦЕПИТЬ возвращает данные в текстовом формате, нельзя ли её приспособить в этом случае. Попробовал и получилось вот так.

В данном случае у функции СЦЕПИТЬ только один аргумент, т.е. она ничего не сцепляет, да нам этого и не надо, а вот миссию по преобразованию в текстовый формат выполняет исправно.

=ВПР(СЦЕПИТЬ(D3);$A$3:$B$27;2;ЛОЖЬ)
Развивая идею дальше можно сказать что в каком бы формате небыли ключевые поля их всегда можно привести к текстовому формату и обеспечить связь данных.
Вот такие хитрости. Как говорил один известный персонаж - "Хорошо знать иностранные языки."
P.S. Не так давно народ предложил вместо функции СЦЕПИТЬ() для этих целей использовать имеющуюся стандартную функцию ТЕКСТ(). Да это вполне возможно, тогда формула будет выглядеть так.
=ВПР(ТЕКСТ(D3;"0");$A$3:$B$27;2;ЛОЖЬ)
Однако, если Вы заметили, функция ТЕКСТ(D3;"0"), кроме ссылки на ячейку, имеет еще второй параметр - формат. Что на мой взгляд усложняет ее применение в данном случае. Поэтому использование функции СЦЕПИТЬ() - хитрый ход!

Комментариев нет:

Отправить комментарий