1212 0

Excel 2010: связываем базы данных

21.01.13
Вместо введения к этой статье я процитирую фрагмент письма нашего постоянного читателя, где он пишет: «Уважаемые сотрудники «Б & К»! У меня такая проблема. Есть две таблицы Excel, обе являются базами данных. В первой таблице хранятся сведения о заказах и контрагентах, сделавших эти заказы. Вторая таблица — это справочник, где находятся подробные данные о каждом контрагенте. Можно ли в Excel как-то связать эти таблицы по общему признаку в одно целое? Например, чтобы из таблицы заказов одним щелчком переходить в справочник контрагентов, причем сразу к тому предприятию, которое сделало конкретный заказ? Думаю, что способ решения такой задачи будет интересен многим моим коллегам. По крайней мере, в моей практике такая функция была бы очень полезна. Заранее благодарю. Вадим Донец, глав. бухгалтер, г. Харьков». Вопрос нам тоже показался интересным. Одному из способов решения данной задачи мы решили посвятить эту статью.


 

Первое и самое главное: связывание таблиц по общим признакам — не типичная функция для MS Excel. Для таких задач есть специальные программы — так называемые базы данных. Хотя правильнее их называть «системы управления базами данных», или СУБД. К ним относятся, например, MS Access, MS SQL Server, Oracle и многие другие. В этих системах объединение таблиц по общим ключевым полям — едва ли не самая распространенная операция. И для ее решения там есть мощные и удобные инструменты. Они позволяют организовать самые разнообразные типы связей между таблицами, контролировать целостность данных, выполнять каскадное удаление записей и т. п. Однако для полноценного использования СУБД нужна определенная подготовка, знание языка запросов и т. п. Поэтому в практике бухгалтера СУБД в чистом виде применяют редко, и всю обработку данных делают обычно в программе Excel. Что же касается MS Excel, то здесь возможности связывания таблиц ограничены. В основном эта связь заключается в написании формул, которые ссылаются на разные листы или рабочие книги. Вы можете создать печатный отчет или сводную таблицу, которая оперирует несколькими базами данных. Но специальных инструментов для полноценной организации связей между наборами данных в Excel нет, да и быть не должно.

Однако не все так плохо… Дело в том, что в реальной работе все варианты связывания таблиц бухгалтеру обычно не нужны. Да и без каскадного удаления записей он тоже как-то обойдется. А вот связать одну большую таблицу со справочником — задача вполне актуальная и практически применимая. И, что самое главное(!), такая функция вполне реализуема в MS Excel. Причем единственное, что для этого потребуется, — это пара несложных трюков и система гиперссылок.

Теперь посмотрим, как это выглядит практически. Начнем, конечно же, с исходных данных.

 


Чем мы располагаем

В качестве примера я воспользуюсь двумя таблицами, форма которых показана на рис. 1 и 2. Первая таблица (она расположена на листе «Заказы») состоит из четырех полей: «Заказ», «Дата», «Клиент», «Сумма» и пока пустое поле «Коммент.». Это упрощенный вариант базы данных о заказах. В поле «Коммент.» мы в конечном итоге и поставим ссылку на элемент справочника. Понятно, что в базе «Заказы» один контрагент может фигурировать много раз, — это зависит от количества заказов, сделанных этим клиентом.

 

Вторая таблица называется «Клиенты». В ней я оставил всего пять колонок: «Название» (наименование предприятия), далее идут фамилия директора, юридический адрес, телефон и e-mail.

Важно! В справочнике «Клиенты» одна строка содержит данные об одном предприятии. Повторы здесь недопустимы, каждый клиент присутствует в базе только один раз.

Теперь вернемся непосредственно к самой задаче.

 


Что нужно сделать

