我需要帮助编写一个excel vba Splat函数

时间:2013-06-14 17:34:15

标签: excel excel-vba excel-2007 vba

我正在使用Excel 2007,需要一些关于如何编写Splat用户定义函数函数的帮助/指导。 Splat函数使您能够将数据输入到包含vlookup函数的单元格中,然后使用您输入的值更新查找表,但vlookup公式仍保留在单元格中。我在下面提供了一个例子:

第1步。您有一个查找表和一组使用vlookup函数显示表数据的单元格。

enter image description here

第2步。在单元格d3中,用户输入: / 500 。 /触发Splat函数,该函数使用Jane(500)的新值更新查找表,并替换单元格d3中的查找公式。

enter image description here

第3步。在Splat函数触发后,Jane在表中有一个500值,单元格d3(通过查找函数)显示更新的值。

enter image description here

理想情况下,Splat函数中会内置一些数据验证,该函数只会使用/ slash触发器触发,否则会通过数据验证弹出窗口。

对于如何处理此问题,示例代码,文章等的任何想法将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:2)

使用Worksheet_Change事件尝试这样的事情:

Sub Worksheet_Change(ByVal Target As Range)
    'Assume the workbook has a named range 'lookuptable' at G3:H6
    'Assume the workbook has a named range 'lookupColumn' at D3:D6

    If Target.Cells.Count <> 1 Then Exit Sub
    If Intersect(Target, Range("lookupColumn")) Is Nothing Then Exit Sub
    If Not Left(Target, 1) = "/" Then Exit Sub

    UpdateLookupTable Target

End Sub

Sub UpdateLookupTable(cl As Range)
    Dim r As Long
    Dim c As Long
    Dim splatVal As String

    splatVal = Replace(cl.Value, "/", 0, , 1)
    r = Application.Match(cl.Offset(0, -1), Range("lookuptable").Columns(1), False)
    Range("lookuptable").Cells(r, 2).Value = splatVal
    cl.Value = splatVal

End Sub

我不确定您是否打算保留D列中的VLOOKUP公式。此示例没有,但如果您想要保留这些功能,则可以修改它。