ВЕСТНИК
Хабаровской государственной академии экономики и права


Иван Арисов,

Конэкагропромбанк

ИСПОЛЬЗОВАНИЕ ЭЛЕКТРОННОЙ ТАБЛИЦЫ EXCEL ДЛЯ АВТОМАТИЗАЦИИ ВЫЧИСЛЕНИЙ

Часть 4

На практике, при использовании любых способов “вытягивания” данных, могут возникать сложности. Например, в описанном примере, расстояние между строкой с датами и строкой с суммами погашаемых кредитов, может меняться (разное количество заёмщиков и т.д.). Из-за этого, суммы кредитов не всегда будут располагаться на 25-й строке, и наши функции будут работать не корректно.

Из подобных ситуаций можно найти выход. Например, можно договориться с кредитным отделом о том, что в их таблице непосредственно над строкой с суммами погашаемых кредитов будет находиться строка, дублирующая строку дат.

 

A

B

C

D

AE

1

01.08.00

02.08.00

03.08.00

04.08.00

31.08.00

n

01.08.00

02.08.00

03.08.00

04.08.00

31.08.00

n+1

7500

0

4000

3000

5000

 

Таким образом, мы стабилизируем расположение дат и сумм относительно друг друга. Дополнительную строку дат можно скрыть и она не будет “мозолить” глаза хозяевам таблицы. Далее необходимо дать имя области из этих двух строк, и ссылаться не на координаты, а на это имя. Этим мы предусмотрим возможность перемещения интересующих нас данных в таблице как по вертикали, так и по горизонтали.

Наша функция, в этом случае, будет иметь следующий вид:

=ГПР(A1;Имя_файла.xls!Имя_области;2;ЛОЖЬ)”.

Из примера видно, что всегда можно найти некоторый компромисс между “хозяевами” информации и её получателями. Однако, с точки зрения профессиональной этики, конечно, необходимо стараться вносить как можно меньше изменений в исходные файлы. Ведь тот факт, что мы желаем использовать в своей работе достижения науки и техники, не должен усложнять жизнь разработчикам исходных таблиц. Так каждое подобное наше нововведение накладывает хоть и небольшое, но ограничение на свободу изменения структуры файла с исходными данными. Поэтому, необходимо стараться так организовывать процесс считывание данных, чтобы он был незаметен и не накладывал никаких дополнительных условий на разработчиков исходных таблиц.

Разберём несколько конкретных примеров. Допустим, в том же банке, но уже в отделе депозитов юридических лиц, ведётся аналогичная по смыслу таблица погашения депозитов. Обстоятельства складываются таким образом, что депозиты банк гасит не каждый день. Дни, в которые не планируется возвращать владельцам складов их денежные средства в таблице депозитного отдела, просто не указываются. В общих чертах, эта таблица имеет вид:

 

A

B

C

D

W

1

03.08.00

05.08.00

09.08.00

10.08.00

31.08.00

4

50

100

45

10

80

Обратите внимание на то, что данные за 04.08.00, 06.08.00 - 08.08.00, и, возможно, за ряд других чисел месяца отсутствуют. Использованная нами в предыдущем примере функция в этой ситуации нормально работать не будет. Все дело в том, что не найдя при сравнении ячеек из заданной области ни одной идентичной эталону, функции “ГПР()” и “ВПР()”, могут вернут нам либо выражение “#Н/Д” (нет данных), либо значение из соседней ячейки. Второй вариант в данном примере вообще абсурден, поэтому, нужно использовать первый. Для его реализации и необходимо последним параметром при записи этих функций использовать логическое выражение “ЛОЖЬ”.

Логично предположить, что если в какой-то из дней депозиты не погашаются, то сумма гашения депозитов в этот день равна 0. Однако, не так всё просто – выражение “#Н/Д” вообще числом не является. Раз так, значит, с ним невозможны математические операции.

Если в нашей таблице вычисляются, например, общая сумма иммобилизации в месяц, или среднее значение выплат, то сейчас в соответствующих ячейках тоже будет красоваться “#Н/Д”, и т.д. Если в таблице имеют место многочисленные сложносоставные связи, то значительная её часть покроется этим выражением.

По условию задачи не будем настаивать на изменениях в заполнении таблицы депозитного отдела, а попытаемся самостоятельно найти выход. Для этого применим сразу две дополнительные функции. Первая из них – “ЕЧИСЛО()” из группы Проверки свойств и значений. Данная функция получает в виде аргумента произвольное выражение, и принимает значение “ИСТИНА”, если это выражение является числом (возвращает число), или “ЛОЖЬ” если выражение числом не является. Вторая функция – Логическая - “ЕСЛИ()”.

Эта функция проверяет истинность некоторого логического выражения, и принимает одно из указанных значений. Одно из значений, если логическое выражение истинно, второе, если оно ложно. Совмещенные в одну формулу эти функции будут выглядеть следующим образом:

 

A

B

1

=СЕГОДНЯ()

=ЕСЛИ(ЕЧИСЛО(ГПР(A1; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ))=ИСТИНА; ГПР(A1; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ);0)

2

=A1+1

=ЕСЛИ(ЕЧИСЛО(ГПР(A2; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ))=ИСТИНА; ГПР(A2; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ);0)

...

31

=A30+1

=ЕСЛИ(ЕЧИСЛО(ГПР(A31; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ))=ИСТИНА; ГПР(A31; [Имя_файла.xls]Имя_листа!$1:$4;4;ЛОЖЬ);0)

