我之前从未在Excel中使用过Marcos。我想要做的是遍历工作表,并且列X和Y不为空,将信息提取到新工作表中。但是行Y可能有多个值,我想为Y中的每个值创建一个新记录,每个值用逗号分隔。
我想要的结果是
一个C3
一个C4
b C6
b C7
b C10
等等
到目前为止,这是我的代码:
Sub Extract()
'
' Extract Macro
'
Dim WkSht As Worksheet, myOtherSheet As Worksheet, myBook As Workbook
Dim r As Integer
Dim Regex
Dim Match
Dim text
Set myBook = Excel.ActiveWorkbook
Set myOtherSheet = myBook.Sheets("New")
Set Regex = CreateObject("VBScript.RegExp")
Regex.Patten = """[^""]*""|[^,]*"
Regex.Global = True
j = 0
For Each WkSht In ThisWorkbook.Worksheets
If WkSht.Name = "Sheet1" Then
For r = 1 To 1000
If WkSht.Rows(r, B).Value <> "" & WkSht.Rows(r, G).Value <> "" Then
text = WkSht.Rows(r, G).Value
For Each Match In Regex.Execute(text)
myOtherSheet.Cells(j, 1).Value = WkSht.Cells(r, B)
myOtherSheet.Cells(j, 2).Value = Match
j = j + 1
Next Match
Exit For
End If
r = r + 1
Next r
Exit For
End If
Next WkSht
End Sub
我无法让它运行,我认为我的语法对于正则表达式是错误的,iv只在c#中使用它,这是我想要实现的最佳选择,任何帮助都会非常感激吗?< / p>
答案 0 :(得分:1)
修复1004错误,更改
Rows(r, B).Value
到
Range(r, B).Value
Rows属性只接受一个索引,您尝试测试一个单元格,因此muct使用 Range 或 Cell 对象。
还可以更轻松地使用RegEx进行编程,添加对 Microsoft VBScript正则表达式5.5库的引用:
在VB编辑器的Tools&gt; References菜单中。
然后你可以申报
Dim Regex as RegExp
并使用Set Regex = New RegExp
这将为您提供Intellisense,它将帮助您进行核心编码。
有关使用Excel vba中的正则表达式的教程,请参阅
此外,在工具&gt;选项编辑标签中,选中需要变量声明和自动列表成员
等所有框