-1

Я использую код VBA, чтобы получить общие значения из столбца в зависимости от некоторых критериев. Прикрепленное изображение, которое я использую, чтобы объяснить, чего я пытаюсь достичь.

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

Что-то вроде: total = total + valueOnCell [i]

Не очень крутой код:

Function siteTraffic(currentMonth As Integer, currentYear As Integer) As Integer

Dim total As Integer
Dim start As Integer
Dim step As Integer

If currentMonth = 7 Then

   Sheets("Calculations").Range("d7").Formula = "=SUM(SUMIFS(Data[Sessions],Data[Month of the year],""=" & currentMonth & """,Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))"


    ElseIf currentMonth = 8 Then

    Sheets("Calculations").Range("d7").Formula = "=SUM(SUMIFS(Data[Sessions],Data[Month of the year],""=" & currentMonth & """,Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))" _
    & "+SUM(SUMIFS(Data[Sessions],Data[Month of the year],""= 7 "",Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))"

     ElseIf currentMonth = 9 Then


    Sheets("Calculations").Range("d7").Formula = "=SUM(SUMIFS(Data[Sessions],Data[Month of the year],""=" & currentMonth & """,Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))" _
    & "+SUM(SUMIFS(Data[Sessions],Data[Month of the year],""= 7 "",Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))" _
    & "+SUM(SUMIFS(Data[Sessions],Data[Month of the year],""= 8 "",Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))"

       End If
   End Select
End Function

Я пытаюсь изменить свой код, чтобы он был динамически записан, но я получил ошибку переполнения

Function siteTraffic(currentMonth As Integer, currentYear As Integer) As Integer
'currentMonth will be 01-12
'currentYear will be >=2016
Dim step As Integer 
Dim start As Integer

For start = 1 To currentMonth

    Sheets("Calculations").Range("d7").Formula = "=SUM(SUMIFS(Data[Sessions],Data[Month of the year],""=" & start & """,Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))"

    step = Sheets("Calculations").Range("d7").Value + step

    Next start

    End If

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

1 ответ1

0

Это может быть потому, что вы используете целое число в качестве типа var. Вы должны зарезервировать больше памяти с long , double или variant . Если вариант Type имеет десятичные дроби, тогда приведите его как этот variant = CDec(variant) .

Function siteTraffic(currentMonth As Integer, currentYear As Integer) As Integer
'currentMonth will be 01-12
'currentYear will be >=2016
Dim step As Double <- you need something bigger 
Dim start As Integer

For start = 1 To currentMonth

    Sheets("Calculations").Range("d7").Formula = "=SUM(SUMIFS(Data[Sessions],Data[Month of the year],""=" & start & """,Data[Year],""=" & currentYear & """,Data[Segment],{""=Geo - International"",""=Geo - US & LATAM""}))"

    step = Sheets("Calculations").Range("d7").Value + step

Next start

End If

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .