[[20240221121143]] 『行単位で比較したい』(無糖) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『行単位で比較したい』(無糖)

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 >


Range("B1")

Cells(1,2)
(メント) 2024/02/21(水) 12:39:28


 行単位であれば二重ループにする必要はないと思います。

 >4行目aと14行目bを比較して
 行と列をしっかり確認してください。

 Range(b, 14)じゃなく、 
 Cells(行,列)の記法を使うように修正してください。
(xyz) 2024/02/21(水) 12:42:56

メントさん xyzさん ありがとうございます。
Sub ab_一致()
    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


メッセージボックスの「OK」を1回で済ますには、
For a = 10 To 45 の部分を
変更する必要があるのはとなんとなくはわかるんですが
実際にどのように変更したらよいか知識がありません。
アドバイスをいただけませんでしょうか。
(無糖) 2024/02/21(水) 18:30:12

カウントして0だったらNG
(メント) 2024/02/21(水) 18:45:54

 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.