- ベストアンサー
エクセルで別シートとの項目比較
- エクセルで別のシートの項目を比較する方法について知りたいです。
- エクセル2016とWindows7の環境で、異なるシートの項目を比較する方法を教えてください。
- VBAを使用して、異なるシートで商品コード、納品日、納品数、単価が同じ行をチェックする方法についてアドバイスをいただけませんか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問者は、「vba」といっているが、エクセル関数程度の経験で、VBAもプログラムも経験が少なく、一番大切な、処理ロジックというかアルゴリズムに関心がむいていないようだ。まだこの課題をやるには、早すぎるのでは。 私のお勧めは、両シート(のコピーを作り)を 商品コード+納品日+納品数+単価でソートして(この+に意味わかりますか?) 両シートのデータをMatchingのアルゴリズムで処理する方法だ。(MATCH関数のこととは全く別) (1)総なめ法 (2)Findメソッド法(処理が重い) (3)フィルター法(処理が重い) https://okwave.jp/qa/q6049199.html (4)Matching法 https://okwave.jp/qa/q731413.html http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_160_21.html やや具体的に書いた小生の回答ががあるはずだが、どこか探せなかった。 それに近いのは http://soudan1.biglobe.ne.jp/qa346901.html?order=DESC&by=datetime このロジックの説明が参考になると思う。
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>商品コード、納品日、納品数、単価が同一の行が存在するかのチェックでmatchを使おうかと >思ったのですが複数項目ある時にどのような構文にしたらよいかがわかりませんでした。 他の回答にあるように「複数項目を連結した値」を使うのですが、単純に連結すると罠にハマります。 例えば 商品コード:CD01 納品日:2017/3/11 納品数:1 単価:200 と言う行と 商品コード:CD01 納品日:2017/3/1 納品数:11 単価:200 と言う行で「項目を連結した値」を作ると、どちらの行も CD012017/3/111200 と言う値になり、不一致なのに「一致」として判断されます。 では「カンマで区切れば」と思うでしょうが「数字や商品コードにカンマが入って居る場合」に「データ上のカンマ」と「区切りとして入れたカンマ」が混同され、やはり、誤動作します。 ですので、こういう「項目を連結した値で比較」する場合は「データや数値の中に、絶対に出てこない文字列」を「区切りのマーク」にして、項目を連結した値を作る必要があります。 たとえば「データの中身に『@』が絶対に出てこない」と決まっているなら「区切りのマークを@にする」などの方法を取ります。 先ほどの例であれば「連結した値」は CD01@2017/3/1@11@200 CD01@2017/3/11@1@200 と言う値になるので「一致してない」と正しく判断されます。 こういう「連結した値を作って、まとめて一致するか判断する時」は「絶対に単純に連結してはダメ」です。
お礼
参考に致します。ありがとうございました。
- tsubu-yuki
- ベストアンサー率46% (179/386)
多分(私見100%)、最も簡単なのは 「各項目を文字列をして結合して比較する」方法だと思いますよ。 まぁ要するに両シートに 商品コード&商品名&納品日&納品数&単価&金額 という項目(作業列)を作ってやればOKです。 見た目に邪魔ですから、この列を作る作業もVBAで行えばOKですね。 で、比較する作業列ができたら、COUNTIF関数で当たって、 返りが0だったらシート1に追加する。 コレをシート2の最終行まで繰り返すように書いてやれば出来上がりです。 最終的に必要であれば、作った作業列を消す文も書くと良いかもしれませんね。 セルのアドレスなど。表のレイアウトが全く分かりませんので、 アドバイスも不完全かもしれませんが、参考までに。
お礼
参考に致します。どうもありがとうございました。
- 3620313
- ベストアンサー率33% (4/12)
私も似た様な場面に出くわしたことがあります。 sheet1、sheet2共に、 全データをconcatenateで結合し、単価列の右の列に作業エリアを設置。 あとは、match関数を使用して比較し、matchするものが無ければ、 sheet1の最終行の次の行へ追加 という処理でよいと思います。
お礼
試してみます。どうもありがとうございました。
お礼
挙げていただいたサイトを参考にしてみます。ありがとうございました。