excel - VBA,如何将动态/相对单元格引用插入 .formulaArray 方法?

标签 excel vba

我有以下代码:

  With Sh.Range("A1:A" & LastRow + 1).Offset(0, 4)
    .FormulaArray = "=MAX(IF(A2:A" & LastRow + 1 & "= ** , D2:D" & LastRow + 1 & "))"
    .Value = .Value
  End With

在我有**的地方,我想要一个动态单元格引用。如果我使用的是 .formulaR1C1,我会插入 RC[-1],但我不能将它与 .formulaArray 一起使用。

有谁知道我如何插入一个相对单元格引用,该引用会随着公式在范围内粘贴而改变?

谢谢

编辑#1

整个代码如下所示:
Sub RemoveDuplicates_SumMarketValue()
Dim Sh As Worksheet
Dim LastRow As Long
Dim Rng As Range



Set Sh = Worksheets(1)

Sh.Columns(6).Insert

LastRow = Sh.Range("A65536").End(xlUp).Row

With Sh.Range("A1:A" & LastRow).Offset(0, 5)
    .FormulaR1C1 = "=IF(COUNTIF(R1C[-5]:RC[-5],RC[-5])>1,"""",SUMIF(R1C[-5]:R[" & LastRow & "]C[-5],RC[-5],R1C[-1]:R[" & LastRow & "]C[-1]))"
    .Value = .Value
End With
Sh.Columns(5).Delete
Sh.Rows(1).Insert



Sh.Columns(5).Insert

With Sh.Range("A1:A" & LastRow + 1).Offset(0, 4)
    .FormulaArray = "=MAX(IF(A2:A" & LastRow + 1 & "= A1 , D2:D" & LastRow + 1 & "))"
    .Value = .Value
End With



Set Rng = Sh.Range("E1:E" & LastRow + 1)

With Rng
    .AutoFilter Field:=1, Criteria1:="="
    .SpecialCells(xlCellTypeVisible).EntireRow.Delete

End With

End Sub

这段代码的目的是通过数据样本和
  • 查找重复
  • 对第 5 列中与重复项相关的值求和
  • 删除重复行(除了第 5 列的总和)

  • 现在我还希望它在最终版本中保留所有重复项的第 4 列的最大值,但我无法让数组公式正确引用该行。

    最佳答案

    编辑:尝试将其粘贴到“ThisWorkbook”代码表中:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim Sh As Worksheet
    Dim LastRow As Long
    Dim Rng As Range
    
    Set Sh = Worksheets(1)
    
    LastRow = Sh.Range("A65536").End(xlUp).Row
    
    With Sh.Range("A1:A" & LastRow).Offset(0, 5)
        .FormulaR1C1 = "=IF(COUNTIF(R1C[-5]:RC[-5],RC[-5])>1,"""",SUMIF(R1C[-5]:R[" & LastRow & "]C[-5],RC[-5],R1C[-1]:R[" & LastRow & "]C[-1]))"
        .Value = .Value
    End With
    
    With Sh.Range("A1:A" & LastRow + 1).Offset(0, 4)
        .FormulaArray = "=MAX(IF(A2:A" & LastRow + 1 & "= A1 , D2:D" & LastRow + 1 & "))"
        .Value = .Value
    End With
    
    'This section you might want to remove from this routine
    Set Rng = Sh.Range("E1:E" & LastRow + 1)
    
    With Rng
        .AutoFilter Field:=1, Criteria1:="="
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    
    End Sub
    

    它基本上与您的函数相同,但它不会删除列或添加任何行。每次你的单元格内容发生变化时,这个宏都会自动运行,更新单元格中的公式。

    最接近实现这一目标的方法是在后台运行一个宏,每次对工作表进行更改时都会运行该宏。如果您有数万行,或者一台非常慢的计算机,这可能不是理想的解决方案。但是,如果不是这种情况,您可能会发现只需很少更改即可让您的代码正常工作。
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
        'Update your formula here with the new content/reference 
        '  (your code + some changes to update where the last row is)
    
    End Sub
    

    将此粘贴到“ThisWorkbook”中,然后将代码放入其中。

    关于excel - VBA,如何将动态/相对单元格引用插入 .formulaArray 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033165/

    相关文章:

    excel - VBA 属性 Let - 两个参数

    Excel VBA - 按照表中的描述添加行

    excel - 将过滤后的数据从一张表复制到另一张表

    excel - 使用舍入值作为 VLOOKUP 的输入导致 #N/A 返回

    excel - 使用 VBA 查看 Excel 公式框中的单元格内容而不是公式

    excel - 运行时错误 '1004' 抱歉,我们找不到....文件路径。可能被移动、重命名或删除

    vba - 变量始终返回为 False

    excel - 如何使用 VBA 将以 = 开头的字符串插入到单元格值中?

    vba - Excel 在执行期间卡住

    java - 如何使用 apache-poi 在列中显示对象