- 締切済み
Excelでファイルのコンペアを行いたい(vba)
Excel、VBAを使用してファイルのコンペアを行いたいと思い、試行錯誤してみましたが、詰まってしまいました 技術者の方、よろしければお教えください A列とB列の値を比較します AB列に同じデータがあった場合 = 何もしない A列のみにデータがあった場合 = 削除を表示 B列のみにデータがあった場合 = 追加を表示 AB列に違うデータがあった場合 = 更新を表示 上の4つの項目を判断させるところは出来ました 問題は以下です A列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は追加を表示する B列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は削除を表示する という部分が、どう試してみても上手くいく結果が出ずに困っています どなたかご解答よろしくお願い致します
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
情報処理試験で、昔は出たアルゴリズムの1つの、マッチングのロジックを使うとよい。 A,B列それぞれで重複した値があるのかどうかで、処理コントロール (フローチャートの流れ)が変わるが、質問に書いてない。そういうことの意識が薄いのだろう。 簡単なほうの重複なしに以下は仮定。 (1)まずA列だけでソート その後B列だけでソート。 昇順にすると仮定。 普通はコンペアはシート間で行われるように思うが、本件は珍奇。 (2) A列の(処理している)行のポインタをi, B列の行ポインタをk とする。 初めは i=1,j=1 でスタート (3)Cells(i,"A")の値とCells(J,"B")の値を比べる A列>B列 大 A列=B列 等しい A列<B列 小 の3つの場合がある。 (4)「大」のケースがA列が先のキーに進んだということで、Bのペア相手は居ないことが決定。 >B列のみにデータがあった場合 = 追加を表示、に当たるのかな J=J+1にして1行下へ進めて、コンペアに行く(繰り返す) (5)「等しい」場合 マッチングしたことになる。 >AB列に同じデータがあった場合 = 何もしない に当たるのかな。 i=i+1 j=j+1にして両方1行下へ進めて、コンペアに行く(繰り返す) (6)「小」の場合 B列にマッチングするデータは無いことに決定 >B列のみにデータがあった場合 = 追加を表示 に当たるのかな。 i=i+1にして1行下へ進めて、コンペアに行く(繰り返す) ーーー 使うコードはIFとGotoぐらいなもの。Gotoがイヤなら Case文が使えそう。 ーーー >AB列に違うデータがあった場合 = 更新を表示 この意味がよく判らなかった。 普通は例えば あるシートにキーのある列+データ列 もうひとつのシートにキーのある列+データ列 ガあるはず。その辺どうなっているのかな。 キーが一致して、データが違っておれば、変更と解釈するのだが本質問では各々1列しかない。 キーとはデータが何について書かれたものかを示す主体です。 人間なら職員番号や生徒番号、商品なら商品番号、時系列なら日時、金の場合は勘定科目など考えられる。このようなキーが何かを質問は書いてない。キーが同じでないものを比べてもしょうがない。まれに主体そのものの増減(退社とか非取扱商品化など)を問題にすることもあるが。( 例 ある本の出現語彙、後日改訂版の出現語彙などを比較)
- higekuman
- ベストアンサー率19% (195/979)
コードを提示してもらえますか?
- FEX2053
- ベストアンサー率37% (7991/21373)
コンペア処理の基本中の基本ですよね、これ。情報処理の試験には 時々出題されているので、その辺を読むと細かく解説されていると 思うんですけど・・・ で、あくまでExcel-VBAで作業をすることを前提に考えると、 IF Selection.value="" then Selection.Offset(1,0).Select else 処理 Endif こんな感じで、「現在選択しているセルの次を選択しなおす」 という処理を行うのがわかりやすいんじゃないかと思います。 Selection.Offset(0,1).select とすると選択されているセルは ひとつ右に、Selelction.Offset(1,0).Select とするとひとつ下に 移動します。当然「-1」とすれば左/上に移動します。 まあ、通常は配列に一気に読み込んで、サフィックスを加算するか 頂上のセルを基点にOffsetの値でコントロールするかという方法を 取るんですが、なれないと頭が混乱しますし、Selectionで選択セル を動かしておくと、[f8]キーでステップ実行したときにわかりやすい ですからね。