0

当面の問題は、2 セットのデータを比較する必要があることです。1 つは初期要件で、もう 1 つは完成したシートです。
ここでの問題は、2 つの IDS (すべてのデータが特定の ID の下にある) を比較する必要があり、同じ ID の下のコンポーネントの数も同じではないことです。最初のシートがスキップされた可能性があります。

例:
シート 1

ABC
商品ID 商品コード 商品名
1
           tc7868976 ボルト
           tc7687678 ナット
2
           tc65799 ネジ
           tc98908 ボルト

シート 2

ABC
商品ID 商品コード 商品名
1
           tc7868976 ボルト
2
           tc65799 ネジ
           tc98908 ボルト
           tc5657 ボルト(1)

ここで、シート 2 のアイテムがシート 1 にあるかどうかを確認する必要があります。行番号が一致していなくても、どうすればよいですか?
for ループを試しましたが、データ量が非常に多く、約 100 列であるため、非常に面倒です。
例を単純化しました - 誰か親切にロジックを手伝ってくれませんか?

4

1 に答える 1

0

アイテム ID 内の製品コードと一致する場合、列に True 値を配置する 1 つの例を次に示します。

Sub tt()
Dim IR, CS As Variant
Dim column_IR, column_CS As Integer
Dim id_corresp_IR(100000), id_corresp_CS(100000) As Integer

IR = 1 'initial requirements sheet name or number, IR = "Sheet1" is valid also
CS = 2 'Complete sheet name or number, CS = "Sheet2" is valid also

column_IR = 1 'column to match item IDs on the initial requirements Sheet
column_CS = 1 'column to match item IDs on the Complete Sheet
column_p_IR = 2 'column to match product code IDs on the initial requirements Sheet
column_p_CS = 2 'column to match product code IDs on the Complete Sheet
MT_IR = 9 'column to place a Match mark on the initial requirements sheet

NR_IR = Sheets(IR).Cells(Rows.Count, column_IR).End(xlUp).Row 'last row on column_IR to be matched
NR_CS = Sheets(CS).Cells(Rows.Count, column_CS).End(xlUp).Row 'last row on column_CS to be matched
NR_p_IR = Sheets(IR).Cells(Rows.Count, column_p_IR).End(xlUp).Row 'last row on column_p_IR to be matched
NR_p_CS = Sheets(CS).Cells(Rows.Count, column_p_CS).End(xlUp).Row 'last row on column_p_CS to be matched

k = 0

'Compare item id that match, allocates position on array id_corresp_IR and id_corresp_CS, for initial requirements and the complete sheet
For i = 2 To NR_IR
    For j = 2 To NR_CS
        If Sheets(IR).Cells(i, column_IR) = Sheets(CS).Cells(j, column_CS) And Not Sheets(IR).Cells(i, column_IR) = "" Then
            id_corresp_IR(k) = i
            id_corresp_CS(k) = j
            k = k + 1
        End If
    Next j
Next i

'find in which rows each subset of product IDs are located within item IDs that were matched
'and then run a match loop for product IDs
Sheets(IR).Cells(NR_p_IR + 1, column_IR) = "_" 'these will serve as delimitators since we are going to use .End(xlDown) below
Sheets(CS).Cells(NR_p_CS + 1, column_CS) = "_" 'these will serve as delimitators since we are going to use .End(xlDown) below
For Z = 0 To k - 1
    row_ir_bg = id_corresp_IR(Z)
    row_ir_end = Sheets(IR).Cells(id_corresp_IR(Z), column_IR).End(xlDown).Row - 1
    row_cs_bg = id_corresp_CS(Z)
    row_cs_end = Sheets(CS).Cells(id_corresp_CS(Z), column_CS).End(xlDown).Row - 1
    For a = row_ir_bg To row_ir_end
        For b = row_cs_bg To row_cs_end
            If Sheets(IR).Cells(a, column_p_IR) = Sheets(CS).Cells(b, column_p_CS) And Not Sheets(IR).Cells(a, column_p_IR) = "" Then
                Sheets(IR).Cells(a, MT_IR) = True
            End If
        Next b
    Next a
Next Z
Sheets(IR).Cells(NR_p_IR + 1, column_IR) = ""
Sheets(CS).Cells(NR_p_CS + 1, column_CS) = ""

End Sub
于 2013-07-02T13:59:31.107 に答える