[[20220627215943]] 『2つのエクセルファイルの比較し差分を抽出』(さべーる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2つのエクセルファイルの比較し差分を抽出』(さべーる)

はじめまして。

vba初心者です。

2つのエクセルファイルを比較し、差分を別ファイルへ抽出するvbaをご教授ねがいます。
やりたい手順を例を挙げて説明します
・マクロを実行するエクセルファイルをaとします。
・マクロを実行します
・ダイアログでbとxlsm形式のファイルを選ぶ
・ダイアログでcとxlsm形式のファイルを選ぶ
・差分をaというファイルのシート1に抽出する

b,cのファイルは同じフォーマットで比較するシートは各一番左のシートです。

ネットなどを見たのですがなかなか見つからずここにたどりつきました。

どうかご教授願います。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>ネットなどを見たのですがなかなか見つからず
そのものずばり(何も加工せずつかえるもの)はそうそう見つからないと思いますよ。

せっかく"質問"しようと思ったらなら、現状どこまで出来ているか、何処で詰まっているかを提示してみてはいかがでしょうか?

(もこな2) 2022/06/27(月) 23:09


現状は何もできていません。
すみません。
(さべーる) 2022/06/28(火) 00:05


■1
>現状は何もできていません。
「VBA ダイアログ」というキーワードでネット検索してみたら↓のようなサイトが見つかりましたよ。
 【参考】
https://www.moug.net/tech/exvba/0060013.html
http://officetanaka.net/excel/vba/tips/tips154.htm

読んでトライしてみては?

■2
>2つのエクセルファイルを比較し、
こちらはエスパーではないので、あなたの画面は見えません。
行・列を踏まえたレイアウトを示して、どのようなデータをどのように比較し、どのような結果が抽出されればいいのか説明してください。

■余談
>すみません。
別に謝る必要はないとおもいますよ。
ただ、"質問"ではなく、作業依頼をしたいだけならば、その旨書いたほうがお互いすっきりするかもです。

 その場合私は興味ないのでROMに戻ります。

(もこな2) 2022/06/28(火) 03:36


ここに質問すると無償で作ってくれると評判なので。
(さるべーじゅ) 2022/06/28(火) 05:47

 既にコメントがあったとおりですが、追加で。

 (1)比較は何のために行いますか?

 どのような経緯でそのテーマに取り組まざるをえなくなったのか、
 またデータはどういうものなのか、をもう少し具体的に説明して下さい。
 どうした場面で、何に困っているかを説明されたほうがいいですよ。

 (2)比較と言ってもとても幅が広く、それぞれに適した方法があるかと思います。
 ・どこか狭い箇所の不一致を探したい、ということなんですか?
   (例えば、特定のキーに対応する値が、二つで同じかどうか比較するとか)
 ・それは値の不一致ですか、
   それとも、数式が間違って入力されていないかチェックしたいとか、
   さらには、色とか書式などにも注目がありますか?
 ・それとも、二つのシートにある文章の比較をしたい、といったことですか?
   追加された部分、削除された部分を明らかにしたい、とか。

 こうした説明があれば、回答者も無駄な検討をしなくても済みますし、
 あなたも早く結果が得られる可能性が高まります。

 値だけなら、Excelをなんらかのテキストファイルに変換してしまえば、
 テキストの比較なら、比較的道具も揃っていると思います。
 特定のケースであればVBAでもできるかもしれませんが、一般的な比較ということになると、
 VBAでやるよりも、フリーの差分をとるツールなどを活用するほうが良いと思います。

 いずれにしても、もう少し具体的に説明してください。

(γ) 2022/06/28(火) 06:08


レイアウト図は以下のようになります
	項目1	項目2	項目3	項目4	…項目32
1	1111	A	B	C	D
2	↓	↓	↓	↓	↓
3	↓	↓	↓	↓	↓
4	↓	↓	↓	↓	↓
5	↓	↓	↓	↓	↓
6	↓	↓	↓	↓	↓
7	↓	↓	↓	↓	↓
8	↓	↓	↓	↓	↓
9	↓	↓	↓	↓	↓
10	↓	↓	↓	↓	↓
11	↓	↓	↓	↓	↓
12	↓	↓	↓	↓	↓
13	↓	↓	↓	↓	↓
100000	115	E	F	G	H

以上なような同じレイアウト図の物が2つあります。ファイル名は日付が最後に加えてあります。
経緯はファイルは定期的に更新されるのですがどこが変わったかのかを探すのが困難なためです。
データは文字列です。数式は入っていません。
そのなかで2つのファイルの同じセル位置を見て行って違うところのセルや追加や削除の箇所をを別ブック(a)に抽出したい。
以上がやりたいことになります。

(さべーる) 2022/06/28(火) 07:22


 なにかのものを一行ごとにデータにしてあって、
 それらの属性を列ごとに表にしているということなんですか?

 そのものを識別するIDのようなものが、A列にあるとか、そういう特徴はないんですか?
 A列を見れば、どの行に挿入、削除があったかは分かるとか、そういうことは無いんですか?
 そうすれば、あとは挿入削除以外の行について、1対1で比較していけますよね。

 ご自分の問題なので、もっと気合を入れて説明したらどうですか?

 行挿入(削除)とか列挿入(削除)とかがあるようなので、
 データ1とデータ2という形で実例を示してください。

      A列    B列
 1
 2

 といったように列番号、行番号が分かる形式で示してください。
 行、列の数は、実際と同じである必要はありません。1,2行じゃ困るが。
 そして、その例では、結果として、どこにどういう表示をさせたいかを具体的に示してください。
(γ) 2022/06/28(火) 07:56

フィルターの詳細設定でできませんか。
あるいはPower Queryで。

(マナ) 2022/06/28(火) 10:39


 ああ、私が取り越し苦労をしていたようですね。
 修正に行挿入(削除)、列挿入(削除)は無く、
 二つの比較シートは、形が全く同じ、
 という前提を置いていいのであれば、話は簡単ですね。
 セルごとに比較すればよいだけです。

 ワークシートws1とws2を比較して、不一致の場合、ワークシートws3に結果を書きこむ、
 ということですから、
 イメージとして、こんな感じのコードを骨格にすればよいと思います。

 p = 1
 For j = 1 To lastRow
     For k = 1 To lastCol
         If ws1.Cells(j, k) <> ws2.Cells(j, k) Then
             ws3.Cells(p, 1) = j
             ws3.Cells(p, 2) = k
             ws3.Cells(p, 3) = ws1.Cells(j, k)
             ws3.Cells(p, 4) = ws2.Cells(j, k)
             p = p + 1
         End If
     Next
 Next
 # 変数定義もlastRow、lastColも作成していないので、当然動きません。
 # 考え方を示しただけです。

 トライしてみてください。
(γ) 2022/06/28(火) 10:52

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.