如何根据字符串是否在另一个列表中自动填充单元格?

时间:2019-08-15 00:54:15

标签: excel vba vlookup

我正在尝试创建一个工作表,我可以在其中键入一个文本值,并自动填充与另一个字符串列表中最接近的匹配项。

我尝试在VBA中使用VLOOKUP函数,并将第4个参数设置为TRUE,以查找部分匹配项。我也尝试过仅在excel中而不是VBA中使用VLOOKUP函数。结果是我想要的一半,比方说,我在单元格中输入“ cookie”,该函数返回“ Cleaning Supplies”,因为它们都以C开头。理想情况下,我希望它返回Chocolate Cookie或类似的东西那个。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    Set KeyCells = Range("A:A")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

           Target.Value = Application.WorksheetFunction.VLookup(Target.Value, Worksheets("StorageLocations").Range("A:A"), 1, True)

End If
End Sub

example data

代码部分起作用,并返回运行时错误Method 'Range' of object_ '_Worksheet' failed。它还只会返回前面的清洁用品评论。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

尝试:

  • 在工作表事件中粘贴

Private Sub Worksheet_Change(ByVal Target As Range)

Call fnd(Target)


End Sub

  • 在新模块中粘贴

Sub fnd(rng As Range)

Application.EnableEvents = False

If rng.Column = 1 Then

    If Not Worksheets("StorageLocations").Range("A:A").Find(rng) Is Nothing Then

        rng.Value = Worksheets("StorageLocations").Range("A:A").Find(rng.Text).Value

    End If

End If

Application.EnableEvents = True

End Sub

说明:

  • 我们需要使用此Enable Events来更改工作表中的值,否则在更改单元格值时它将不断触发更改事件。
  • 它将始终为您提供列中的第一个可用匹配项

演示:

enter image description here