Итак, мы собираемся организовать связь между таблицей «Заказы» и «Клиенты». Для этого в поле «Коммент.» таблицы «Заказы» мы поставим гиперссылку, которая будет указывать на определенную строку таблицы «Клиенты». Алгоритм работы гиперссылки будет таким. Вначале она должна проанализировать содержимое поля «НаимПредпр» в текущей строке таблицы «Заказы». Иными словами, запомнить название предприятия, которое оформило конкретный заказ. Затем ссылка должна выполнить переход на лист «Клиенты». На этом листе — найти строку, которая описывает параметры предприятия, сделавшего заказ. И, наконец, — установить указатель текущей ячейки на соответствующую строку в справочнике «Клиенты». Так это выглядит в общих чертах.

Кстати, в терминологии баз данных такая связь называется «один ко многим» (если смотреть со стороны таблицы «Клиенты»). То есть один элемент справочника о клиентах ссылается на несколько записей в базе заказов. В MS Excel для создания такой связи специальных инструментов нет. Мы должны построить их сами. Для этого, исходя из алгоритма, нам понадобятся: встроенная функция для создания гиперссылки (такая функция называется «ГИПЕРССЫЛКА()») и функция для поиска данных в таблице. Я предлагаю для поиска использовать функцию «ПОИСКПОЗ()». Но это не все. Гиперссылке нужно указать точный адрес для перехода: имя файла, название рабочего листа и ячейку, которую нужно сделать активной. Для получения имени файла, листа и ячейки мы воспользуемся функцией «ЯЧЕЙКА()». Кроме того, для формирования строки с адресом перехода нам придется обратиться к встроенным функциям работы с текстом: «ПСТР()» и «ПОИСК()». Вот собственно и все основные инструменты. Можно переходить к практической реализации.

 


Связываем две таблицы

Вначале выполним несколько предварительных действий. Начнем с функции «ГИПЕРССЫЛКА()», которая будет ключевой при организации связей между таблицами. У нее два параметра. Первый — это адрес, т. е. имя файла и рабочего листа, на который указывает ссылка. Второй параметр — адрес конкретной ячейки на этом листе, куда будет указывать гиперссылка. У нас гиперссылок будет много. И каждый раз для их создания придется указывать в параметрах функции имя файла и название листа. Это долго и неудобно. Поэтому лучше один раз создать переменную с названием листа и файла, а затем указывать ее переменную в функции «ГИПЕРССЫЛКА()» по мере необходимости. Применительно к MS Excel в качестве такой переменной удобно использовать именованный диапазон ячеек. С этого мы и начнем.

 

Формируем  переменную с названием  листа

Итак, нам нужно создать переменную, чтобы сохранить в ней имя файла и название рабочего листа для будущих гиперссылок. Мы решили, что такой переменной будет именованный диапазон. Чтобы создать его в MS Excel 2010, делаем так.

1. Вызываем Excel, загружаем документ и переходим в меню «Формулы». Лента примет вид, как на рис. 3.

2. В группе «Определенные имена» щелкаем на иконке «Диспетчер имен». Откроется окно, изображенное на рис. 4.

3. В этом окне нажимаем кнопку «Создать». Откроется окно «Создание имени», изображенное на рис. 5.

4. В этом окне в поле «Имя:» вводим текст «Мой_Лист». В поле «Диапазон:» печатаем формулу «=ПСТР(ЯЧЕЙКА("имяфайла";Клиенты!$A$1);ПОИСК("[";ЯЧЕЙКА("имяфайла";Клиенты!$A$1));256)&"!"» (рис. 3).

5. В окне «Создание имени» нажимаем «ОК».

6. В окне «Диспетчер имен» нажимаем «ОК».

Теперь разберемся, что же мы сделали на самом деле? В рабочей книге появился новый именованный диапазон «Мой_Лист».

Важно! В нашем случае название именованного диапазона должно быть БЕЗ пробелов. В противном случае формулы адресации будут работать неправильно.

