Excel宏搜索和替换单元格
请帮助我使用宏清理excel中的数据 之前: 之后: 所以我需要建议函数宏来搜索MASTER中带有参数的数据。 然后,宏可以显示与此数据匹配的参数的结果 编辑说明:我只是想知道我可以在宏中使用什么函数来回答这个问题。不要为我的问题要求完整的宏。Excel宏搜索和替换单元格,excel,vba,Excel,Vba,请帮助我使用宏清理excel中的数据 之前: 之后: 所以我需要建议函数宏来搜索MASTER中带有参数的数据。 然后,宏可以显示与此数据匹配的参数的结果 编辑说明:我只是想知道我可以在宏中使用什么函数来回答这个问题。不要为我的问题要求完整的宏。 很抱歉通过转置主范围并用|连接值来构建正则表达式。针对数据中的每个单元格值测试正则表达式,如果成功,则执行正则表达式以捕获值 Sub clean() Dim ws As Worksheet Set ws = ThisWorkbo
很抱歉通过转置主范围并用|连接值来构建正则表达式。针对数据中的每个单元格值测试正则表达式,如果成功,则执行正则表达式以捕获值
Sub clean()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Dim rngMASTER as Range, rngDATA As Range
Dim start as Single, finish as Single
start = Timer
' set ranges
Dim numLastA as Long, numLastC As Long
numLastA = ws.Range("A" & Rows.count).End(xlUp).Row
Set rngDATA = ws.Range("A2:A" & numLastA)
numLastC = ws.Range("C" & Rows.count).End(xlUp).Row
Set rngMASTER = ws.Range("C2:C" & numLastC)
'Debug.Print numLastA, numLastC
' avoid blanks in pattern
If WorksheetFunction.CountBlank(rngMASTER) > 0 Then
MsgBox "MASTER range has blank cells", vbCritical
Exit Sub
End If
' build regex pattern
Dim sPattern As String
sPattern = Join(WorksheetFunction.Transpose(rngMASTER), "|")
'Debug.Print sPattern
Dim Regex as Object
Set Regex = CreateObject("vbscript.regexp")
With Regex
.Global = True
.MultiLine = False
.IgnoreCase = True
.Pattern = "(" & sPattern & ")"
End With
' search
Dim cell as Range, match as Object
Dim count As Long: count = 0
For Each cell In rngDATA
If Regex.test(cell) Then
Set match = Regex.Execute(cell)
cell.Resize(1, 3).Copy cell.Offset(0, 5)
cell.Offset(0, 6) = match(0).submatches(0)
count = count + 1
End If
Next
finish = Timer
MsgBox numLastA - 1 & " rows scanned" & vbCr & _
count & " matches in " & Int(finish - start) & " secs"
End Sub
编辑1;增加了对主控中匹配每一行的空白单元格的保护
编辑2;所有变量的声明类型在数据上循环,
拆分
数据或使用RegEx
确定主数组中哪个元素适合数据。如果您编写了一些代码,请编辑您当前的问题。注意:这也可以通过工作表函数来完成。@Dinda您需要使用Split
函数将A列的每个单元格值按空格拆分为单词。然后使用Application.WorksheetFunction.VLookup
查找主列中的每个单词,如果找到了,则将其写入B列。根据我的第一条注释,Split
(如@P所示ᴇʜ)或RegEx
是您可以使用的。将主参数转储到1D数组中(例如,arr1
),然后构建一个模式以在RegEx
中使用,例如:.pattern=“\b”(&Join(arr1,“|”)和“)\b”
。在数据上循环执行正则表达式。确保使用不区分大小写的开关/i
将MERCY
重新设置为MERCY
用于说明如何操作。使用VBA动态生成模式。请注意,如果您声明Dim rngMASTER,rngDATA为范围
您只声明rngDATA为范围
,但rngMASTER为变量
在VBA中,您需要为每个变量指定一种类型:Dim rngMASTER为范围,rngDATA作为范围
否则默认为变量。•与其他变量相同Dim numLastA,numLastC,只要长
检查所有变量。如果可能的话,最好不要使用Variant
,这样egDim Regex As Object
将是一个更好的解决方案。您的计时器变量start,finish
可以是Single
<代码>单元格作为范围,作为对象匹配
<代码>计数应为长
而不是整数