如果value为“ AA”,则将G列的所有值存储在一个包含字母“ AA”的变量中

时间:2019-06-08 01:57:11

标签: vba excel-vba for-loop multiple-columns

我被要求创建一个脚本,该脚本将在每次运行中循环浏览一年的库存数据,并返回该年内每只股票的总交易量。

我还需要显示股票代码以与总库存量保持一致。

我的结果应如下所示(注意:所有解决方案图片均针对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 :(得分:0)

可以用多种方法来完成,但是我只是稍微修改一下您的代码以使其正常工作。

  1. 由于要计算两个参数,因此应使用两个计数器。一个代表“ A”,另一个代表“ AA”。
  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