VBA - 在文本单元格的预定义(但不断变化的)单词的下一列中返回所有结果
VBA - give back all results in next column of predefined (but changing) words from text-cell
我正在努力寻找解决方案,希望有人能提供帮助。
我有:
• 一个包含多个条目的文本列的图表,只是共享下一个条目用“;”分隔所有条目的格式为“xy 00/00”(例如“AB 03/18”等)(见下图 link)
我需要的:
• 我需要 excel 才能在下一列中找到我预定义的每行特定条目(在列上方,请参见下面的示例),但只有前两个和最后两个字符已定义,中间的字符可以是任何字符(例如“AB ??/18”)。
- 一个单元格可以有多个定义为“AB ??/18”的条目(例如“AB 03/18”和“AB 08/18”等)我需要知道,如果有超过 1 个此预定义条目。
- 如果我将搜索框更改为“ZZ ??/12”,它应该会覆盖之前定义的搜索并只返回 ZZ... 那些。
所以例如这样:
Screenshot Chart
我试过使用常规公式,但它只给出了第一个 AB……,当然不是其余部分。
如果只能返回上面单元格中搜索到的文本的数量,那也可以。
抱歉,如果这太难了,请告诉我,这样我就可以搁置这个项目并接受我必须在余下的日子里手动完成它的事实,哈哈。
您的屏幕截图似乎与您的 objective 不完全一致,即
模式 AB ##/18 可以在字符串中找到 3 次
blabla WF 12/23; AB 08/18; AB 09/18; AB 08/18
但是您的计数列仅记录了 1 个结果(对于 AB 08/18)- 第一行中也有一个匹配项(对于 AB 12/18),但是您的计数为 0...
下面的代码假定您的屏幕截图中的 4 个数据单元格在 A3:A6 范围内,并且 它们 不是 table
Sub txtMatching()
Dim results As String, cell As Range, incidence As Integer, pattern As String, pos As Integer, temp As String
pattern = "AB ##/18"
For Each cell In Range("A3:A6")
pos = 1
If cell.Value Like "*" & pattern & "*" Then
Do
pos = InStr(pos, cell.Value2, Mid(pattern, 1, InStr(1, pattern, "#") - 1))
If pos = 0 Then Exit Do
temp = Mid(cell.Value2, pos, Len(pattern))
If temp Like pattern Then
results = results & temp & "; "
incidence = incidence + 1
End If
pos = pos + Len(pattern)
Loop While pos < Len(cell.Value2)
cell.Offset(0, 1).Resize(1, 2).Value2 = Array(Mid(results, 1, Len(results) - 2), incidence)
results = vbNullString
incidence = 0
Else
cell.Offset(0, 2).Value2 = 0
End If
Next cell
End Sub
我正在努力寻找解决方案,希望有人能提供帮助。
我有:
• 一个包含多个条目的文本列的图表,只是共享下一个条目用“;”分隔所有条目的格式为“xy 00/00”(例如“AB 03/18”等)(见下图 link)
我需要的:
• 我需要 excel 才能在下一列中找到我预定义的每行特定条目(在列上方,请参见下面的示例),但只有前两个和最后两个字符已定义,中间的字符可以是任何字符(例如“AB ??/18”)。
- 一个单元格可以有多个定义为“AB ??/18”的条目(例如“AB 03/18”和“AB 08/18”等)我需要知道,如果有超过 1 个此预定义条目。
- 如果我将搜索框更改为“ZZ ??/12”,它应该会覆盖之前定义的搜索并只返回 ZZ... 那些。
所以例如这样:
Screenshot Chart
我试过使用常规公式,但它只给出了第一个 AB……,当然不是其余部分。 如果只能返回上面单元格中搜索到的文本的数量,那也可以。
抱歉,如果这太难了,请告诉我,这样我就可以搁置这个项目并接受我必须在余下的日子里手动完成它的事实,哈哈。
您的屏幕截图似乎与您的 objective 不完全一致,即 模式 AB ##/18 可以在字符串中找到 3 次 blabla WF 12/23; AB 08/18; AB 09/18; AB 08/18 但是您的计数列仅记录了 1 个结果(对于 AB 08/18)- 第一行中也有一个匹配项(对于 AB 12/18),但是您的计数为 0...
下面的代码假定您的屏幕截图中的 4 个数据单元格在 A3:A6 范围内,并且 它们 不是 table
Sub txtMatching()
Dim results As String, cell As Range, incidence As Integer, pattern As String, pos As Integer, temp As String
pattern = "AB ##/18"
For Each cell In Range("A3:A6")
pos = 1
If cell.Value Like "*" & pattern & "*" Then
Do
pos = InStr(pos, cell.Value2, Mid(pattern, 1, InStr(1, pattern, "#") - 1))
If pos = 0 Then Exit Do
temp = Mid(cell.Value2, pos, Len(pattern))
If temp Like pattern Then
results = results & temp & "; "
incidence = incidence + 1
End If
pos = pos + Len(pattern)
Loop While pos < Len(cell.Value2)
cell.Offset(0, 1).Resize(1, 2).Value2 = Array(Mid(results, 1, Len(results) - 2), incidence)
results = vbNullString
incidence = 0
Else
cell.Offset(0, 2).Value2 = 0
End If
Next cell
End Sub