Excel - 匹配项目http字符串和显示结果

时间:2014-07-17 16:12:20

标签: excel excel-vba excel-formula vba

我的第H列包含第1页上的长GET请求,例如:

H
GET /profiles/text/23493495_3492/g93id93kd
GET /edit/result/393493/te3903k4d

我想在A列和B列中添加第二张包含以下类型列表的表:

A                  B
23493495           identifier1
3903k4             realid2
g93id              realid3

最终,我想要一个函数来搜索表1列H中的表2列A中的任何值。大多数时候没有分隔符所以我需要它来搜索GET字符串中的字符串。一旦表2列A中的值与表1列H中的值匹配,我希望该函数获取表2列B中的相应文本并将其打印在表1列I中。可能有多个匹配细胞,因此需要考虑。所以如果使用上面的例子:

在H1中,字符串中将存在23493495和g93id的匹配。我希望第1栏第I栏显示:

I
identifier1, realid3

我最初从下面的代码开始,我必须指定列表,但它不使用第二张表或打印匹配的相应文本。所以我宁愿在上面找到满足我需求的东西,但下面是我迄今为止尝试过的一个例子:

=ListSearchB(J2, "23493495 g93id")

通过这个模块,我发现我修改了一点:

    Function ListSearchB(text As String, wordlist As String, Optional caseSensitive As Boolean = False)
    Dim strMatches As String
    Dim res As Variant
    Dim arrWords() As String
    arrWords = Split(wordlist)
    On Error Resume Next
    Err.Clear
    For Each word In arrWords
        If caseSensitive = False Then
            res = InStr(LCase(text), LCase(word))
        Else
            res = InStr(text, word)
        End If
        If res > 0 Then
            strMatches = strMatches & word
        End If
    Next word
    If Len(strMatches) <> 0 Then
        strMatches = Right(strMatches, Len(strMatches))
    End If
    ListSearchB = strMatches
End Function

这让我:

第一栏中的

23493495g93id,我不知道如何用逗号分隔两者。

一般情况下,我更喜欢使用某种方式从工作表2中提取列表,并在最初指定的列I中显示值。

1 个答案:

答案 0 :(得分:1)

尝试一下 - 只需调整运行

之前注释的工作表名称
Sub your_sub()
    Dim sGet As Worksheet
    Dim sIDs As Worksheet
    Dim rget As Range
    Dim rIds As Range

    'ADJUST SHEET NAME
    With Worksheets("GET")
        Set rget = Range(.Range("H1"), .Range("h" & .Rows.count).End(xlUp))
    End With

    'ADJUST SHEET NAME
    With Worksheets("IDs")
        Set rIds = Range(.Range("A1"), .Range("A" & .Rows.count).End(xlUp))
    End With

    mys = vbNullString
    i = 1

    For Each cget In rget

        For Each cIds In rIds
            If InStr(cget.Value, cIds) <> 0 Then
                mys = mys & ", " & cIds.Offset(0, 1).Value
            End If
        Next cIds

        If mys <> vbNullString Then
            mys = Right(mys, Len(mys) - 2)
            'ADJUST SHEET NAME
            Worksheets("GET").Range("I" & i).Value = mys
        End If

        i = i + 1
        mys = vbNullString

    Next cget

End Sub