Постановка задачи
Имеем базу данных (список, таблицу - называйте как хотите) с информацией по платежам на листе Данные:
Задача: быстро распечатывать приходно-кассовый ордер (платежку, счет-фактуру...) для любой нужной записи выбранной из этого списка (вот пример для четвертой записи):
Поехали!
Шаг 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
Этот макрос не дает пользователю ввести больше одного "х" в первый столбец.
Ну, вот, собственно и все! Пользуйтесь!
Понятие же "физического вакуума" в релятивистской квантовой теории поля подразумевает, что во-первых, он не имеет физической природы, в нем лишь виртуальные частицы у которых нет физической системы отсчета, это "фантомы", во-вторых, "физический вакуум" - это наинизшее состояние поля, "нуль-точка", что противоречит реальным фактам, так как, на самом деле, вся энергия материи содержится в эфире и нет иной энергии и иного носителя полей и вещества кроме самого эфира.
В отличие от лукавого понятия "физический вакуум", как бы совместимого с релятивизмом, понятие "эфир" подразумевает наличие базового уровня всей физической материи, имеющего как собственную систему отсчета (обнаруживаемую экспериментально, например, через фоновое космичекое излучение, - тепловое излучение самого эфира), так и являющимся носителем 100% энергии вселенной, а не "нуль-точкой" или "остаточными", "нулевыми колебаниями пространства". Подробнее читайте в FAQ по эфирной физике.