符合条件的总行数

时间:2018-06-30 04:35:23

标签: vba excel-vba excel

我有一个电子表格,我试图在其中添加某个股票行情记录的所有交易量,然后将股票行情记录名称和总和粘贴到数据范围的右侧。这是我的预备表的样子

<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

2 个答案:

答案 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并按名称等定义工作表。