Как и любой именованный диапазон, он указывает на ячейку или группу ячеек рабочей книги Excel. Но в нашем случае адрес этой группы не постоянный, а динамический. Его формирует формула, которую мы ввели в поле «Диапазон:». Вкратце о работе этой формулы. Начнем изнутри — с функции «ЯЧЕЙКА()».

Выражение «ЯЧЕЙКА("имяфайла";Клиенты! $A$1)» обращается к ячейке «A1» на листе «Клиенты» и возвращает для этой ячейки ее полный адрес, т. е. путь к файлу, имя файла и название листа, где эта ячейка расположена. Например, документ с таблицами у меня называется «ДинСсылкиExcel_.xls». Хранится он на диске «D:» в папке «!Фактор». Тогда результат работы формулы будет такой: «D:\!Фактор\[ДинСсылкиExcel_.xls]Клиенты».

Из этой строки нам нужно взять только имена файла и листа рабочей книги — буква диска и название папки при создании гиперссылки не понадобятся. Для решения этой задачи мы воспользуемся стандартными функциями Excel для работы с текстом.

Вырезать часть строки можно функцией «ПСТР()». Но ей нужно указать: исходный текст (у нас это полный путь к ячейке), начальную позицию и количество знаков, которое нужно вырезать из исходной строки.

