[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行単位で比較したい』(無糖)
4行目aと14行目bを比較して一致していたらOKのメッセージを出したいのですが下記コードを実行すると「"Range"メソッドは失敗しました:"_Global"オブジェクト」エラーになります。どのように修正したら良いか教えてください。
Sub ab_一致()
Dim a As Long Dim b As Long For b = 10 To 45 For a = 10 To 45 If Range(b, 14).Value = Range(a, 4).Value Then MsgBox "OK" Else MsgBox "NO" Exit For End If Next Next End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
Cells(1,2)
(メント) 2024/02/21(水) 12:39:28
行単位であれば二重ループにする必要はないと思います。
>4行目aと14行目bを比較して 行と列をしっかり確認してください。
Range(b, 14)じゃなく、 Cells(行,列)の記法を使うように修正してください。 (xyz) 2024/02/21(水) 12:42:56
Dim a As Long For a = 10 To 45 If Cells(14, a).Value = Cells(4, a).Value Then MsgBox "OK" Else MsgBox "NO" Exit For End If Next End Sub としてみたところ、エラーは出ないのですが"OK"だった場合、メッセージボックスの「OK」を 数十回押すことになってしまいました。とほほ・・・ メッセージボックスの「OK」を1回で済ますにはどのように修正したら良いか教えてください。
(無糖) 2024/02/21(水) 15:19:13
10列目から45列目まで、全ての列の4行目と14行目が等しかった場合は"OK"ってことですか? 単純に"NO"と表示したらマクロ終了で良ければ、 Boolean型の変数を使わずに、Exit Subで抜けるという手も無くはないです。
Sub ab_一致_改() Dim a As Long, s As String, f As Boolean For a = 10 To 45 If Cells(14, a).Value <> Cells(4, a).Value Then s = Split(Cells(1, a).Address, "$")(1) MsgBox "NO" & vbCrLf & s & "列が違います" f = True Exit For End If Next If Not f Then MsgBox "OK" End Sub (甘酒) 2024/02/21(水) 18:49:14
全部あってなければNGであれば、こんな感じで、ついでに色まで付けちゃえばわかりやすくないかい? Sub ab_一致_2() Dim a As Long Dim cnt As Long Dim r1 As Range, r2 As Range For a = 10 To 45 Set r1 = Cells(14, a) Set r2 = Cells(4, a) r1.Interior.ColorIndex = xlNone r2.Interior.ColorIndex = xlNone If Cells(14, a).Value <> Cells(4, a).Value Then MsgBox "NG " & a & "列目" r1.Interior.Color = rgbBlueViolet r2.Interior.Color = rgbBlueViolet Exit Sub End If Next MsgBox "OK" End Sub
(稲葉) 2024/02/21(水) 18:53:48
(無糖) 2024/02/22(木) 09:37:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.