0

Access でのみ、以前は Excel で Marcos を使用したことがありません。私がやりたいのは、ワークシートをループして、列 X と Y が null でない場所で情報を新しいワークシートに抽出することです。しかし、行 Y には複数の値が含まれている可能性があり、Y の値ごとに X を使用して新しいレコードを作成したいと考えています。各値はコンマで区切られています。

ここに画像の説明を入力

私が望む結果は

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 プロパティは 1 つのインデックスしか取りません。セルをテストしようとしているので、RangeオブジェクトまたはCellオブジェクトのいずれかを使用する必要があります。

また、RegEx を使用したプログラミングを容易にするために、Microsoft VBScript 正規表現 5.5 ライブラリへの参照を追加します。

VB エディタの [ツール] > [参照設定] メニューにあります。

次に、宣言 Dim Regex as RegExpして使用できますSet Regex = New RegExp

これにより、正しくコーディングするのに役立つ Intellisense が提供されます。

Excel vba から正規表現を使用するチュートリアルについては、次を参照してください。

また、[ツール] > [オプションエディター] タブで、[変数の宣言が必要] や [自動リスト メンバー] などのすべてのボックスにチェックを入れます。

于 2013-07-11T13:31:24.277 に答える