Начальную позицию определить просто. Для этого с помощью функции «ПОИСК()» мы находим первое вхождение квадратной открывающей скобки («[») в текст, где хранится путь к ячейке. Фрагмент формулы, который выполняет эту операцию, выглядит так: «ПОИСК("[";ЯЧЕЙКА("имяфайла"; Клиенты!$A$1))». Для строки «D:\!Фактор [ДинСсылкиExcel_.xls]Клиенты» эта формула вернет «12». Количество знаков, которые нужно вырезать из исходного текста, я выбрал максимальное — «256».

Остается подставить полученные значения в функцию «ПСТР()». Первым ее параметром идет текст с адресом к ячейке. Второй параметр — номер начальной позиции для вырезания части строки. Последний параметр — максимально допустимое количество символов в строке. Формула для этой операции будет такой: «=ПСТР(ЯЧЕЙКА ("имяфайла";Клиенты!$A$1);ПОИСК

("[";ЯЧЕЙКА("имяфайла";Клиенты!$A$1));256)». В нашем примере такая формула вернет результат в виде «[ДинСсылкиExcel_.xls]Клиенты». По сути — это ссылка на лист «Клиенты» рабочей книги «ДинСсылкиExcel_.xls». Дальше может идти адрес ячейки. Но пока не хватает одного элемента — между именем листа и адресом ячейки должен стоять восклицательный знак («!»). Этот символ мы можем присоединить к формуле при помощи операции «&», и в окончательной редакции выражение будет выглядеть так: «=ПСТР(ЯЧЕЙКА("имяфайла";Клиенты!$A$1);ПОИСК("[";ЯЧЕЙКА("имяфайла"; Клиенты!$A$1)); 256)&"!"». А результат ее работы будет такой: «[ДинСсылкиExcel_.xls]Клиенты!».

Совет Аккуратно скопируйте фрагменты формулы в отдельные ячейки рабочего листа, и тогда работа каждой ее части будет у вас как на ладони.

Кстати, работу формулы внутри именованного диапазона легко проверить. Введите в любую свободную ячейку листа выражение «=Мой_Лист» и нажмите клавишу «Enter». В ячейке должен появиться результат: «[ДинСсылкиExcel_.xls]Клиенты!».

Важно! Обратите внимание, что для правильной работы формулы имена листов не должны содержать пробелов.

 

Формируем ГИПЕРССЫЛКУ

Ссылки на лист «Клиенты» мы расставим в колонке «Коммент.» таблицы «Заказы». Для этого делаем так.

1. Переходим на лист «Заказы», становимся на ячейку «E2».

2. Вводим формулу «=ГИПЕРССЫЛКА(Мой_ Лист&АДРЕС(ПОИСКПОЗ(C2;Клиенты!$A:$A;0); 1);">")».

3. Копируем эту формулу на всю высоту таблицы. Результат нашей работы показан на рис. 6.

Проверяем, что у нас получилось. В таблице «Заказы» щелкаем левой кнопкой, например, на ячейке «E6». В этой строке расположены сведения о заказе с номером «5» от фирмы «ЧП "Коло"». После щелчка Excel переключится на лист «Клиенты», а указатель активной ячейки станет на адрес «A6». Именно в этой позиции справочника записана информация о «ЧП "Коло"» (рис. 7).

Рассмотрим вкратце алгоритм работы формулы. Выражение «=ПОИСКПОЗ(C2;Клиенты! $A:$A;0)» находит ячейку в колонке «А» на листе «Клиенты», в которой встречается название контрагента из ячейки «С2» листа «Заказы». Последний параметр функции «ПОИСКПОЗ()» равен «0». Это означает, что она будет искать значение по принципу точного совпадения. Вернемся к нашему примеру. Предположим, что мы работаем со строкой «6» таблицы «Заказы» (рис. 6). В этой строке находится заказ с номером «5» от фирмы «ЧП "Коло"». После копирования гиперссылки из ячейки «E2» вниз по колонке «E» в ячейке «E6» формула с функцией поиска получится такой: «ПОИСКПОЗ(C6;Клиенты!$A:$A;0)». А результат работы этого выражения будет равен «6». Это означает, что в таблице «Клиенты» описание фирмы «ЧП «Коло»» расположено в шестой строке рабочего листа.

Идем дальше. Результат работы этого выражения мы подставим в качестве первого параметра функции адрес. Вторым параметром укажем «1». Тогда выражение «АДРЕС(ПОИСКПОЗ (C2;Клиенты!$A:$A;0);1)» (вторая строка таблицы «Заказы») по сути означает «АДРЕС(2;1)». Эта функция вернет в виде текста адрес ячейки, которая находится во второй строке и первой колонке рабочего листа. Для заказа «1» (вторая строка) это будет адрес «$A$2». Для заказа в шестой строке таблицы (фирма «ЧП "Коло"») выражение вернет строку «$A$6» и т. д.

С адресацией ячейки понятно. Теперь нужно использовать полученный результат в функции «ГИПЕРССЫЛКА()».

Здесь ситуация такова. Напомню, что у функции «ГИПЕРССЫЛКА()» два параметра. Первый — это адрес, куда указывает гиперссылка. Он включает название файла, листа и адрес ячейки для перехода. Имена файла и листа у нас уже есть, эта информация хранится в переменной «Мой_Лист». Адрес ячейки для ссылки на контрагента по конкретному заказу мы получили. Остается объединить эти две части операцией «&». И тогда окончательное выражение для адреса перехода получится таким: «Мой_Лист&АДРЕС(ПОИСКПОЗ(C2; Клиенты!$A:$A;0);1)».

Смотрим, что у нас получилось. Для ячейки «С2» такая формула вернет результат «[ДинСсылкиExcel_.xls]Клиенты!$A$2» — т. е. ссылку на ячейку «A2» в справочнике «Клиенты». Все верно: для заказа с номером «1» ссылка указывает на контрагента «ТОВ "Смит"». Если обратиться к ячейке «С6» (заказ с номером «5» от «ЧП "Коло"»), то в этой строке таблицы «Заказы» выражение для адреса перехода будет выглядеть так: «Мой_Лист&АДРЕС(ПОИСКПОЗ(C6;Клиенты!$A:$A;0);1)». А результат формулы будет такой: «[ДинСсылкиExcel_.xls]Клиенты!$A$6».

Переходим ко второму параметру функции «ГИПЕРССЫЛКА()». Здесь должен находиться текст, который Excel покажет на месте гиперссылки. Иными словами, это название самой гиперссылки. Я выбрал в качестве такого названия символ «>» (знак «больше»). И тогда окончательная формула для создания гиперссылки будет такой: «=ГИПЕРССЫЛКА(Мой_Лист&АДРЕС(ПОИСКПОЗ(C2; Клиенты!$A:$A; 0);1);">")».

Вот собственно и все относительно создания связей между таблицами Excel. С задачей мы справились, все ссылки работают правильно. Единственное, хотелось бы добавить пару слов по оформлению таблицы. Сейчас в колонке «Коммент.» на месте гиперссылок (лист «Заказы») Excel отображает символ «>». Вполне возможно, вы захотите его изменить. В этом случае я бы посоветовал воспользоваться встроенной функцией «СИМВОЛ()». Параметром этой функции является код символа, т. е. число в интервале от «1» до «255». А результат ее работы — это символ с указанным кодом из таблицы Windows. Таким образом, при помощи функции «СИМВОЛ()» вы можете вставить в формулу или на рабочий лист Excel любой знак, даже если его нет на клавиатуре компьютера. Для гиперссылок такими знаками могут быть изображения стрелок, треугольных маркеров и т. п. Кстати, больше всего таких символов в специальных шрифтах. Например, в стандартной гарнитуре «Wingdings 3». Чтобы задействовать любой символ из этой гарнитуры для отображения гиперссылки, сделайте так.

1. Откорректируйте формулу, заменив текст «">")» обращением к функции «СИМВОЛ()». В качестве кода символа укажите, например, «117». И тогда в конечном счете у вас должна получиться формула: «=ГИПЕРССЫЛКА(Мой_Лист&АДРЕС(ПОИСКПОЗ(C2;Клиенты!$A:$A;0);1); СИМВОЛ(117))».

