お世話になっております。
下記の様な表がシート1とシート2に有、
シート2がシート1と比較して、行が多かったり、または
数量だけが変わっていたり、行が減っていたり、
表の行数は100から200行くらいあるので、VBAでどこが
違うかをすぐ分かる様に確認したいと思っています。
下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。
どの様に記述していいか分からなく、ご教示下さいます様宜しくお願い致します。
記
A列 B列 C列 D列 E列
No 品番 品名 地区 数量
236 A6TET みかん 市川 3本
248 A7TGR りんご 松戸 5本
273 B9GKT ぶどう 柏 14本
273 A8UFE すいか 行徳 6本
381 C2ROF いちご 平井 22本
No.3ベストアンサー
- 回答日時:
どういう条件の行があって、何をもってその行が「同じ/違う」とするか?という仕様によると思いますが、
仮に、ABCD列が全て同じものを「同一」とし、同シートに前述定義の「同一」が無いと仮定すれば、
Set s1 = Sheets("Sheet1").Range("A1").CurrentRegion
Set s2 = Sheets("Sheet2").Range("A1").CurrentRegion
n = 10
For i = 2 To s1.Rows.Count
s1.Cells(i, 6) = ""
Next
For j = 2 To s2.Rows.Count
s2.Cells(j, 6) = ""
Next
For i = 2 To s1.Rows.Count
judge = 0
For j = 2 To s2.Rows.Count
If s1.Cells(i, 1) = s2.Cells(j, 1) And _
s1.Cells(i, 2) = s2.Cells(j, 2) And _
s1.Cells(i, 3) = s2.Cells(j, 3) And _
s1.Cells(i, 4) = s2.Cells(j, 4) Then
judge = 1
If s1.Cells(i, 5) = s2.Cells(j, 5) Then
s2.Cells(j, 6) = "Sheet1と同じ" '同一
Else
s2.Cells(j, 6) = "Sheet1と本数以外同じ" '本数変更
End If
End If
Next
If judge = 0 Then
s1.Cells(i, 6) = "Sheet1にしかない" '削除
End If
Next
For j = 2 To s2.Rows.Count
If s2.Cells(j, 6) = "" Then
s2.Cells(j, 6) = "Sheet2にしかない" '追加
End If
Next
順次比較でスマートではありませんが
分かりにくい質問でしたのに、ありがとうございます。
やはり主キーをABCD列まとめる事になると何となく思っていましたが、そのVBAの記述が分かりませんでした。
ありがとうございました。
No.4
- 回答日時:
2つの表を通して、同一と判断できる項目は何ですか。
2つが同一と判断できて、その後その属性項目について、比較してこそ意味があるのです。人事ファイルでは職員コードです。主キーに当たるものです。上記例は実際世界ー>模擬例に移し変えてあるようですが、品番がそれに当たるのかな。品名は品番が決まれば1意に決まる(従属している)ものでしょう。そういう点から、A列とB列の関係が良くわからない。
こういうことを意識しないうちは、質問のような課題を自力でやるのは無理です。VBAは経験あるのでしょうか。質問課題は中級の上ぐらいのスキルがいると思います。本件課題の丸投げで、コードをマルマル書いてくださいという状態です。このコーナーの規約上望ましくないタイプです。
人間がエクセルを使って手作業でやる場合は、どういう作業をすればよいのか、事細かに考えて、まず文章で、文章化するとVBAの場合も参考になります。
ーー
ロジックとしては1方のシートの主キーを元に、他シートの同一キーを捜し(総なめ法)、一致したものが見つかれば、比較作業に入る
方法があります。
ーー
その場合データを主キーでソーとしてあれば、見つかった後の塊以外は該当が無いので、ロジックが組みやすいです。
ーー
私なら両シートを主キーでソートして、ファイル・マッチングのロジックで主キーの同じレコード(行)を見つけ、対比して、差異を見つけます。
その場合1対1または1対多が望ましいが、多対多だとどれを基準に
正しいとしてよいか分からなくなります。
シート1で主キーについて誤りダブりが無いように、第1ステップの作業が必要かもしれません。
ーーー
誤り事由の、ありそうなパターンを、文章で書き上げてみるのも非常に大切だと思います。
(主キー、ファイル・マッチングはWEB照会のこと)
http://e-words.jp/w/E4B8BBE382ADE383BC.html
マッチングの法は語句(文字列)マッチングの記事が多いので注意。
本件はファイルのマッチンヅの方です。
http://dospara.okwave.jp/qa3419667.html?ans_coun …
のNo.2
No.2
- 回答日時:
ANo.1です。
例えば、
>実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。
この場合だと”地区”が変われば抽出と言う事ですか?
比較するには変化のない部分と変化する部分があって出来ると思います。
この表の場合品番と品名が必ず組み合わさっているとか、品番と地区が
組になっているとか、そう言う情報が読み取れません。
ですので、憶測でのコード化も難しいと思ってはいます。
(出来る方はいらっしゃるかも知れませんが。)
或いはテキストファイルにして、差分抽出を行なうのがいいのかは
実際のファイルがないので不明ですが。
検索:テキストファイル 差分抽出
http://www.google.co.jp/search?sourceid=navclien …
有効かどうかは検証できないので無理であればスル~して下さい。
No.1
- 回答日時:
>下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。
どのような表とどのような表を比較した際に、どのような結果を求めているのか、
補足が必要な感じがします。
例を元にコード化したあとでご自身で変更が可能であれば別ですが、
何をコード化すべきか回答する側も憶測でしか出来ないように思います。
比較する際に基準にするものが、A列だけとか複数列とかも合わせて
提示してみたら回答がつくかも知れません。
この回答への補足
早期なご回答ありがとうございます。
すみません。わかりずらいと思います。
そのものの表を提示する訳にはいかず、説明も分かりずらいかも知れません。
表は、ある情報を元に、毎日更新され、それを日ごとにシートを分けて管理してます。
比較する表の形式や内容は、ほとんど同じ物の表で、それが前日の表より、どこか1行増えていたりするのを何百行ある内から探すのが大変なので、VBAでどこが変化したか確認したく検討しています。その変化の内容は行が増えるだけなら単純なのですが、行は増えずに、数量だけが変わっていたりします。(例えば、上記表の中のNO248の5本だったのが、次の日みたら、7本に変わっていたりとかです。)
あくまでも表が例ですので、当然自身でコード変更は必要になると思っております。
もしこれで宜しければご回答頂きたいと思います。
尚、補足は随時行いたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
- Excel(エクセル) 【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。 3 2023/03/23 17:30
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで大量のファイルをシート名...
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
Excel VBA 複数行を数の分だけ...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
VBA 存在しないシートを選...
-
VBA 入力月で該当シートを選択...
-
実行時エラー1004「Select メソ...
-
同じ作業を複数のシートに実行...
-
VBA 検索して一致したセル...
-
エクセルVBA ListBoxの並び...
-
IFステートの中にWithステート...
-
エクセルVBAでダブルクリックを...
-
EXCEL(VBA)でシート保護がかか...
-
別のシートを参照して計算する方法
-
セルのコピーで「オブジェクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報