代码之家  ›  专栏  ›  技术社区  ›  Aspiring Developer

用于选择活动单元格的单独自动求和偏移量或单个范围Excel VBA

  •  0
  • Aspiring Developer  · 技术社区  · 6 年前

    我可能已经删掉了这个标题,但我想做的是自动求和(通过下面的宏),仅基于下面的偏移量的某些列。

    所以当它找到“ccoil”、“coil”或“dcoil”时,它移动4列,求和,然后移动6列,求和(最终总共10个不同的列)。

    但是,在下面的示例中,它使用“range”为4&10之间的每一列添加了一个小计,但是我只希望某些列具有小计。那么,有没有一种方法可以选择具有多个偏移量的多个单元格?

    所以有点像

    ((cell.offset(0,4)),(cell.offset(0,6)),cell.offset(0,8)),cell.offset(0,10)))激活。
    

    我的代码如下:

    对于范围内的每个单元格(“e2:e”&findlastrow(.range(“a2”))) 如果cell.value=“ccoil”或cell.value=“coil”或cell.value=“dcoil”,则 范围((cell.offset(0,4)),(cell.offset(0,10)))。激活 ActiveCell.公式=_ “=sum(”&range(activecell.offset(-1,0),activecell.offset(-1,0).end(xlup))。地址&“)” 结束如果 下一个单元格

    示例数据集

    .

    但是,在下面的示例中,它使用“range”为4&10之间的每一列添加了一个小计,但是我只希望某些列具有小计。那么,有没有一种方法可以选择具有多个偏移量的多个单元格?

    所以有点像

    ((Cell.Offset(0, 4)), (Cell.Offset(0, 6)), Cell.Offset(0,8)), Cell.Offset(0,10))).Activate
    

    我的代码如下:

    For Each Cell In Range("E2:E" & findLastRow(.Range("A2")))
        If Cell.Value = "CCOIL" Or Cell.Value = "COIL" Or Cell.Value = "DCOIL" Then
            Range((Cell.Offset(0, 4)), (Cell.Offset(0, 10))).Activate
            ActiveCell.Formula = _
                "=SUM(" & Range(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-1, 0).End(xlUp)).Address & ")"
        End If
    Next Cell
    

    示例数据集

    2 回复  |  直到 6 年前
        1
  •  3
  •   Guest    6 年前

    也许:

    Dim rngX As Range, rngY As Range
    
    For Each cell In Range("E2:E1000") 'example of range
        If cell.Value = "CCOIL" Or cell.Value = "COIL" Or cell.Value = "DCOIL" Then
            'Range((cell.Offset(0, 4)), (cell.Offset(0, 10))).Activate
            Set rngX = cell.Offset(0, 4)
            rngX.Formula = "=SUM(" & rngX.Offset(-1, 0).Address & ":" & rngX.Offset(-1, 0).End(xlUp).Address & ")"
            Set rngY = cell.Offset(0, 10)
            rngY.Formula = "=SUM(" & rngY.Offset(-1, 0).Address & ":" & rngY.Offset(-1, 0).End(xlUp).Address & ")"
        End If
    Next cell
    
        2
  •  0
  •   Marcucciboy2 Scott Craner    6 年前

    编辑-我想我找到了一个使用“联合”的替代方法

    For Each Cell In Range("E2:E" & findLastRow(.Range("A2")))
        If Cell.Value = "CCOIL" Or Cell.Value = "COIL" Or Cell.Value = "DCOIL" Then
    
            Union(Cell.Offset(0, 4), Cell.Offset(0, 6), Cell.Offset(0, 8), Cell.Offset(0, 10)).Select
    
            Selection.Formula = _
                "=SUM(" & Range(Selection.Offset(-1, 0), Selection.Offset(-1, 0).End(xlUp)).Address(False, False) & ")"
    
        End If
    Next Cell