我有以下代码:
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
这段代码的目的是通过数据样本和
现在我还希望它在最终版本中保留所有重复项的第 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/