Постановка задачи
Имеем базу данных (список, таблицу - называйте как хотите) с информацией по платежам на листе Данные:
Задача: быстро распечатывать приходно-кассовый ордер (платежку, счет-фактуру...) для любой нужной записи выбранной из этого списка (вот пример для четвертой записи):
Поехали!
Шаг 1. Создаем бланк
На другом листе книги (назовем этот лист Бланк) создаем пустой бланк. Можно самостоятельно, можно воспользоваться готовыми бланками, взятыми, например, с сайтов журнала "Главный Бухгалтер" или сайта Microsoft. У меня получилось примерно так:
В пустые ячейки (Счет, Сумма, Принято от и т.д.) будут попадать данные из таблицы платежей с другого листа - чуть позже мы этим займемся.
Шаг 2. Подготовка таблицы платежей
Прежде чем брать данные из таблицы для нашего бланка, таблицу необходимо слегка модернизировать. А именно:
· | Вставьте пустой столбец слева от таблицы. Мы будем использовать для ввода метки (пусть это будет английская буква "икс") напротив той строки, данные из которой мы хотим добавить в форму: |
· | Превратим нашу таблицу в список, чтобы проще было вводить новые данные в будущем. Для этого таблицу необходимо выделить и выбрать в меню Данные - Список - Создать список. |
· | Создадим динамический именованный диапазон, указывающий на нашу таблицу. Это позволит в будущем использовать имя диапазона как имя таблицы в формулах, независимо от ее размеров. Т.е. при дописывании новых данных в таблицу, нам не придется каждый раз корректировать формулы на бланке. Для этого откройте меню Вставка - Имя - Присвоить (Insert - Name - Define), введите имя таблицы (например, БазаДанных) и в строку Ссылка введите такую формулу: =СМЕЩ(Данные!$A$1;0;0;СЧЁТЗ(Данные!$B:$B);СЧЁТЗ(Данные!$1:$1)+1) |
Шаг 3. Связываем таблицу и бланк
Для связи используем функцию ВПР (VLOOKUP) - подробнее про нее можно почитать здесь. В нашем случае для того, чтобы вставить в ячейку F9 на бланке номер помеченного "x" платежа с листа Данные надо ввести в ячейку F9 такую формулу:
=ВПР("x";БазаДанных;2;ЛОЖЬ)
Т.е. в переводе на "русский понятный" функция должна найти в диапазоне БазаДанных строку, начинающуюся с символа "х" и выдать нам содержимое второго столбца этой строки, т.е. номер платежа.
Аналогичным образом заполняются все остальные ячейки на бланке - в формуле меняется только номер столбца.
Шаг 4. Чтобы не было двух "х"...
Если пользователь введет "х" напротив нескольких строк, то функция ВПР будет брать только первое найденное значение. Чтобы не было такой многозначности, щелкните правой кнопкой мыши по ярлычку листа Данные и выберите Исходный текст (Source Code). В появившееся окно редактора Visual Basic скопируйте следующий код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
Dim str As String
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
str = Target.Value
Application.EnableEvents = False
r = Cells(Rows.Count, 2).End(xlUp).Row
Range("A2:A" & r).ClearContents
Target.Value = str
End If
Application.EnableEvents = True
End Sub
Этот макрос не дает пользователю ввести больше одного "х" в первый столбец.
Ну, вот, собственно и все! Пользуйтесь!