我的第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中显示值。
答案 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