微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过Excel VBA将{Xlookup}添加到范围

如何解决通过Excel VBA将{Xlookup}添加到范围

我尝试通过VBA问题为我的XLookup寻找解决方案,但找不到。我的数据集如下:

Data Set

在数据集中,如果 C2:C6 范围内的任何单元格为空,则我想在这些单元格中使用此公式=IF(ISBLANK(B2),"",XLOOKUP(B2,A:A,IF(ISBLANK(D:D),D:D))) B2 的行号是可变的,具体取决于行,我们通过VBA放置此公式。

如果 C2:C6 范围内的任何单元格都具有值,我想使用该值而没有任何公式。如果有人删除了该值,并且该单元格变为空白,则VBA会将上述公式添加到该单元格中。

当前在上面的屏幕截图中, C2:C6 范围内的所有单元格都具有上述公式。

我希望我有道理。如果这不可行,那没关系。我总是可以使用帮助器列。但是我认为VBA对于我的仪表板而言将是一种更清洁的方式。

非常感谢。

解决方法

在工作表的类模块中,输入以下代码

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

每次工作表上的内容发生变化时,此命令都会运行。这不会减慢速度,因此您不想在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],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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。