首页 文章

符合条件的总行数

提问于
浏览
-1

我有一个电子表格,我试图添加所有某个自动收报机的音量,然后将自动收报机名称和总和粘贴到数据范围的右侧 . 这是我的三明治表的样子

<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

这是我试图结束的地方,使用某个股票代码的交易量和它的股票 Value 的总和打印到数据范围右侧的单元格 .

<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

    SUMIF是您所需要的,无论是在代码中,还是如果您希望在工作表上显示总和,您可以在单元格中植入公式供所有人查看 - 这个2-liner完全绕过任何循环,第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并按名称定义您的工作表等 .

  • 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
    

相关问题