Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Уокенбах Формулы в Excel

.pdf
Скачиваний:
212
Добавлен:
26.03.2016
Размер:
35.82 Mб
Скачать

If SortedData(j)

<> "" Then

 

 

If

ascending

Then

 

 

 

 

If

SortedData(i)

> SortedData(j)

Then

 

 

 

Temp

= SortedData(j)

 

 

 

 

SortedData(j)

= SortedData(i)

 

 

 

 

SortedData(i)

= Temp

 

 

 

End

If

 

 

 

 

Else

 

 

 

 

 

 

If

SortedData(i)

< SortedData(j)

Then

 

 

 

Temp

= SortedData(j)

 

 

 

 

SortedData(j)

= SortedData(i)

 

 

 

 

SortedData(i)

= Temp

 

 

 

End

If

 

 

 

 

End

If

 

 

 

 

End

If

 

 

 

 

 

Next

j

 

 

 

 

 

Next i

SORTED = Application.Transpose(SortedData)

End Function

Обратитесь к части V для получения информации о создании пользовательских VBA-функций.

Функция SORTED имеет два аргумента: диапазон ссылок и дополнительный второй аргу-

мент, который определяет порядок сортировки. Порядок сор-

 

 

 

 

тировки по умолчанию — по возрастанию. Если в качестве

 

 

 

ДТП1)*)

второго аргумента использовать логическое значение FALSE,

\ jitat* Е»а*

 

7%

произойдет сортировка по убыванию.

 

7

'Anas

Anas

p

Однажды введя процедуру функции SORTED в VBA-

'3

; Davis

Colangelo

4

jTrammell

Darr

*J

модуле, можно использовать функцию SORTED во всех фор-

5

Jackson

Davis

-6

:Magadan

Gonzalez

мулах. Приведенная формула массива, например, возвращает

^v^Mendez

Gwynn

 

8/Kotsay

Henderson

 

содержимое одномерного вертикального массива Data, от-

••f Xolanqelo

Jackson

 

 

 

Klesko

 

сортировав его по возрастанию:

 

 

 

*1:!Nevin

Kotsay

 

^3|"i Henderson

Magadan

« V .

(=SORTED(Data)}

 

13

Klesko

Mendez

 

 

14* Perez

Nevin

 

Вводить формулу следует в диапазон такого же размера,

J$?Gwynn

Perez

да

 

Л6 ^Gonzalez

Trammell

 

что и диапазон Data.

 

.l^.'Darr

 

 

. 'M

 

 

Для сортировки содержимого диапазона Data по убыва-

 

 

нию нужно воспользоваться формулой массива:

{=SORTED(Data/False)}

Puc. 15.14. Использование поль-

зовательскойфункции в формуле

 

Как можно увидеть, применение пользовательских функций массива

приводит к значительному сокращению размера формул. Од-

 

нако пользовательские функции, как правило, работают медленнее, чем встроенные в Excel.

На рис. 15.14 показан пример того, как эта функция применяется в формуле массива. Диапазон А2 :А17 имеет имя Data, а формула массива введена в диапазон С2 : С17.

360

Часть IV.Формулы массива

Резюме

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

Вследующей главе описываются умышленные циклическиессылки.

Глава 15. Магияформулмассива

361

 

ЧастьV

 

Совершенное

 

владение формулами

 

ГЛАВА 16

 

'Умышленные циклические ссылки"

 

ГЛАВА 17

 

"Методы построения диаграмм"

 

ГЛАВА 18

 

"Сводные таблицы"

 

ГЛАВА 19

 

"Условное форматирование

 

и проверка вводимых значений"

 

ГЛАВА 20

 

"Создание мегаформул"

 

ГЛАВА 21

^,7 , ...

"Инструменты

и методы отладки формул"

<-'V ,; ;,,, ;\/J

Глава 16

Умышленные циклическиессылки

Вэтой главе...

Что такое циклические ссылки?

Умышленные циклические ссылки

Определение параметров вычислений и итераций

Примеры формул, использующих циклические ссылки

Возможные проблемы, связанные с использованием циклических ссылок

Резюме

ДЛЯ БОЛЬШИНСТВА пользователей, работающих с электронными таблицами, термин циклические ссылки ассоциируется с возникновением ошибки. В большинстве случаев циклические ссылки приводят к аварийной ситуации и требуют применения определенных действий по их устранению. Однако в некоторых случаях циклические ссылки могут оказаться полезными. В данной главе представлено несколько примеров использования умышленных циклических ссылок.

Что такое циклические ссылки?

При вводе формул в электронный лист возможно появление сообщения Excel, подобного показанному на рис. 16.1. Таким образом программа сообщает о том, что введенная формула приведет к возникновению циклической ссылки. Такая ссылка возникает в случае, когда формула ссылается на ячейку, в которую она занесена, прямо или косвенно. Например, циклическая ссылка возникнет, если в ячейке А10 ввести приведенную ниже формулу (формула обращается к ячейке, содержащей ее):

