• 締切済み

Excel2000で2つの列を見比べるマクロ

例えば、先月に売れたものの一覧表のシートと、取扱商品の一覧表シートがあるとします。 どちらも商品コードが先頭にあるので、 その売れたものの商品コードと一覧表の商品コードとをコピーしてきて 別のシートに貼り付けます。 売れたものの商品コードがA列、取扱商品の商品コードがB列。 当然、B列には、A列に無い商品コードがあります。 二つの列を見比べて、A列に足りないものがあれば A列の末尾にコピーをするというようなことはできないでしょうか? 末尾にコピーが無理ならば、A列に無いものだけをC列にコピーするようなことはできないでしょうか? 宜しくお願いいたします。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

dictionaryというのを使ってみました。 A列の内容をdictionaryに入れ(この段階で重複カット) B列の内容をdictionaryと照合して、含まれないものがあればA列の 既存データの下に追加します。 詳しくはVBA dictionaryで検索してみてください。 Sub dic_test() Dim myDic As Object, myKey As Variant Dim originalTable As Range, refTable As Range Dim i As Long, j As Long Set myDic = CreateObject("Scripting.Dictionary") Set refTable = Range("A1", Range("A" & Rows.Count).End(xlUp)) With refTable For i = 1 To .Rows.Count If Not myDic.exists(.Cells(i, 1).Value) Then myDic.Add .Cells(i, 1).Value, "" End If Next i End With Set originalTable = Range("B1", Range("B" & Rows.Count).End(xlUp)) j = 1 With originalTable For i = 1 To .Rows.Count If Not myDic.exists(.Cells(i, 1).Value) Then Cells(refTable.Rows.Count + j, 1).Value = .Cells(i, 1).Value j = j + 1 End If Next i End With Set myDic = Nothing End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

いわゆるマッチングのロジックなんです。 前提はそれぞれの列でユニークであることです。 取扱商品の商品コードはユニークでしょうが、売れたものはどうかな。 やり方は (1)総なめ法 一方を中心に他方を最後まで比較で舐め回し同一のコードがあればそれなりの処理をする。 (2)商品コードで両方ソートし、商品コードをマッチングキーとして、比較し、マッチングのロジックで処理します。 オフラインバッチ処理の定番です。ロジックは1対1、1対多。多対1のパターンのがある。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t33.htm これはDBと絡んだ例なので複雑化しているが。 しかし今日昨日マクロを始めた方には難しいと思います。 1対1なら通常はVLOOKUPなどで処理するでしょう。

関連するQ&A

専門家に質問してみよう