• 締切済み

ファイルの中身の比較について

2つのファイルの同じセルの値を比較する処理を 作りたいのですが、例ってないでしょうか。 2つのファイルに関しては、ファイルを選択させて開くような 処理は作成しました。 またrangeで最初のセルの位置も設定してあります。 データがある限り処理をループさせる処理をつくりたいです。 以前、最終行の取得の処理は載っていたので、 そこの部分はクリアできてると思ってますが.. お願いします

みんなの回答

回答No.1

↓こんな感じでしょうか。 Set シート1 = Workbooks("***.xls").Worksheets("Sheet1") Set シート2 = Workbooks("**2.xls").Worksheets("Sheet1") 列 = 3 'C列の比較と仮定して。 While (最終行の判断) If シート1.cells(行, 列) = シート2.cells(行, 列) then   '比較の結果、何をするのでしょうか? Endif 行=行+1 Wend

meteo14
質問者

補足

アドバイスありがとうございます。 比較の結果、もし同セルの値が違った場合、 そのセルもしくは行を網掛けをさせたいのですが、 ちょっとうまくいっておりません。 提示のソースをカスタマイズすればできるとはおもってますので やってみます

関連するQ&A

  • エクセルVBA(値または文字の重複削除)

    先日まで何も出来ない状態でしたが、時間が出来たので、 またVBAを触り始めました。 質問はVBAで変数に代入されている値または文字の重複を削除したいのです。 セル範囲を取得し、変数に代入するまではいいのですが、 行列にまたがって範囲選択すると複数のセル位置(数値)が入ってしまいます。 例えば、D8からE9とD12からD13まで選択すると、変数の「セル位置」には「$D$8$E$8$D$9$E$9$D$12$D$13」が代入されますが、 $D$8=$E$8 $D$9=$E$9 数値の部分(内部は文字列ですが)が重なってしまいます。 これを、「$D$8$E$$D$9$E$$D$12$D$13」など数値(文字)のどちらかを削除出来ないものかと悩んでいます。 利用するのは数字の部分だけなので、その処理自体は問題ありません。 IF文でループさせて文字が存在するか見ているだけです。 また、比較自体も必ず偶数行だけですので、最後の「$」が無くても問題はありません。 For 始まり行 = セル開始行 To 入力行数 Step 2 If InStr(セル位置, "$" & Trim(始まり行) & "$") Then Exit For End If Next ただ、重複があるとそれも個数に含まれてしまい、計算がおかしくなります。 選択セル範囲の個数取得にはRange.Addressを使っています。 Dim rg As Range 'セル セル位置 = "" For Each rg In Selection セル位置 = セル位置 + rg.Address Next 縦1列なら大丈夫なのですが、複数列になると問題になります。 列行関係なく選択されたセルの行数が分かればいいだけなんですが・・・ 考え方だけでも構いませんので、よろしくお願いします。

  • 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番うれしいのです が、多分これだけの説明ではそういう訳にはいかないと思 います。 ですから、何らかのきっかけとなるアドバイスでも頂けれ ばと思ってここへ質問にきました。 よろしくお願いします。

  • エクセルマクロでセルの結合をしたい

    エクセル2003です。 E列の値は昇順で並んでいます。 先頭E3行から下の行の値と比較し 同じ値の場合はセルを結合し 値が違う場合は結合しないで次の行を比較という処理を 最終行まで行いたいです。 (添付画像参照) 例えば E3-AA E4-BB E5-BB E6-CC E7-DD E8-EE E9-EE E10-EE E11-FF セルE4とE5を結合します セルE8とE9とE10を結合します。 次に結合した行と同じ行数のF列を結合します。 さらに結合した行と同じ行数のG列を結合します。 上記の場合 セルF4とF5を結合、 セルF8とF9とF10を結合します。 セルG4とG5を結合、 セルG8とG9とG10を結合します。 さらに結合した行と同じ行数のA列を結合します。 上記の場合 セルA4とA5を結合、 セルA8とA9とA10を結合します。 さらに結合したA列に数字を入力します A4とA5を結合したA4、A5セルには 2行を結合したので2と入力 セルA8とA9とA10を結合したA8、A9、A10セルには 3行を結合したので3と入力。 とりあえず、E列の結合を完成させてそのE列を 3行目から最終行までコピーして、 「形式を選択して貼付」の「書式」で 書式のみをF,G,A列にコピーすれば出来るのではと 以下の構文を作成しました。 セルの結合時は結合するセルの先頭の行の値が結合済セルの値に なるので最初にE列を結合していく時に A列に結合回数を記入しようと考えました。 ただ2行の結合は、A列に2と入力されたのですが 3行連結した時も2と入力されてしまったので改造しました。 テストデータでは期待しているようになったのですが 本番データでは結合される行が4行、5行等それ以上の行数が 結合する場合が有りこの構文ではなるべくしてなっているのですが 4行以上の行結合はA列の値はいずれも3になってしまいます。 (添付画像参照) どう修正すればいいか手段が考え付きません。 どのような方法がありますでしょうか? よろしくお願いします。 Sub セル結合2() '2013年10月25日 Dim 最終行 As Integer Dim 処理行 As Integer Dim 比較行 As Integer Dim 確認値 As Variant Dim 比較値 As Variant Dim 結合回数 Dim 戻行 Application.ScreenUpdating = False ThisWorkbook.Sheets("Sheet1").Select 最終行 = Cells(Rows.Count, 5).End(xlUp).Row 'F列の最終行を求めます。 Application.DisplayAlerts = False For 処理行 = 3 To 最終行 '3行目から最終行の前まで繰り返します。 比較行 = 処理行 + 1 '処理行の一つ下の行と比較します。→比較行とします。 確認値 = Cells(処理行, 5).MergeArea(1, 1).Value 'チェックする値を、確認値に代入します。 比較値 = Cells(比較行, 5) '比較する値を、比較値に代入します。 If 確認値 = 比較値 Then '値が同じかどうか Range(Cells(比較行, 5), Cells(処理行, 5)).MergeCells = True 結合回数 = Cells(処理行, 1) + 1 'セルを結合した回数 戻行 = 処理行 - 1 '処理行の1行上の行数を戻行とする Cells(処理行, 1) = 結合回数 '処理行のA列に結合回数を記入 Cells(比較行, 1) = 結合回数 '比較理行のA列に結合回数を記入 If Cells(処理行, 1) >= 3 Then 'もしも処理行のA列が3以上の場合 Cells(戻行, 1) = 結合回数 '戻り行のA列に結合回数をセット End If '同じでない場合は以下へ End If '同じでない場合は以下へ Next 処理行 Application.DisplayAlerts = True Application.ScreenUpdating = True Range(Cells(3, 5), Cells(最終行, 5)).Copy Range(Cells(3, 6), Cells(最終行, 6)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 7), Cells(最終行, 7)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 1), Cells(最終行, 1)).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False MsgBox "終了しました" End Sub

  • エクセルマクロFor Eachを1回で処理したい

    エクセル2013です。 以下のようなマクロを作成しました。 For Each が2回、回る為、処理時間が長いです。 For Each を1かいで済ませたくif文をandでつなげば といろいろ試しましたが、うまくできません。 For Each を1回で済ませるにはどうすればいいでしょうか? よろしくお願いします。 Sub 出荷済削除() Dim 対象セル As Range Dim 対象色 As Long Dim 対象色2 As Long Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 対象色 = Range("B8").Interior.Color 'セルB8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Interior.Color = 対象色 Then 対象セル.ClearContents '基準色と同じ色のセルの値をクリアする Next 対象セル 対象色2 = Range("A8").Interior.Color 'セルB8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Interior.Color = 対象色2 Then 対象セル.ClearContents '基準色と同じ色のセルの値をクリアする Next 対象セル Application.ScreenUpdating = True '画面切替停止解除 End Sub

  • 下4桁を比較し、小さい値のセルだけを赤色に塗りつぶすには?

    "C2:D2" から下へ、 「 連続したデータがあるセル 」 を選択してから、 C列 と D列 の  「 各値の下4桁だけ 」  を  行ごとに  比較し、 「 D列の値が 同じ か 小さいセルだけ 」 を 「 赤色に塗りつぶす 」 にはどのように記述すればよろしいでしょうか? 下記例の場合、  ”D2” と ”D4”  のセルだけが 「 赤色に塗りつぶす 」 ことになります。 どうか、ご教示くださいませ。 -------------------------- Range("C2:D2").Select Range(Selection, Selection.End(xlDown)).Select ・ ・ --------------------------      C列    D列   1    あ      い   2   た112222  1111  3   ち114444  5555  4   つ116666   6666 ・    ・       ・    ・    ・       ・  

  • Rubyでファイルの終わりから?行目を得る方法

    Rubyでファイルの再終行から?行目(コマンドのtail的な)の内容を取得しようとした場合、 どのような方法が一番メモリを消費せず、速度が速いのでしょうか? File.openしてループでgetsをしてまず全行取得、取得した内容から最終の?行を得る、のような方法は考えられるのですが、これだと一度ファイルの全てを処理するために、あまり効率が良い感じがしません。 他に何か良い方法は無いでしょうか。

    • ベストアンサー
    • Ruby
  • Excelマクロでセルの比較

    Excelマクロでセルの比較 まだマクロ初心者なので、詳しいことがわからなくて困っております。 例)●前提として何行目まであるかは変化します     (A列)(B列) (1行目) 35  35 (2行目) 26  26 (3行目) 13  13 (n行目) 12  12 ※n=最終行 【やりたいこと】 このようにシートに入力されていたとして、 「A1=B1?」⇒「A2=B2?」⇒「A3=B3?」⇒「An=Bn?」と比較を進めていき不一致の有無を出す。 もし不一致がなければ、そのまま通過しその次のマクロを実行していく。 不一致があった場合には、不一致の行を別ファイルに出力してファイル保存し、ファイルを閉じる。 マクロを実行している元のファイルは、保存せずにファイルを閉じる) 行の長さが変化するため、その変化にも対応した処理を実行したいと思っております。 本やサイトで調べてみたのですが、基礎知識がないためうまく処理をさせるマクロを作ることが出来ませんでした。 このようなマクロが可能なのかもわかりませんが、出来ましたらこのマクロを教えていただけますでしょうか。 宜しくお願いいたします。

  • ファイルを閉じたままの外部参照で最終行の行数取得

    こんにちは。VBA初心者、の段階から脱出を試みているものです。 ここやその他サイトを調べて、EXCELファイルを閉じたまま外部参照するには、Application.ExecuteExcel4Macroを使えばいいことがわかったのですが、参照先の最終行などの情報を取得するにはどうしたらいでしょうか。 私が調べた限りでは、以下のような単純に値を取得する方法しか説明されておらず、VBEのヘルプにも詳しい説明がありませんでした。 Cells(1, 1) = Application.ExecuteExcel4Macro _ ("'C:\My Documents\[Book2.xls]Sheet1'!R1C1") 参照先から値を取得する際に、必要な範囲だけ見るようにしてできるだけ速く処理できるようにしたいと思っています。 (したがって、 65535行目までループするとか、OPENメソッドで一旦ファイルを開くような手法は避けたいと思っています) なにかいい方法がありましたらご教示いただけないでしょうか。 よろしくお願いします。

  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

専門家に質問してみよう