0

我以前从未在 Excel 中使用过 Marcos,只在 Access 中使用过。我想要做的是遍历工作表,其中 X 和 Y 列不为空,将信息提取到新工作表中。但是 Y 行可能有多个值,我想用 X 为 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# 中使用过它,这是我想要实现的最佳选择吗?任何帮助将不胜感激?

4

1 回答 1

1

要修复 1004 错误,请更改

Rows(r, B).Value

Range(r, B).Value

Rows 属性只需要一个索引,您正在尝试测试一个单元格,因此必须使用RangeCell对象。

还为了使 RegEx 编程更容易,添加对Microsoft VBScript 正则表达式 5.5 库的引用:

在 VB 编辑器的工具>参考菜单上。

然后你可以声明 Dim Regex as RegExp和使用Set Regex = New RegExp

这将为您提供 Intellisense,帮助您正确编码。

有关在 Excel vba 中使用正则表达式的教程,请参阅

此外,在“工具”>“选项编辑器”选项卡中,选中“需要变量声明”和“自动列表成员”等所有框

于 2013-07-11T13:31:24.277 回答