=СУММ(А1:А10)

 

 

Фориуда иеовлрешинан»эд алкличвскойссылки* Устранение ошибки.

 

 

 

 

 

/

Л

• Если циклическая ссылка создан* случайно, нажмите кнопку "<Ж". будет открыта панельинструмент» •

(

1>

•Циклические ссылки* сосправкоййо ее испояьхжанню.

 

:

 

 

 

 

 

• Дляполучения сведений о цикличесю«ссыякахн«Ю1ИТ*кногжу "Справке",

'

-

•"

'

,

 

 

• Чтобы оставить формулу бе» юменений, нвжиит* кнопку "Отмена",

• ;

 

 

ч

 

Рис. 16.1. Таким образом Excel сообщает о том, что формула содержит циклическую ссылку

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

Глава 16.Умышленныециклические ссылки

365

Исправление случайных циклических ссылок

После вывода сообщения о возникновении циклической ссылки Excel предлагает три варианта последующих действий:

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

Щелкните на кнопке Отмена для ввода формулы в том виде, в каком она есть.

Щелкните на кнопке Справка для получения информации о циклических ссылках в справочной системе.

Большинство случаев возникновения ошибок циклических ссылок обусловлены просто ошиб-

ками ввода символов или неверным указанием диапазо-

 

 

 

 

 

нов.

Например, при создании формулы в ячейке А10

мог

 

 

.в . . . с

D < E

< """"

быть

ошибочно

введен аргумент А1.-А10

вместо

пра-

. „

 

2

4

 

 

 

вильного А1 :А9.

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

3 *

12

 

 

 

Если

источник

ошибки

известен, щелкните

на

4

4

 

 

 

5"

8

 

 

 

кнопке Отмена. В строке состояния Excel

выведет

со-

бН

7

 

 

 

 

 

 

 

общение,

напоминающее

о

 

существовании

цикличе-

7

4

Д|иJilя'luiii^Jfain lfti'iTiltfrfiii

 

 

 

|$A$11

 

 

 

 

3

 

 

 

9

 

 

 

ской

ссылки. В

данном

случае это

будет сообщение

6

 

 

 

10"

5

 

 

 

"Цикл:А10".

Если

активизировать

другую

рабочую

111

 

 

 

 

12

 

 

 

 

книгу или лист, отображается

сообщение "Цикл" (без

"13

 

 

 

 

14"

 

 

 

 

указания ссылки на ячейку). После этого можно испра-

 

 

 

 

15'

 

 

 

 

вить формулу и устранить ошибку.

 

 

 

 

16

 

 

 

 

 

 

 

 

17"

 

 

 

 

Если вы получили сообщение о возникновении цикли-

18

 

 

 

 

19

 

 

 

 

ческой ссылки

и

не

знаете,

где она

находится, можно

2Q"

 

 

 

 

21

 

 

 

 

щелкнуть на кнопке Справка. При этом будет выведено

JXll

-

 

 

 

М О

И|\

J<1

i

йП>

окно справочной системы с информацией по циклическим

 

 

Рис.

16.2.

Панель

инструментов

ссылкам

и

 

отображена

 

панель

инструментов

Циклические ссылки (рис. 16.2). На данной панели инст-

Циклические ссылки

 

 

рументов

выберите

первую

ячейку в

раскрывающемся

 

 

 

 

 

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

О циклическихссылках

Использование циклических ссылок на реальных примерах описано во врезке "Еще о циклических ссылках" далее в данной главе.

Если опция вычисления итераций включена, Excel не будет отображать диалоговое окно Циклические ссылки. Данная функция включается установкой флажка в диалоговом окне Параметры (на вкладке Вычисления). О данном параметре детально рассказано ниже.

366

Часть V. Совершенноевладение формулами

Косвенные циклические ссылки

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

Детальнее об отслеживании цикличных ссылок сказано в главе21.

Умышленные циклическиессылки

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

По умолчанию Excel не производит итерационные вычисления. Можно указать программе, что вы желаете, чтобы в рабочих книгах такие вычисления производились. Это можно сделать на вкладке Вычисления диалогового окна Параметры (рис. 16.3).

Международные

Вид

Вычисления

4* автоматически

 

Предельное

умелоитераций: 1100

Параметрыкниги

**"

~

Р

обновлять удаа««ыв<сыжи

 

Г* точность как на экране

 

Г

системе д » т 1 « Н

 

j Проверка ошибок

}

Орфография | Безопасность

Общие | Переход

]

Списки | Диаграмма j Цвет

 

 

Пересмет диета |

V? сохранять а имения внешних сивей

Г~ допуосать цазвамий диапазонов ,

Рис. 16.3. Для вычисления циклических ссылок необходимо установить флажокопции итерации

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

Глава 16.Умышленные циклические ссылки

367

Gross Income

250.000

 

Expenses

189,500

 

Contributions

2,681

5% of Net Profit

Net Profit

57,619

Grass Income • Expenses - Contributions

H^Sheetl/ ,,'

 

J

Рис. 16.4. Создав умышленную циклическую ссылку компания вычитает из чистой прибыли пятипроцентноевложениев видерасходов

Циклическую ссылку нельзя вычислить, если не включена опция поддержки итераций.

Текст в столбце А соответствует именованным ячейкам в столбце В, а ячейка СЗ названа Pet. Ячейка Contribution(B3) содержит следующую формулу:

=Pct*Net_Profit

Ячейка Net_Profit(В4) содержит следующую формулу: =Gross_Income-Expenses-Contribution

Данная формула создает решаемую циклическую ссылку. Excel продолжает вычисления до тех пор, пока результат формулы не приведет к решению.

Читателям первого издания данной книги известно о другом варианте решения данной задачи без использования циклических ссылок. Для вычисления ячейки Net_Profit используется формула:

=(Gross_Income-Expenses)/(1+Pct)

Затем выполняется вычисление ячейки c o n t r i b u t i o n с помощью формулы:

Pct*Net_profit

Вкладка Вычисления диалогового окна Параметры содержит три группы параметров, относящихся к вычислению циклических ссылок:

Флажок итерации: если не установлен, Excel не производит итерационные вычисления и в случае создания формулы с циклической ссылкой отображает диалоговое окно предупреждения. Если создается умышленная циклическая ссылка, необходимо установить данный флажок.

Поле Предельное число итераций: определяет максимальное число итераций, производимых Excel. Данное значение не может быть больше 32767.

Поле Относительная погрешность: определяет, когда заканчиваются итерации. Например, если установка равна 0, 01, итерации прекратятся, когда будет получен результат вычисления, отличающийся на 1 процент от предыдущего значения.

Вычисления продолжаются до тех пор, пока не будет достигнуто заданное число итераций, или пока повторное вычисление не будет изменять все ячейки на значение меньшее, чем указано в поле Относительная погрешность (до выполнения одного из этих условий). В зависимости от задачи может потребоваться изменить значение вполе Предельное число итераций или Относительная погрешность. Для получения более точного результата нужно уменьшить значение допустимой погрешности. Если после выполнения 100 итераций результат не сходится, можно увеличить их число.

Для того чтобы прочувствовать, как все это работает, откройте пример рабочей книги, представленный в предыдущем разделе. Затем:

368

Часть V. Совершенное владение формулами

1.Перейдите на вкладку Вычисления диалогового окна Параметры и убедитесь, что флажок итерации установлен.

2.Установите Предельное число итераций, равное 1.

3.Установите значение Относительная погрешность, равным 0, 01.

4.Введите другое значение в ячейке Net_prof i t (ячейка В1).

5.Нажмите клавишу <F9> для вычисления листа.

Так как максимальное число итераций задано равным 1, нажатие клавиши <F9> приведет к выполнению лишь одного цикла вычислений. Нетрудно заметить, что значение ячейки Contributio n не сходится с решением. Нажмите клавишу <F9> еще несколько раз, и вы сможете увидеть, как значение ячейки становится более близким к искомому решению. После того как решение найдено, нажатие клавиши <F9> не производит существенных изменений. Если задано большое число итераций, решение появляется фактически незамедлительно (если оно не включает сложные вычисления).

Определение параметров вычислений иитераций

Примите к сведению, что все открытые рабочие книги используют одинаковые установки вычислений и итераций. Если, например, есть две открытые рабочие книги, нельзя для одной установить автоматическое выполнение вычислений, а в другой выполнять вычисления вручную. Хотя рабочая книга может быть сохранена со своими особыми параметрами (например, вычисления вручную без итераций), данные установки могут изменяться при открытии другой рабочей книги.

При определении параметров вычислений и итерации, которые необходимо использовать, Excel руководствуется следующими правилами:

• Первая открытая рабочая книга использует режим вычислений, который был сохранен с ней. Если открыть другие книги, в нихбудет использоваться тот же режим вычислений.

Например, имеется две рабочие книги Книга1 и Книга2. В Книга1 флажок итерации сброшен (значение по умолчанию), а в Книга2 (использующей умышленные циклические ссылки) данный флажок установлен. Если сначала открыть Книга1, а затем Книга2, в обеих рабочих книгах функция вычисления итераций будет отключена. Но если открыть их в обратной последовательности, данная функция будет включена дляобеих книг.

• Изменение режима вычислений для одной книги приводит к изменению режима вычислений всех рабочих книг.

Если обе рабочие книги, Книга 1 и Книга2, открыты, изменение режима вычислений

водной из них коснется их обеих.

Все рабочие листы книги используют один и тот же режим вычислений.

Если все рабочие книги закрыты, и вы создаете новую, она будет использовать те же

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

• Если режим вычислений в книге изменен, а файл пересохранен, к рабочей книге будет применен текущий режим вычислений.

Глава 16.Умышленные циклические ссылки

369