• 締切済み

Excelでファイルのコンペアを行いたい(vba)

Excel、VBAを使用してファイルのコンペアを行いたいと思い、試行錯誤してみましたが、詰まってしまいました 技術者の方、よろしければお教えください A列とB列の値を比較します AB列に同じデータがあった場合 = 何もしない A列のみにデータがあった場合 = 削除を表示 B列のみにデータがあった場合 = 追加を表示 AB列に違うデータがあった場合 = 更新を表示 上の4つの項目を判断させるところは出来ました 問題は以下です A列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は追加を表示する B列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は削除を表示する という部分が、どう試してみても上手くいく結果が出ずに困っています どなたかご解答よろしくお願い致します

みんなの回答

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

情報処理試験で、昔は出たアルゴリズムの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)
回答No.2

コードを提示してもらえますか?

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

コンペア処理の基本中の基本ですよね、これ。情報処理の試験には 時々出題されているので、その辺を読むと細かく解説されていると 思うんですけど・・・ で、あくまで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]キーでステップ実行したときにわかりやすい ですからね。

関連するQ&A

  • Excelの組み合わせをカウントしたいです。

    こんにちは。 Excelの組み合わせをカウントしようと試行錯誤したのですが 未だに完成出来ないので質問させて頂きます。 A列に1から10までの数字がランダムで500行ほどあり、 A列の中で1と言う数字があった場合、 その下のセルに2があればその組み合わせを1とカウントし、 B列に合計を表示したいのですが、これは可能でしょうか? どうかご教授下さいますよう、宜しくお願い致します。

  • VBAでのデータ転記

    データがsheet1に縦記述で書いてあります。 A01 A02 A03 . . B01 B02 B03 . . AA01 AA02 AA03 . . AB01 AB02 AB03 . . これをsheet2に以下のように並べ替えたいのです。 A01 A02 A03・・・ B01 B02 B03・・・ ・・・・・ AA01 AA02 AA03・・・ AB01 AB02 AB03・・・ Left関数で文字列の左1文字を前後のセルで比較して異なる場合、改行する方法を考えましたが、AA01 AA02・・・になると左から2番目の文字で判断しなければなりません。なにかいい方法はあるでしょうか? ご指導宜しくお願いいたします。

  • エクセルで処理を繰り返す。Excel VBAで質問です。

    次のようなマクロを考えています。 “シート1”で県名をリストから選ぶと“シート2”のデータ(文字) を“シート3”に入れていく、というものです。 “シート1” C11セルがリストになっていて県名が選べる “シート2” A列に県名 1 東京都 ああああああ 2 dddd 3 4 てててててて 5 ggggggggggg 6 神奈川 つつつつつつ 7 qqqqqqqqqqqq 8 かかかかかかか 9 aaaaaaa B列にデータが文字列であります。A列では空白になっていますが、 B列では1から5行目までデータがあります(東京都の場合)。ただ 3行目のように空白になってい場合もあります。 ここでやりたいのは、例えばシート1のリストが東京都の場合、 ・シート2のA列に東京都を見つけて、 ・シート2のA列が次の県名になるまでB列のデータを ・シート3のB17から下にコピーする というものです。分からず困っていますがどなたか教えていただけないでしょうか。 ※画面の設定がうまくいかないんですが、A列が県名、それ以外はB列に入っています。

  • 急!!Excel VBA 転記マクロを教えて下さい

    Excel VBA超初心者です、 急ぎ作らなければならない資料があり、ご助力願います。 次の様な転記するアクションをコマンドボタンに設定したいです。 Sheet1の列A(先頭セルA2)に入力したデータを、 追加した(入力間違い等を除き、保存した)データ分だけ Sheet2の列B(先頭セルB3)の最終行から転記させていく。 列Aに入力したデータは、並び替えをするので (この分は、今回のVBAに含みません。入力・転記後、Sheet1で普通に並び替えをします。) 列Aと列Bのデータの順番が異なる。 以上です。 どうぞ宜しくお願いします。

  • excel VBAについて質問します

    excel VBAについて質問します A列のセルには単なる数値や「44+30」のようなデータが入っているものがある。 ' + の記号があったら、セルの先頭に = を追加して計算させて答えを表示しなさい。 'マクロ実行後、A列には、数値だけが表示されることとする。 マクロ実行前   ⇒  マクロ実行後 22   --------------- 22 44+30 --------------- 77 35 -------------------- 35 22+11 --------------- 33 こういった感じにしたいんですがなかなか上手く行きません。

  • 楽天RSS エクセル マクロVBA

    楽天RSSを使ってエクセル2007に日経225先物期近の10分足(9時~翌3時)を下記の様に(A列に10分足の時間、B列にその時間の値、D列に時刻と現在値)を表示させたいです。※D列は表示できています 。D2セルの現在値はリアルタイムで変わるので9時にスタートし、翌3:00まで10分足を表示させたいです。 ★【エクセル】★ 【A】 【B】 【C】 【D】 1 9:00 10030 9:17 ←現在時刻 2 9:10 10050 10080←現在値 3 9:20 10090 4 9:30 10120 5 9:40 10070 6 9:50 10040 7 10:00 10000 8 10:10 9970 ・ ・ 73 2:10 10080 74 2:20 10120 75 2:30 10150 76 2:40 10160 77 2:50 10190 78 3:00 10220 79 1週間ほど試行錯誤しましたが、分かりませんでした。 VBA マクロは初心者です。詳しい方よろしくお願いします。

  • Excelでのデータ処理について。

    お世話になります。 データ処理を迅速に行うために試行錯誤しているのですが、 知識が浅く上手くいかないので、皆様のお知恵をお貸し下さい。 下に粗末ではありますが、例として略図を載せます。 セルA1からA100に20から50の値がランダムに値が入っています。 少し離れたところに条件表としてCとDに値を入れます。 そこで、セルA1の値がC列のいづれかと同じだった場合(ここではC2)、 それに隣接するD列の値(ここではD2)をB列に代入する方法は ありますでしょうか? わかりずらい説明で恐縮ですが、ご存知の方いらっしゃいましたら ご教授お願いします。     A  B  C  D  1  21    20  10.2  2  30     21  10.4  3  45     22  10.8  4  32    23  10.9  5  28    24  11.0      ・    ・      ・   50  30.2 100  49

  • エクセル VBA で 教えてください!

    初めて質問させていただきます 初心者で困っています どなたかご教授よろしくお願いします! A列 ____B列______C列 B_____________________ 123 D______________________ 1 D______________________ 2 B______________________456 D______________________ 1 D______________________ 2 D______________________ 3 B______________________789 D______________________ 1 自分はB列にいます(表現が正しいかもわかりませんが) 同じ行で A列の内容が Bだったら隣のCセルの 内容をBセル(自分のいるセル)にコピー Dだったら上の内容(Bの時コピーした内容)をコピーし          行を下へ繰り返し A列のデータが空白まで繰り返す そうして B列を 埋めたいのですが よろしくお願いしたします!       

  • エクセル初心者です。

    A列に100行くらいのデータが入っています。B列に同じく100行くらいのデータが入っています。     A  B (例)AAA  120%    BBB  2300t/年    CCC  AA3500 コレをA列に AAA120、BBB2300 等のように1つのセルにデータをまとめたいのです。できれば一括で・・。でB列を削除したいのです。A1&B1で表示をしたら、120%のところが1.2になって%も表示されません・・。

  • エクセルで重複するセルを削除したい

    エクセル2000で同じ内容のセルが複数あったとき、ひとつだけを残し他を削除する方法を教えてください。 ただし少し条件があります。 データーは5列100行位からなっています。 A列にある重複したデーターのセルを削除したいのですが、A列は同一なのですがB列は異なっています。B列に数字が入っているセルとうでないセルがあるのですが、数字が入っているものを残したいのです。 具体例は次のとおりです。 A列に 「ホンダCIVIC」 B列 「-」と書かれた行と A列に 「ホンダCIVIC」 B列 「2」と書かれた行、 A列に 「ホンダCIVIC」 B列 「5」と書かれた行、 のA列だけを見ると重複した3行が有ったとします。 B列に「5」または「2」の入った行ひとつだけ残し、他を削除したいのです。 何かよい方法があればお教えください。よろしくお願いします。

専門家に質問してみよう