通过 Excel VBA 将 Xlookup 添加到范围
Add Xlookup to a range via Excel VBA
我尝试通过 VBA 问题搜索我的 XLookup 的解决方案,但找不到。我有以下数据集:
在数据集中,如果 C2:C6 范围内的任何单元格为空,我想在这些单元格中使用此公式 =IF(ISBLANK(B2),"",XLOOKUP(B2,A:A,IF(ISBLANK(D:D),"",D:D)))
。 B2 的行号是可变的,具体取决于我们通过 VBA.
放置此公式的行
如果 C2:C6 范围内的任何单元格有值,我想在没有任何公式的情况下使用该值。如果有人删除了该值并且单元格变为空白,VBA 会将上述公式添加到该单元格。
目前在上面的截图中,C2:C6范围内的所有单元格都有上面的公式。
希望我说得有道理。如果这不可行,没关系。我总是可以使用辅助列。但我认为 VBA 对我的仪表板来说是一种更简洁的方式。
非常感谢。
在sheet的class模块中,放入这段代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rCell As Range
For Each rCell In Me.Range("C2:C6").Cells
If IsEmpty(rCell.Value) Then
Application.EnableEvents = False
rCell.FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",xlookup(RC[-1],C[-2],IF(ISBLANK(C[1]),"""",C[1])))"
Application.EnableEvents = True
End If
Next rCell
End Sub
每当 sheet 上的某些内容发生变化时,这将 运行。这不会减慢速度,因此您不想尝试在 Change 事件中做太多事情。不过,它不会在计算时触发。
这个似乎适用于任何数据集。感谢大家的帮助:
Private Sub InsertFormula()
Dim mwRng As Range
Set mwRng = Range("C2:C250")
Dim d As Range
For Each d In mwRng
If d.Value = "" Then
d.Formula = "=IF(RC[-1]="""",""-"",INDEX(C[1],MATCH(RC[-1],C[-2],0)))"
End If
Next d
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C2:C250")) Is Nothing Then
Application.EnableEvents = False
Call InsertFormula
Application.EnableEvents = True
End If
End Sub
我尝试通过 VBA 问题搜索我的 XLookup 的解决方案,但找不到。我有以下数据集:
在数据集中,如果 C2:C6 范围内的任何单元格为空,我想在这些单元格中使用此公式 =IF(ISBLANK(B2),"",XLOOKUP(B2,A:A,IF(ISBLANK(D:D),"",D:D)))
。 B2 的行号是可变的,具体取决于我们通过 VBA.
如果 C2:C6 范围内的任何单元格有值,我想在没有任何公式的情况下使用该值。如果有人删除了该值并且单元格变为空白,VBA 会将上述公式添加到该单元格。
目前在上面的截图中,C2:C6范围内的所有单元格都有上面的公式。
希望我说得有道理。如果这不可行,没关系。我总是可以使用辅助列。但我认为 VBA 对我的仪表板来说是一种更简洁的方式。
非常感谢。
在sheet的class模块中,放入这段代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rCell As Range
For Each rCell In Me.Range("C2:C6").Cells
If IsEmpty(rCell.Value) Then
Application.EnableEvents = False
rCell.FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",xlookup(RC[-1],C[-2],IF(ISBLANK(C[1]),"""",C[1])))"
Application.EnableEvents = True
End If
Next rCell
End Sub
每当 sheet 上的某些内容发生变化时,这将 运行。这不会减慢速度,因此您不想尝试在 Change 事件中做太多事情。不过,它不会在计算时触发。
这个似乎适用于任何数据集。感谢大家的帮助:
Private Sub InsertFormula()
Dim mwRng As Range
Set mwRng = Range("C2:C250")
Dim d As Range
For Each d In mwRng
If d.Value = "" Then
d.Formula = "=IF(RC[-1]="""",""-"",INDEX(C[1],MATCH(RC[-1],C[-2],0)))"
End If
Next d
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C2:C250")) Is Nothing Then
Application.EnableEvents = False
Call InsertFormula
Application.EnableEvents = True
End If
End Sub