【问题标题】:If value is "AA" , store all the values of column G in one variable that contains letters "AA"如果值为 "AA" ,则将 G 列的所有值存储在一个包含字母 "AA" 的变量中
【发布时间】:2019-06-08 01:57:11
【问题描述】:

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

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

我的结果应如下所示(注意:所有解决方案图像均为 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”单元格中获得每个代码的总成交量中的所有总和,我完成了第一个,但是随着计数得到最后一个值,第二个得到另一个结果

【问题讨论】:

  • 为什么不使用COUNTIF 公式?
  • 用那个公式很容易完成我想要的。但我需要在 vba(宏)中做到这一点
  • application.worksheetfunction.COUNTIF(.Range("A1:A1000"), "=" & "A")。每个excel公式都有一个VBA函数,比循环快得多。

标签: excel vba for-loop multiple-columns


【解决方案1】:

可以通过多种方式完成,但我只是稍微修改您的代码以使其正常工作。

  1. 由于您正在计算两个参数,因此您应该使用两个计数器。一个代表“A”,另一个代表“AA”。
  2. 无需在循环中保留行写入结果(如Range("I2").Value = "A"Range("J2").Value = Counteretc)。最后在循环完成后将值写入所需的单元格

最终代码是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2012-04-11
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2016-12-15
    • 2017-12-10
    相关资源
    最近更新 更多