• 締切済み

VBAを使って、2つのファイルを比較したい

OS Windows98 Excel2000 下記のとおり、2つのファイルがあるとします。 aaa.xls(比較元) bbb.xls(比較先) 内容はほとんど同じなのですが、 行や列が追加、或いは削除されている場合もあります。 1)追加されている場合 bbb.xlsよりaaa.xlsへコピペをする。 2)削除されている場合 aaa.xlsからセルの値を削除し、 それ以下の値を上へ詰める。 ここで問題なのは、 1)ページ毎に行数が決まっていない。 2)アイテム毎に1行ずつ空白の行がある。 3)追加或いは削除の場合のコピペを行う場合、   ページブレイクをどう扱うか。 4)連番等といったLOOP等を使ってできる基本になる   値が全くない。(わざわざ手動で追加してもよいが、   全部で20ファイル(比較元)、各ファイルには300以   上の行がある。) 5)セルによって、2つ以上のセル(上下どうし、或いは   隣どうし)が結合している場合もある。 以前、Excel98でVBAを使ってプログラムを書いたことはあ るのですが、Excel2000は初めての初心者同様のものです。 プログラムの内容を書いてもらえれば1番うれしいのです が、多分これだけの説明ではそういう訳にはいかないと思 います。 ですから、何らかのきっかけとなるアドバイスでも頂けれ ばと思ってここへ質問にきました。 よろしくお願いします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

個人的な嗜好としては、要件に見合うツールでも作ってみたいと思いますが現実的ではないですね。 Vector で『excel 比較』で検索したらフリーソフトが2つありました。(goo) 結合セルまで対応しているか確認していませんが、試してみる価値はあると思います。 ダメなら、結合を解除して比較しても効果はあるでしょう。 一度試してみて下さい。

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

2つのファイルを比較するからには、同一とは、どのフィールド(通常はエクセルの列)について言うのか、質問に書かないと(考えがそこに及ばないと)駄目です。 この列でそれぞれ2つのファイルをソートし、その列のデータをマッチングキーとして、マッチングのロジックで突合せすれば良いのです。昔のバッチ作業のコンピュタ作業はこのロジックを使って、「ファイル更新」をやってました。ファイルの「キー」ということがいつも念頭にありました。一方がマスターファイル、他方がトランザクションファイルでした。情報処理受験教本にはこのロジックが載っています。 最近はこう言う道から、学習していかないので、有名で無くなっているのかも。しかし有用で、美しいロジックです から勉強してください。

