Для цикла для формулы, которая изменяет ссылки на ячейки - PullRequest
0 голосов
/ 12 октября 2019

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

Лист финансовой отчетности

Для раздела анализа коэффициентов у меня есть отдельная рабочая таблица, где я хочу составить массив рассчитанных коэффициентов. См. Ниже.

Таблица анализа коэффициентов

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

Вот где я застрял. Я не уверен, как пройтись по каждой ячейке моего сводного массива коэффициентов и использовать формулу, которая также меняется для каждого года финансовой отчетности. Я думаю, мне нужно сделать вложенный цикл for, но я действительно не знаю, как выполнить скрипт.

Может кто-нибудь оказать мне огромную услугу и предложить, как я мог бы даже начать планировать это?

Моя консоль разработчика VBA

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

Sub Current_Ratio()

Dim Current_Ratio As Integer
Dim FirstYear As Long, LastYear As Long
FirstYear = 2015
LastYear = 2019

For i = 1 To Worksheets.Count
    If Worksheets(i).Name Like "*Balance Sheet*" Then
        For y = FirstYear To LastYear
            Current_Ratio = Worksheets(i).Range("F21").Value / Worksheets(i).Range("F51").Value
            'need line to place the computed current ratios into range B3:B37 on sheet17(Ratio Analysis)
        Next y
    End If
Next i

End Sub

1 Ответ

0 голосов
/ 12 октября 2019

Вы открыты для решения формулы, а не VBA? Вот как я бы попробовал это в первую очередь. Я говорю «попробуй», потому что функция INDIRECT() медленная, и если у тебя слишком много формул, тебе может не понравиться производительность. Но я не вынесу такого решения, пока не попробую.

current ratio

У меня есть лист с именем Company 1 Balance Sheet, а в B21: D21 у меня 1015 и 20 соответственно. В B51: D51 у меня есть 20. У меня также есть лист с именем Company 2 Balance Sheet, который имеет те же числители, но и знаменатель 30.

Вот формула в C2

=INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66+VALUE(SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")))&"21")/INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66+VALUE(SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")))&"51")

Iначал с указания и щелчка, чтобы построить эту формулу

='Company 1 Balance Sheet'!B21/'Company 1 Balance Sheet'!B51

Затем я использовал INDIRECT, чтобы построить эту формулу в виде строки, чтобы я мог изменить входные данные. Давайте возьмем только часть числителя, потому что она работает одинаково для обоих. Моя компания находится в столбце А, поэтому я могу начать с замены этой части формулы

=INDIRECT("'"&A2&" Balance Sheet'!B21")

Балансовая часть названия будет последовательной, поэтому я оставлю это. Мне нужно изменить B, чтобы сослаться на соответствующий год. Я начну с создания этой переменной. В наборе символов ASCII буква B - 66.

=INDIRECT("'"&A2&" Balance Sheet'!"&CHAR(66)&"21")

Теперь я могу добавить любой год, который я хочу, к 66, чтобы увеличить его. Мой год в столбце B, но вокруг него много шума. Сначала мне нужно выделить числовую часть

=SUBSTITUTE(SUBSTITUTE(B2,"T-",""),"yr","")

, которая избавляет от содержимого вокруг числа. Затем я использую VALUE, чтобы превратить его в число. Я могу добавить это число к 66, так что T-1yr относится к 67, что является C.

И это все. Это немного больно настраивать, но как только это будет сделано, просто скопируйте его. Обратите внимание, что ошибки Div / 0 означают, что у вас нет данных за этот год. Когда формулы работают так, как вы хотите, оберните их в функцию IFERROR(), чтобы скрыть их.

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

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

...