2. Скопируйте обновленную формулу на всю высоту таблицы.

3. Выделите все ячейки в колонке «Коммент.», кроме ее заголовка.

4. Через меню «Главная» измените шрифт для выделенных ячеек, указав гарнитуру «Wingdings 3». Теперь все гиперссылки Excel покажет в виде значка «».

Выбранный символ — не единственный способ изображения гиперссылок. Несколько вариантов оформления с использованием гарнитуры «Wingdings 3» приведены в таблице.Думаю, что их более чем достаточно для практической работы бухгалтера.

 

Символы для оформления гиперссылок (гарнитура «Wingdings 3»)

Код символа

Функция Excel

Результат

1

2

3

101

СИМВОЛ(101)

 

103

СИМВОЛ(103)

 

117

СИМВОЛ(117)

 

125

СИМВОЛ(125)

 

132

СИМВОЛ(132)

 

134

СИМВОЛ(134)

 

138

СИМВОЛ(138)

 

142

СИМВОЛ(142)

042

СИМВОЛ(042)

 

052

СИМВОЛ(052)

 

065

СИМВОЛ(065)

 

073

СИМВОЛ(073)

 

091

СИМВОЛ(091)

 

093

СИМВОЛ(093)

 

095

СИМВОЛ(095)

 

099

СИМВОЛ(099)

 

 

И последнее. При помощи гиперссылок можно организовать связи между таблицами, которые расположены в разных рабочих книгах. Никаких ограничений здесь нет. Все, что для этого потребуется, — откорректировать формулу, которая формирует адрес перехода для гиперссылки. В принципе вы можете сделать это самостоятельно, или же скачать готовый документ на форуме редакции «Б & K».

На этом все. Надеюсь, что материал этой статьи поможет вам создавать удобные базы данных, объединяя в них несколько связанных таблиц в формате MS Excel.

 

Удачной работы! Жду ваших вопросов, замечаний и предложений на bk@id.factor.ua, nictomkar@rambler.ru или на форуме редакции www.bk.factor.ua/forum.



Помітили помилку? Виділіть її та натисніть Ctrl+Enter, щоб повідомити нас про це
загрузка...
Коментарі (0)