如何根据我在Excel中搜索的内容进行关键字匹配?

时间:2017-10-25 14:12:48

标签: excel-vba excel-formula fuzzy-search vba excel

以下是我要分析的数据:

enter image description here

如图所示,我试图将列H与第一列匹配第一列中匹配的列H 中的任何关键字匹配都会返回“1”,如果没有匹配关键字,则会返回 “0”即可。

我尝试使用模糊查找,但我感到沮丧的是它不断给我百分比而不是单个1和0.(真或假)。

无论如何,无论是使用宏还是等式,还是有人可以帮我使用模糊查找,如果这也是一个很好的解决方案。

任何可以指导我正确方向的帮助都会有很大帮助。 谢谢!

编辑:(10/27/17)

更新:

我在这里使用过这个用户答案:https://superuser.com/a/984389/464791

这非常有用。但它仍然缺乏我认为每个excel用户/ dev需要的东西,这是我在上面描述的方式的字符串比较。我仍然在寻找一个解决方案,主要是因为我可以学习,未来的其他人可以有一个。截至目前,我不再需要此解决方案了。但我仍然希望继续努力。

2 个答案:

答案 0 :(得分:1)

Fuzzy Lookup旨在返回百分位数来引用它的匹配程度。请refer here

您可以做的一个选项是我们=IF()并让它显示1或0,具体取决于匹配的接近程度。

即。 =IF( D1 >= .50 , 1 , 0)=IF( D1 <= .50 , 0 , 1)

答案 1 :(得分:1)

尝试在模块中使用此代码...使用变量更改工作表名称,扫描位置,起始行等。

我试着根据你的需要设置大部分内容。

它只是将每个字符串拆分到它们的空间,也许可以帮助你。

Option Explicit
Dim ws As Worksheet
Dim col1 As Integer
Dim col2 As Integer
Dim colFlag As Integer
Dim rowStart As Integer
Dim urWs1 As Long
Dim scanArr As Variant
Dim actScan As Variant
Dim i As Long

Sub test()
    'Worksheet
    Set ws = ThisWorkbook.Worksheets("Tabelle1")
    'Column D = 4
    colFlag = 4
    'Column H=8
    col1 = 8
    'Column I=9
    col2 = 9
    'Start scanning
    rowStart = 2
    'Count Rows
    urWs1 = ws.UsedRange.Rows.Count

    For i = rowStart To urWs1
        ws.Cells(i, colFlag).Value = 0
        'Split at spaces
        scanArr = Split(ws.Cells(i, col1).Value, " ")
        For Each actScan In scanArr
            If InStr(1, UCase(ws.Cells(i, col2).Value), UCase(actScan)) <> 0 Then
                ws.Cells(i, colFlag).Value = 1
            End If
        Next actScan
        'Opposite direction
        scanArr = Split(ws.Cells(i, col2).Value, " ")
        For Each actScan In scanArr
            If InStr(1, UCase(ws.Cells(i, col1).Value), UCase(actScan)) <> 0 Then
                ws.Cells(i, colFlag).Value = 1
            End If
        Next actScan
        scanArr = ""
    Next i


End Sub

/ edit:大写比较