プロが教えるわが家の防犯対策術!

マクロを独学で学び仕事に応用しているのですが、どうしても分からないことが発生してしまい、質問です。

内容は、今、エクセルシートのA1~B5の範囲で

A B
1 1 1
2 1 2
3
4 1
5 1

という形で入力されています(見難くてスミマセン)。
この状態から「A列とB列に同じ数字が入力されてれば、メッセージBOXを表示して、なおかつOKボタンを押したら該当セルを赤くする」というマクロを作りたいのですが、本来であれば1行目のみ赤くなるはずなのですが、空白セルが含まれている3行目も赤くなってしまうんです。つまり、空白セルも「同じ値」と認識されているみたいなのですが...。
この場合、空白セルを無視するにはどうしたらよいのですか?教えてください。なお、マクロは以下のように作っています。

Sub ナンバーチェック()
Dim Btn As Integer
For X = 5 To 10
If Cells(X, "A").Value = Cells(X, "B").Value Then
 Btn = MsgBox("同じ数値です", vbOK, "警告")
 If Btn = vbOK Then
  Cells(X, "A").Interior.ColorIndex = 3
Cells(X, "B").Interior.ColorIndex = 3
End If
End If
Next
End Sub

A 回答 (11件中11~11件)

こんばんは。



#10さんの
>また、答え書きすぎなように思われます。

そうですね。ただ、私は、回答者さんたちのためにも書いたつもりだったのですが。

そして、#8のimogasiさんのようなワークシートによる記録マクロの方法もアリですね。

細かいことを言えばきりがないですが、私としては、こういう問題(空白とEmpty)は、昔、やはり人から教わったことです。そういう受け入れ態勢が出来て初めて分かることかもしれませんが、ちょっと気になって書いてしまいました。半分ぐらいの人は理解していないような気がします。

それと、
>(個人的にはif文で1行に書きすぎるとわかりにくく、追加しずらいです)

私もそう思います。IF文1行の条件文はしないほうがよいです。
本来、他の言語ですと、条件ごとに括弧( )で括るような書き方をします。

質問者さんは、#6さんの回答には、目をくれていませんが、本来は、それでよかったのですが……。ただし、私は、そういうようには書きません。それは、それぞれのレベルがあるからです。また、長さ0の文字列の意味が分からなければ、何もなりません。


Sub ナンバーチェックR()
  Dim x As Integer
  Dim btn As Integer
  
  For x = 5 To 10
    '以下の一行の条件文を入れる
    If Cells(x, "A").Value <> "" And Cells(x, "B").Value <> "" Then
    
      If Cells(x, "A").Value = Cells(x, "B").Value Then
        btn = MsgBox("同じ数値です", vbOK, "警告")
        If btn = vbOK Then
          Cells(x, "A").Interior.ColorIndex = 3
          Cells(x, "B").Interior.ColorIndex = 3
        End If
      End If
    '以下の一行でEnd Ifと括る
    End If
  Next x
End Sub


また、ちょっと記録マクロを使った使い方なら、こんな風にも出来ますね。これは、スピードが速いです。ただし、条件付書式です。

Sub FormatConditionUsed()
With Range("A5:B10")
   .FormatConditions.Delete '条件付書式の削除
   '条件付書式にて
   .FormatConditions.Add _
    Type:=xlExpression, _
    Formula1:="=AND(RC1=RC2,RC1<>"""",RC2<>"""")"
   .FormatConditions(1).Interior.ColorIndex = 3
  End With
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A