excel - VBA 在数组中查找所有正则表达式匹配项
问题描述
我有一个很大的列表,想要找到相同项目名称的所有条目。
我的数据如下所示:
一个标题 | 另一个标题 | 项目名称 |
---|---|---|
第一的 | 第 1 行 | AA_Bla_ABCDEF _ |
第二 | 废话 | XY_Blah_ ABCDEF |
第四 | 又是这个项目名称 | AA_Bla_ABCDEF _ |
第三 | 布鲁布 | 12_Blubb_ABCDEF |
因此,我有这段代码,它获取所有可能的过滤条件(项目名称):
lastRow = Range(CStr("C" & ActiveSheet.Rows.Count)).End(xlUp).Row
Dim data(), dict As Object, r As Long
Set dict = CreateObject("Scripting.Dictionary")
data = ActiveSheet.Range("C2", "C" & CStr(lastRow)).Columns(1).Value
For r = 1 To UBound(data)
dict(data(r, 1)) = Empty
Next
data = WorksheetFunction.Transpose(dict.keys())
End Sub
我可以访问项目名称列表,例如:
Debug.Print data(1, 1) ' AA_Bla_ABCDEF
Debug.Print data(2, 1) ' XY_Blah_ABCDEF
Debug.Print data(3, 1) ' 12_Blubb_ABCDEF
现在,我想搜索data
所有满足特定条件的条目。
- 我想排除所有不以字母开头的项目。
startPattern = "(^[A-Z]{2})"
- 我想在所有剩余的项目中找到最后 6 个符号(数字、字符、下划线......)相同的项目
projectPattern = "(.$){6}"
因此,我想到了 regEx 并尝试了:
Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp") ' Automatic reference binding
For r = 1 To UBound(data)
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = projectPattern
End With
' If data.find(regEx).count > 1 (if I have this pattern more than once)
' similarEntries = data.find(regEx) ...
如何在数组中搜索多次出现的所有匹配项?在示例列表中,它只会是:AA_Bla_ ABCDEF
解决方案
用于LIKE "[A-Z][A-Z]"
排除某些项目并RIGHT(string,6)
作为字典键来计算重复项。
Option Explicit
Sub Macro1()
Dim ws As Worksheet
Dim dict As Object, name As String, key, ar
Dim r As Long, lastrow As Long
Set ws = ActiveSheet
Set dict = CreateObject("Scripting.Dictionary")
lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
For r = 2 To lastrow
name = Trim(ws.Cells(r, "C"))
If UCase(Left(name, 2)) Like "[A-Z][A-Z]" Then
key = Right(name, 6)
If dict.exists(key) Then
dict(key) = dict(key) & vbTab & name
Else
dict(key) = name
End If
End If
Next
' show results on sheet2
r = 1
For Each key In dict
ar = Split(dict(key), vbTab)
If UBound(ar) > 0 Then
Sheet2.Cells(r, 1) = key
Sheet2.Cells(r, 2) = UBound(ar) + 1
Sheet2.Cells(r, 3).Resize(1, UBound(ar) + 1) = ar
r= r + 1
End If
Next
End Sub
推荐阅读
- django - 如何在 django azure web 应用服务中安装 dlib
- parcel - 到 css 和 js 的包裹路径未正确链接
- rocket.chat - 无法让 RocketChat 与 SSL 一起使用,我做错了什么?
- java - 带有 Google 示例代码的 ClassCastException:我的 my_text_view.xml 文件应该是什么样子?
- java - Spring通过外部工厂自动创建通用bean
- c# - 将元素更新/添加到 MVVM 集合列表后,UWP 列表视图不更新
- c++11 - 检测 NVCC 中是否启用了 c++11
- linux - 查询已终止但等待加入的应用程序线程的正确命令是什么?
- c# - 查找包含在任意旋转矩形中的网格单元的算法(光栅化)
- jhipster - “jhipster gae”部署后端,但不部署 Angular 端