【问题标题】:Adding every 3rd row in a Column Macro VBA在列宏 VBA 中添加每第三行
【发布时间】:2017-05-08 21:39:15
【问题描述】:

我正在尝试对“K”列中的每 3 行求和,从 K2 开始到最后使用的单元格。请注意,“K”列中使用的数据或单元格会有所不同。

我需要一个宏来汇总每 3 行中的值,直到使用的最后一行,并在“M1”中显示总计。

我附上了一些样本值的快照以及我希望最终结果的样子。

【问题讨论】:

  • 这也可以用公式来完成。
  • 我只有简单的代码来求和这些值。我曾尝试使用 MOD 公式,但没有成功。这是我目前对“K”列总和的代码: Sub Macro2() ' ' Macro2 Macro ' ' Dim Lastrow As Long Range("M1").Value = Application.Sum(Range("K2:K" & Lastrow)) 结束子
  • 将您尝试过的代码(或公式)发布到问题中。 (几乎不可能在评论中阅读,并且 cmets 可能会被删除,这会使问题变得毫无用处。)修复您的 Mod 以使其正常工作应该不难。
  • 这是我使用的公式。 =SUM(--(MOD(ROW(1:28),3)=0),(K1:K28))
  • 请注意,我需要这个是 VBA 格式。

标签: vba excel


【解决方案1】:

短而慢(经过测试,在 Excel 中只能作为数组公式使用):

[M1] = [SUM(IF(MOD(ROW(K:K),3)=1,K:K))]

或通过限制范围延长一点:

[M1] = Evaluate(Replace("SUM(K2:K9*(MOD(ROW(2:9),3)=1))", 9, [K1].End(xlDown).Row))

【讨论】:

    【解决方案2】:

    Howdee Tom - 这应该对你有用。

    Sub Sum_Every_Third()
    Dim sht As Worksheet
    Dim lastRow As Long, amount As Long
    
    Set sht = Worksheets("Sheet1") 'Be sure to change to your correct sheet name
    
    lastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
    
    amount = 0
    For i = 2 To lastRow
    If Cells(i, 13).Offset(-1, 0).Row Mod 3 = 0 Then ' Make sure you change 13 to your column number
        amount = amount + Cells(i, 13).Value
    End If
    Next i
    
    MsgBox amount
    
    End Sub
    

    【讨论】:

    • 谢谢 Wolfie 和 Clouse24 都按需要工作了!非常感谢你们!
    【解决方案3】:

    这个sub应该可以实现你的求和,详情见cmets

    Sub dosum()
        ' Get last row
        Dim lastrow As Long
        lastrow = ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Cells.Count).Row
        ' Assign range object to data in column K
        Dim myRange As Range
        Set myRange = ActiveSheet.Range("K2:K" & lastrow)
        ' Sum every third item
        Dim i As Long
        Dim mySum As Double
        mySum = 0
        ' Step through cells in range, 3 at a time
        For i = 3 To myRange.Cells.Count Step 3
            mySum = mySum + myRange.Cells(i).Value
        Next I
        ' Put in cell 
        ActiveSheet.Range("M1").Value = mySum
    End Sub   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多