解決済み

VBAで2つのBOOKのセル範囲を比較

  • 困ってます
  • 質問No.9617266
  • 閲覧数77
  • ありがとう数9
  • 気になる数1
  • 回答数5
  • コメント数0

お礼率 98% (549/559)

異なるBOOKのセル範囲のデータを照らし合わせ、不一致があるか確認したいのです。
その際、セル範囲をあらかじめVBAで決め打ちするのではなく、画面上で選択したいので、Application.Inputboxを使おうと思います。
以下のコードで一応はできたのですが、これを使うためには、画面を分割して2つのBOOKの該当箇所を「並べて比較」で並べて表示させておかなければ片方のシートしか選択することができません。
選択範囲が小さい場合は並べて表示させても問題ないのですが、かなり大きな範囲を選択する場合は、並べて表示で画面が半分にされると選択するのが大変です。
まず比較元シートを画面全体に表示して範囲選択し、次に比較先を表示して選択できるようにする方法があばとても作業が楽になります。
ご教示いただければ幸いです。

Sub 選択範囲データ比較() '2019/05/16
  Dim myV, myW
  Dim buf(1) As Range
  Dim i As Long, m As Long, j As Long
  
  Set buf(0) = Application.InputBox(Prompt:="セルを選択してください。", Type:=8)
  myV = buf(0).Value
  Set buf(1) = Application.InputBox(Prompt:="比較するセルを選択してください。", Type:=8)
  myW = buf(1).Value
  If UBound(myV, 1) <> UBound(myW, 1) Then
    MsgBox "配列 1次元要素数が異なります。", vbCritical
    Exit Sub
  End If
  If UBound(myV, 2) <> UBound(myW, 2) Then
    MsgBox "配列 2次元要素数が異なります。", vbCritical
    Exit Sub
  End If
  For i = LBound(myV, 1) To UBound(myW, 1)
    For n = LBound(myV, 2) To UBound(myW, 2)
      If myV(i, n) <> myW(i, n) Then
        j = j + 1
      End If
    Next n
  Next i
  If j > 0 Then
    MsgBox j & "個、相違があります。", vbCritical
  Else
    MsgBox "同一です。" _
    & vbCrLf & "" _
    & vbCrLf & "1次元:" & UBound(myV, 1) & "個" _
    & vbCrLf & "2次元:" & UBound(myV, 2) & "個"
  End If
End Sub

質問者が選んだベストアンサー

  • 回答No.5

ベストアンサー率 60% (3/5)

マクロなら
Windows(2).Activate
とか
ActiveWindow.ActivateNext
でも良いです。

Window は二つ限定のコードですが
お礼コメント
emaxemax

お礼率 98% (549/559)

ActiveWindow.ActivateNext は
CreateObject("WScript.Shell").SendKeys "^{F6}" と同じことなんですね。ありがとうございます。
投稿日時 - 2019-05-17 12:46:31

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 62% (445/708)

Excel(エクセル) カテゴリマスター
>Set buf(0) = Application.InputBox(Prompt:="セルを選択してください。", Type:=8)
>myV = buf(0).Value
CreateObject("WScript.Shell").SendKeys "^{F6}"
>Set buf(1) = Application.InputBox(Prompt:="比較するセルを選択してください。", Type:=8)
お礼コメント
emaxemax

お礼率 98% (549/559)

Ctrl+F6のショートカットキーをマクロ化したのですね。ありがとうございます。
投稿日時 - 2019-05-17 10:46:21
  • 回答No.3

ベストアンサー率 54% (506/932)

Excel(エクセル) カテゴリマスター
こちらを使用してみてはいかがでしょう。
エクセルのセル参照ダイアログを作成し利用します。
テキストボックス2個作るとそれぞれ参照できます。
セルを参照するボタン
http://officetanaka.net/excel/vba/tips/tips53.htm
お礼コメント
emaxemax

お礼率 98% (549/559)

Dialogsheetでこんなことができるのですね。
ありがとうございます。
投稿日時 - 2019-05-17 10:48:04
  • 回答No.2

ベストアンサー率 60% (3/5)

{Ctrl}+{F6} のことでしょうか?
お礼コメント
emaxemax

お礼率 98% (549/559)

なーるほど。
Ctrl+F6のショートカットキーでBOOKを切り替えられるのですね!
これはいいですね、ありがとうございます。
投稿日時 - 2019-05-17 10:36:21
  • 回答No.1

ベストアンサー率 45% (92/202)

マクロ用のブックを作成してしまう事、「選択範囲取得用」と「マッチング用」のマクロ2つを組み合わせる事をオススメします。

ここまで組める方なら簡単なレベルなので、具体的なコードは書きませんが、多分軽く作れると思います。使いやすいように工夫して見てください。

1.選択範囲取得用マクロを実行すると、マクロ用のブックに選択した範囲を記録する。
2.マッチング用マクロを実行すると、手順1で記録した範囲に対してマッチングを行う。

ちなみに作業時の実行用マクロを用意して計3種にするのが作業的にはラクです。
範囲登録がされていない場合は選択取得マクロ実行。登録されているならマッチング実行、という形です。

エクセルVBAの場合、取得したデータを一旦ブックに書き出して別マクロで参照する事は非常に簡単です。上手く使うと発送次第でかなり柔軟な処理ができますよ。
お礼コメント
emaxemax

お礼率 98% (549/559)

ありがとうございます。
取得したデータを一旦別のブックに書き出して別マクロで参照する方法も考えたのですが、現在2つのBOOKを開いただけでもときどきエクセルが固まるほどなので、さらにBOOKは増やしたくなかったのです。すみません。
投稿日時 - 2019-05-17 10:29:34
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