2

これを明確に説明する方法が本当にわかりません。添付画像をご覧ください

ここに画像の説明を入力

4つの異なる列を持つテーブルがあり、2つは互いに同一です(NAMEとQTY)。ただし、目標は、QTY の違いを比較することです。1. データを並べ替える 2. データ項目ごとに一致させる これは、小さなテーブルでは大したことではありませんが、1 万行あると、数日かかります。

助けてください、感謝します。

私のロジックは次のとおりです。1.最初の2列(NAMEとQTY)をソートしました2.2番目の2列(NAMEとQTY)の各値について、最初の2列と一致するかどうかを確認します。true の場合、値を挿入します。3. 値が一致しない場合、最初の 2 列にあるが 2 番目の 2 列にない行からのオフセットで新しい行に挿入します

4

2 に答える 2

2

これはあなたがしようとしていることですか?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long, newRow As Long
    Dim aCell As Range, SrchRange As Range

    Set ws = Sheets("Sheet1")

    With ws
        .Columns("A:B").Copy .Columns("G:G")
        .Columns("G:H").Sort Key1:=.Range("G2"), Order1:=xlAscending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
          DataOption1:=xlSortNormal

        lastRow = .Range("G" & Rows.Count).End(xlUp).Row
        newRow = lastRow

        Set SrchRange = .Range("G2:G" & lastRow)

        lastRow = .Range("C" & Rows.Count).End(xlUp).Row

        .Range("I1").Value = "NAME": .Range("J1").Value = "QTY"

        For i = 2 To lastRow
            If Len(Trim(.Range("C" & i).Value)) <> 0 Then
                Set aCell = SrchRange.Find(What:=.Range("C" & i).Value, LookIn:=xlFormulas, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)

                If Not aCell Is Nothing Then
                    .Range("I" & aCell.Row).Value = .Range("C" & i).Value
                    .Range("J" & aCell.Row).Value = .Range("D" & i).Value
                Else
                    newRow = newRow + 1
                    .Range("I" & newRow).Value = .Range("C" & i).Value
                    .Range("J" & newRow).Value = .Range("D" & i).Value
                End If
            End If
        Next
    End With
End Sub

スナップショット

ここに画像の説明を入力

于 2012-05-02T22:35:10.017 に答える