関連するQ&A

  • ExcelのVBAで、他のExcelファイルのセルのデータを取得

    ExcelのVBAで、他のExcelファイルのセルのデータをファイルを実際に開かずに取得する方法はありますか? Workboks.openを使わずに、具体的にどうすればいいのでしょう? (例)  AAA.xls のセル"C5"に BBB.xls のセル"B3"のデータを入力したい場合。 (AAA.xlsにマクロを起動するボタンがある) ただし、BBB.xlsの最初の3行は空白です。

  • VBAでの選択範囲内の削除方法。

    Excel2003でVBAを使っています。 まず、VBAである範囲(例えば、A1からK20)を指定した後、その範囲内にある値の中で、aaaとbbb以外の値のセルを空白セルにしたいのですが、どのようにしたらよいのでしょうか? aaaとbbbの入っているセルを空白セルにする場合と、aaaとbbb以外の値が入っているセルを空白セルにする方法を教えてください。 宜しくお願いします。

  • エクセルVBA、他のファイルからのコピー

    BBA初心者です aaa.xlsのマクロで aaa.xls にbbb.csvのデータを貼り付けたいのですが Sub () Windows("bbb.csv").Activate…ここのbbbってところをセル参照にしたいのです ActiveCell.Range("A1:A10").Select Selection.Copy Windows("aaa.xls").Activate ActiveSheet.Paste End Sub 1つ上のセルにbbbと入力されていればbbb.csvのデータを 1つ上のセルにcccと入力されていればccc.csvのデータを 貼り付けれるようなマクロはどう書けばいいのでしょうか よろしくお願いします

  • excelで空白行を無視する方法

    excel2003について質問です。 「20090909aaa.xls」 aaaaaaa bbbbbbb ccccccc ******* 「20090909bbb.xls」 xxxxxxx yyyyyyy zzzzzzz ******* という内容で複数のxlsファイルがあったとします。 その複数ファイルを********を区切りに、 aaaaaaa bbbbbbb ccccccc xxxxxxx yyyyyyy zzzzzzz という風に並べたファイルを作りたいのですが、 cccccccの後にある空白行を無視する方法が分かりません。 値が入って入ればそれを表示して、無ければ次の行のセルを見て、 隙間無く表示するにはどういう風に書けばいいのでしょうか?

  • 参照先をセルに入力して、他のブックのセルを参照する方法

    Excelで、他のブックのセルを参照したいです。 たとえば、あるExcel(test.xls)上から、別のフォルダにある複数のブック C:\AAA.xls D:\BBB.xls の値を参照する場合ですが(AAA.xlsとBBB.xlsは、値の内容は違うが、同じシート名の同じセルに値が入っている)、 test.xlsのSheet1のA1に「C:\」、A2に「AAA.xls」を入力すると、test.xlsのSheet2にはAAA.xlsの値を表示し、 test.xlsのSheet1のA1に「D:\」、A2に「BBB.xls」を入力すると、test.xlsのSheet2にはBBB.xlsの値を表示するような方法です。 参照先が固定であれば、='C:\[AAA.xls]Sheet名'!D5・・・のような指定ができるのですが、参照するファイル名とパス名が都度変わるので、入力したセルの値で参照先を変えたいのです。 ちなみに、INDIRECTを使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • ファイル名の一括変更について

    たとえば、下記のようなファイル名に「#」を含んだ 名前のファイルが複数あります。 これをある条件によって、一括で変更したいのです。 条件としては、下記のように「#」の一文字だけを 「@」に変えたいのです。(※実際には半角) Aaa1#3.xls Aaa2#3.xls Aaa3#3.xls Bbb1#3.xls Bbb2#3.xls Bbb3#3.xls   ↓ Aaa1@3.xls Aaa2@3.xls Aaa3@3.xls Bbb1@3.xls Bbb2@3.xls Bbb3@3.xls 実際には、数千ファイルあるので、手作業で全部変更 するのは大変です。 これを便利に行なえるツール(できればフリーが良い) があれば、非常に助かります。 ご存知の方がおりましたら、教えて下さい。 宜しくお願いします。

  • 行頭のn文字が重複した行を削除したい

    Windowsのコマンドラインで、テキストファイル内の重複行の削除を行いたいのですが、行全体ではなく、行の一部のみを比較して重複行を削除出来ないかと考えています。 例えば、以下の様な内容のファイルがあり、 行頭の3文字のみを比較対照とした場合、 -------------------------- aaa1 aaa2 bbb1 bbb2 bbb3 -------------------------- 以下の様な結果にしたいのです。 -------------------------- aaa1 bbb1 -------------------------- AWKやPerl、その他のコマンドでも構いませんので、どなたかご存知の方がおられましたらお教え頂けないでしょうか。

  • Excelで、大量のファイルをテキストファイルにまとめて変換する方法はありますか?

     大量のExcelファイルを自動的にすべてテキストファイルに変換する方法はありますか? aaa.xls, bbb.xls, ccc.xls, ... zzz.xls         ↓ aaa.txt, bbb.txt, ccc.txt, ... zzz.txt と行った具合にです。  対象となるExcelは複数のワークシートからなりますが、いずれも変換したいシートをアクティブにした状態で保存してあります。 (でも、そうでない場合にも、例えば各ファイルの1枚目のシートを選んでテキスト形式で保存する方法があれば、それも教えていただけるとなお助かります。)  よろしくお願いします。

  • エクセルでマッチング

    2つのエクセルファイルの内容をマッチングさせたいんですけど、 例えば、aaa.xlsとbbb.xlsというのがあって、 aaa.xlsのA列とbbb.xlsのA列にファイル名、 bbb.xlsのB列にパッケージ名が格納されていて、 aaa.xlsのA列の1行目から順に、bbb.xlsのA列と 同じファイル名が存在するかマッチングさせていき、 マッチした場合にマッチした行のパッケージ名を aaa.xlsのB列に表示させたいんですけど、 関数なりマクロなりを使ってなんとかならないでしょうか?

  • Excel VBAでの名前の使い方

    Win7/Excel 2010で、セル範囲に名前を付け、VBAでデータを使おうと思います。セル範囲内の特定のセルの値を使おうと思いますが、方法はあるでしょうか? 行・列番号で、データを呼び出すプログラムでは、他の部分でセルの追加、削除をしたときでも、行列番号がずれてしまい、プログラムをその都度書き換える必要があります。セル範囲の名前を用い、範囲内のどの位置かを指定することができれば、プログラムを変える必要がなくなります。セルの1つづつに名前を付ければ、可能ですが、この場合、配列として取扱い難くなってしまいます。

専門家に質問してみよう