Работает эта конструкция следующим образом: Функция “ГПР()” ищет в исходной таблице сумму погашения депозитов за указанную дату. Она может возвратить либо число – собственно сумму, либо выражение “#Н/Д”, если искомая дата в исходной таблице не найдена. Функция “ЕЧИСЛО()”, имея в виде аргумента “ГПР()”, соответственно, принимает значение “ИСТИНА” или “ЛОЖЬ”. Далее функция “ЕСЛИ()” ведёт себя следующим образом:

Таким образом, на экране мы увидим следующую таблицу:

 

A

B

1

03.08.00

50

2

04.08.00

0

3

05.08.00

100

4

06.08.00

0

...

28

31.08.00

80

Рассмотрим ещё более сложную и интересную задачу. Допустим, та же таблица погашения депозитов ведётся в разбивке по клиентам. Кроме того, итоговая сумма гашения за день в таблице депозитного отдела не вычисляется за ненадобностью этому отделу. Однако нас интересует именно итоговая сумма в день. В рассматриваемом примере таблица, созданная депозитным отделом, будет выглядеть примерно так:

 

A

B

C

1

Дата

Наименование клиента

Сумма депозита

к погашению

2

03.08.00

Клиент 1

20

3

03.08.00

Клиент 2

10

4

05.08.00

Клиент 3

15

5

06.08.00

Клиент 5

24

6

05.08.00

Клиент 4

32

Обратите внимание, что и в этой таблице отсутствуют записи на некоторые даты. Кроме того, по невнимательности заполняющего нарушена хронологическая последовательность. Однако с точки зрения задач депозитного отдела особых нарушений в таблице нет, ибо все клиенты и все суммы учтены. В этой ситуации нам предстоит наладить процесс, при котором данные будут автоматически корректно считываться из исходной таблицы с формированием итогов за день.

Ни одна из применяемых ранее функций для решения данной задачи не подходит, так как все они могут находить только одно значение в исходной таблице. Поэтому мы рассмотрим ещё одну, последнюю в этой статье, группу функций – “Работа с базой данных”, и конкретно, функцию “БДСУММ()”.

Хотя то, что понимается здесь под “Работой с базой данных” у бывалого программиста вызовет лишь снисходительную усмешку, но все же набор возможностей, предоставляемых этой группой функций, достаточно велик. Мы, правда, рассмотрим его несколько однобоко – для решения всё той же задачи. Однако, уловив суть, можно применять функции работы с базой данных для самых разнообразных целей.

Итак, база данных в Excel - это прямоугольная область ячеек, в которой строки являются записями, а столбцы - полями. Верхняя строка списка содержит названия каждого столбцов (см. исходную таблицу). Функция “БДСУММ()” находит и суммирует числа из указанного поля базы данных, если записи, содержащие эти числа удовлетворяют заданному условию. Таким образом, сначала отфильтровываются записи, отвечающие условию (условиям), а затем, числа из указанного поля в этих записях суммируются. В данном примере будем применять единственное и самое простое условие – записи в таблице должны соответствовать заданной дате, хотя это далеко не предел возможностей данного вида функций.

Начнём с того, что в данном случае, ось времени в “получающей” таблице удобнее расположить горизонтально. Одна строка будет занята возрастающим рядом дат. Однако над ней должна располагаться строка, в каждой ячейке которой будет находиться заголовок столбца с датами “передающей” таблицы, т.е. “Дата”. Дело в том, что конструкция из двух, одна над другой расположенных ячеек, и является условием для фильтрования данных. Верхняя ячейка содержит заголовок столбца, данные из которого будут фильтроваться, а нижняя – признак, по которому происходит фильтрование. Так, в нашем примере, из исходной таблицы будут отбираться строки, дата в которых соответствует той, что указана в нижней ячейке. А так как даты в “принимающей” таблице указываются подряд, начиная с текущей, мы добиваемся процесса автоматической сортировки сумм гашения депозитов по времени. Отсортировав все суммы за одну дату, функция “БДСУММ()” их сложит и поместит в “принимающую” таблицу. Набор формул в принимающей таблице за одну дату будет выглядеть следующим образом:

 

 

A

1

Дата

2

=СЕГОДНЯ()

...

n

=БДСУММ([Имя_файла.xls]Имя_листа!$A$1:$C$100;3;A$1:A$2)

При записи функции сначала задаётся область базы данных (см. исходную табл.). В нашем случае предполагается, что база данных состоит из 100 строк. Затем указывается номер столбца базы, из которого будут извлекаться данные – 3. Наконец, указывается область с условием, расположенная уже на местном листе. После окончания ввода данных, функция готова к копированию в остальные ячейки, расположенные правее. Полностью сформированная “принимающая” таблица будет выглядеть следующим образом:

 

A

B

C

D

E

1

Дата

Дата

Дата

Дата

Дата

2

03.08.00

04.08.00

05.08.00

06.08.00

07.08.00

n

30

0

47

24

0

 

Строку 1 рекомендуется скрыть. Единственный недостаток применяемой нами функции: она не умеет “вытягивать” данные из неоткрытых в данный момент файлов. Однако это ограничение легко обойти. Достаточно созданную таблицу записать в исходный файл на отдельный лист, и с помощью ранее описанных функций извлекать из неё приведённые в порядок данные.


ВЕСТНИК Хабаровской государственной академии экономики и права

Главная
Rambler's Top100 Rambler's Top100

Хостинг от uCoz