Excel: обратитесь к полям в каждой строке переданного диапазона - PullRequest
1 голос
/ 06 января 2020

У меня есть электронная таблица с несколькими наборами периодических расходов и периодом их возникновения в год, как в следующем примере:

12  € 422,88
12  € 423,60
12  € 1.576,80
1   € 33,84
4   € 30,00
12  € 852,00

Каждая запись, в которой первый столбец равен 12, обозначает ежемесячные расходы, 1 означает годовой, а 4 - квартальный. Теперь я хотел бы сделать ежемесячное резервирование для всех немесячных расходов, добавив сумму каждой записи, где первый столбец не равен 12, и разделив сумму на 12.

Я пытаюсь сделать это путем итерации в диапазоне с обоими столбцами, например:

Function Reserve(expenses As Range) as Currency
  Dim row As Range
  Dim total As Integer

  total = 0
  For Each row In expenses
    if row.Cells(0).Value2 != 12 Then Total += row.Cells(1).Value2
  Next row
  Reserve = total / 12
End Function

Эта проблема заключается в том, что row.Cells (0) .Value2 не принимается. Как мне сослаться на два поля в каждой строке пройденного диапазона?

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Основная проблема заключалась в том, что в диапазонах по умолчанию индексы основаны на 1, а не на 0, как я изначально предполагал. Кроме того, знак неравенства в VBA равен <>, и для увеличения суммы переменной синтаксис + = не поддерживается.

Поэтому строка должна быть:

If row.Cells(1, 1).Value <> 12 Then total = total + row.Cells(1, 2).Value
0 голосов
/ 07 января 2020

Почему вы вообще обращаетесь к VBA? Формула Excel была бы намного проще - или вы можете вызвать ту же формулу Excel из VBA, если требуется: =(SUMIF(A1:A10,1,B1:B10)+SUMIF(A1:A10,4,B1:B10)*4)/12

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...