我有一个电子表格,我试图在其中添加某个股票行情记录的所有交易量,然后将股票行情记录名称和总和粘贴到数据范围的右侧。这是我的预备表的样子
<ticker<date> <open> <high> <low> <close> <vol>
A 20160101 41.81 42.36365509 41.81 4854841.81 0000001
A 20160104 41.06 1.305047274 40.34 3287340.69 0000002
A 20160105 40.73 0.902213812 40.34 2587240.55 0000003
A 20160106 40.24 0.71801573 40.05 2103640.73 0000004
B 20160107 40.14 3.227402925 38.81 3504339.34 3504305
B 20160108 39.22 0.716412187 38.47 3736738.59 3736705
B 20160111 38.71 0.206870243 37.41 2818637.94 2818605
这是我要结束的地方,具有特定股票报价量的总和,并将其股票报价值打印到数据范围右侧的单元格中。
<ticker<date> <open> <high> <low> <close> <vol> <ticker> <vol>
A 20160101 41.81 42.36365509 41.81 4854841.81 0000001 A 10
A 20160104 41.06 1.305047274 40.34 3287340.69 0000002 B 15
A 20160105 40.73 0.902213812 40.34 2587240.55 0000003 C 4
A 20160106 40.24 0.71801573 40.05 2103640.73 0000004
B 20160107 40.14 3.227402925 38.81 3504339.34 0000005
B 20160108 39.22 0.716412187 38.47 3736738.59 0000005
B 20160111 38.71 0.206870243 37.41 2818637.94 0000005
C 20160111 38.71 0.206870243 37.41 2818637.94 0000002
C 20160111 38.71 0.206870243 37.41 2818637.94 0000002
到目前为止,我的宏在“不比较,而是复制并粘贴”标志处中断。 IF语句不进行比较的地方,而是在不使excel程序崩溃的情况下进行复制。
Sub totalVolume()
Dim tickSum As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("I1"), unique:=True
tickerRecordLength = Cells(Rows.Count, 1).End(xlUp).Row
tickerLength = Cells(Rows.Count, 9).End(xlUp).Row
For tl = 1 To tickerLength
tickSum = 1
tickerValue = Cells(tl, 9).Value
'MsgBox (tickerValue)
For tlr = 1 To tickerRecordLength
********************** Does not compare, instead copies & paste **********************
If Cells(tlr, 1).Value = tickerValue Then
***************************************************************************************
MsgBox ("tickerRecord: " + Str(tickerRecord))
MsgBox ("tickerValue: " + Str(tickerValue))
'Cells(tlr, 6).Value = Cells(tlr, 6).Value + Cells(tlr, 7).Value
End If
Next tlr
Cells(tl, 10).Value = tickSum
Next tl
End Sub
答案 0 :(得分:0)
您可以使用application.SumIf并取消这样的第二个循环(为我工作,并处理您的数据示例):
Sub totalVolume()
Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("I1"), unique:=True
tickerLength = Cells(Rows.Count, 9).End(xlUp).Row
For tl = 2 To tickerLength Step 1
tickerValue = Cells(tl, 9).Value
ActiveSheet.Cells(tl, 10) = Application.SumIf(Range("A:A"), tickerValue, Range("G:G"))
Next tl
End Sub
答案 1 :(得分:0)
SUMIF是您所需要的,无论是在代码中,还是要在表上显示总和,您都可以在单元格中植入公式以供所有人查看-该2线可绕过任何循环,第二行只是将公式沿第一行创建的行填充:
Sub totalVolume()
Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("I1"), unique:=True
Range("J2:J" & Cells(Rows.Count, 9).End(xlUp).Row).Formula = "=SUMIF(A:A,I2,G:G)"
End Sub
尽管出于良好实践,我也建议您使用Option Explicit并按名称等定义工作表。