0

3つのExcelスプレッドシートのデータを非常に特殊な方法で照合する必要がありますが、使用する必要のある関数やコマンドを見つけることができず、何らかの理由で今日はGoogleでさえ助けてくれません。

Sheet1の各行について、「Sheet2のすべての行を検索するWHERESheet1ColumnAはLIKESheet2 ColumnAであり、Sheet1ColumnBはLIKESheet2ColumnBです」。ワイルドカード文字を使用したLIKEの代わりにEQUALSを使用できると思います。

次に、最初のクエリで見つかった結果ごとに、Sheet1の現在の行の下に新しい行を挿入し、Sheet2ColumnCから新しく挿入された行ColumnCにデータをコピーします。ループを繰り返す前にその数の行をスキップするように指示できるように、最初のクエリによって返された行の量もカウントする必要があると思いますが、それらの新しい行でループを実行する場合でも、とにかく結果が見つかりません。

明らかに、誰かが私のためにコードを書きたいと思っているので、私は大喜びするでしょう!:)しかし、誰かが私に必要な各ビットに使用するのに最適な関数を教えてくれたとしても、私はそれでも最も感謝し、それらを調べて自分で何かをまとめるだけです。

前もって感謝します、

ジョー

編集

以下に例を追加しました。最初にシート1、次にシート2、次にマクロの実行後のシート1の望ましい結果です。また、上記で「LIKE」の一致を検索すると述べましたが、CELLが含まれる場所を検索したいと言った方が正確です。

シート1マクロ前

情報を含むシート2

シート1マクロ後

4

1 に答える 1

1

さて、以下は私の解決策です。ちなみに、セルがすでにソートされていることを保証できれば、コードを最適化して比較時間を短縮できます。

//Code is not tested
Sub Collate()

    Dim row1 As Long
    Dim row2 As Long
    Dim match As Boolean

    Dim lastRow1 As Long
    Dim lastRow2 As Long

    Dim valA1 As String
    Dim valB1 As String
    Dim valA2 As String
    Dim valB2 As String
    Dim valC2 As String

    lastRow1 = Sheet1.Cells.SpecialCells(xlCellTypeLastCell).Row
    lastRow2 = Sheet2.Cells.SpecialCells(xlCellTypeLastCell).Row

    row1 = 2
    While row1 <= lastRow1
        valA1 = "*" & Sheet1.Cells.Range("A" & row1).Value & "*"
        valB1 = "*" & Sheet1.Cells.Range("B" & row1).Value & "*"
        For row2 = 2 To lastRow2
            valA2 = Sheet2.Cells.Range("A" & row2).Value
            valB2 = Sheet2.Cells.Range("B" & row2).Value
            valC2 = Sheet2.Cells.Range("C" & row2).Value
            If valA2 Like valA1 And valB2 Like valB1 Then
                match = True
                row1 = row1 + 1
                lastRow1 = lastRow1 + 1
                Sheet1.Cells.Range("A" & row1).EntireRow.Insert
                Sheet1.Cells.Range("C" & row1).Value = valC2
            End If
        Next row2

        row1 = row1 + 1
    Wend

End Sub
于 2012-11-24T02:48:58.753 に答える