Если значение равно «AA», сохраните все значения столбца G в одной переменной, содержащей буквы «AA» - PullRequest
0 голосов
/ 08 июня 2019

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

Мне также нужно отобразить символ тикера, чтобы он совпадал с общим объемом запаса.

Мой результат должен выглядеть следующим образом (примечание: все изображения решений приведены для данных 2015 года).

https://tec.bootcampcontent.com/Tecnologico-de-Monterrey-Coding-Boot-Camp/TECMC201905DATA2/raw/master/Week%202%20-%20VBA%20Scripting/Homework/Instructions/Images/easy_solution.png

Sub Button1_Click()
Dim i As Long, j As Long
Dim counter As Long
Dim x As Double





For i = 1 To 1000
    If Cells(i, 1).Value = "A" Then
        Range("I2").Value = "A"
        counter = counter + Cells(i, 7).Value
        Range("J2").Value = counter

    ElseIf Cells(i, 1).Value = "AA" Then
        Range("I3").Value = "AA"
        counter = counter + Cells(i, 7).Value
        Range("J3").Value = counter
    End If
Next i


End Sub

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

1 Ответ

0 голосов
/ 08 июня 2019

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

  1. Поскольку вы рассчитываете два параметра, вы должны использовать два счетчика. Один для «А», другой для «АА».
  2. Нет необходимости хранить строки, пишущие результаты (например, Range("I2").Value = "A" Range("J2").Value = Counter и т. Д.) В цикле. Наконец запишите значения в нужную ячейку после завершения цикла

Окончательный код будет

Sub Button1_Click()
Dim i As Long, j As Long
Dim Counter As Long, Counter2 As Long
Dim x As Double


For i = 1 To 1000
    If Cells(i, 1).Value = "A" Then
        Counter = Counter + Cells(i, 7).Value
    ElseIf Cells(i, 1).Value = "AA" Then
        Counter2 = Counter2 + Cells(i, 7).Value
    End If
Next i

Range("I2").Value = "A"
Range("J2").Value = Counter
Range("I3").Value = "AA"
Range("J3").Value = Counter2
End Sub

Самое простое решение VBA может быть

Sub Button1_Click()
Range("I2").Value = "A"
Range("J2").Value = WorksheetFunction.SumIf(Range("A1:A1000"), "A", Range("G1:G1000"))
Range("I3").Value = "AA"
Range("J3").Value = WorksheetFunction.SumIf(Range("A1:A1000"), "AA", Range("G1:G1000"))
End Sub
...