みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

異なる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

投稿日時 - 2019-05-16 22:47:14

QNo.9617266

困ってます

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

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

Window は二つ限定のコードですが

投稿日時 - 2019-05-17 11:55:35

お礼

ActiveWindow.ActivateNext は
CreateObject("WScript.Shell").SendKeys "^{F6}" と同じことなんですね。ありがとうございます。

投稿日時 - 2019-05-17 12:46:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

>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)

投稿日時 - 2019-05-17 10:02:52

お礼

Ctrl+F6のショートカットキーをマクロ化したのですね。ありがとうございます。

投稿日時 - 2019-05-17 10:46:21

ANo.3

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

投稿日時 - 2019-05-17 07:54:00

お礼

Dialogsheetでこんなことができるのですね。
ありがとうございます。

投稿日時 - 2019-05-17 10:48:04

ANo.2

{Ctrl}+{F6} のことでしょうか?

投稿日時 - 2019-05-16 23:40:26

お礼

なーるほど。
Ctrl+F6のショートカットキーでBOOKを切り替えられるのですね!
これはいいですね、ありがとうございます。

投稿日時 - 2019-05-17 10:36:21

ANo.1

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

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

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

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

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

投稿日時 - 2019-05-16 23:07:25

お礼

ありがとうございます。
取得したデータを一旦別のブックに書き出して別マクロで参照する方法も考えたのですが、現在2つのBOOKを開いただけでもときどきエクセルが固まるほどなので、さらにBOOKは増やしたくなかったのです。すみません。

投稿日時 - 2019-05-17 10:29:34

あなたにオススメの質問