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

解決済みの質問

エクセルでセルの値がTRUEかFALSEか判定

Q3:R19の表があります。
Q列にはTRUEかFALSEが入りますが、空白や文字列の場合もあります。
R列には文字列です。
Q列でFALSEのセルだけ、同じ行のとなりのR列の文字列を順に抜き出し、メッセージボックスに表示したいのです。
下記のようなVBAを書いてみましたが、Q列が空白や文字列の場合まで抽出されてしまいます。
これを排除するいい方法はないでしょうか?
Sub test01()
  Dim msg As String
  Dim i As Long
  With Sheets("LOG")
    For i = 3 To 19
      If .Range("Q" & i).Value = False Then
'        Debug.Print  i & "-" & .Range("R" & i).Value
        msg = msg & .Range("R" & i).Value & vbCrLf
      End If
    Next i
  End With
  If msg <> "" Then
    MsgBox msg & vbCrLf & "上記により不可です。", vbCritical
  End If
End Sub

投稿日時 - 2017-02-09 22:37:28

QNo.9291973

困ってます

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

If .Range("Q" & i).Value = False Then

のところを

If TypeName(.Range("Q" & i).Value) = "Boolean" And .Range("Q" & i).Value = False Then

に変更されては如何でしょうか。

投稿日時 - 2017-02-10 00:38:10

お礼

なるほど!
Typename関数でブール型かどうかチェックすればいいんですね。
ありがとうございます。

投稿日時 - 2017-02-10 20:15:02

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

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

-広告-
-広告-

回答(3)

ANo.3

文字列で「FALSE」と入っていた場合、FALSEとして扱わなくていいならANo.1の回答で。
FALSEとして扱いたいなら
If .Range("Q" & i).Value = False Then

If .Range("Q" & i).Text = "FALSE" Then

こんな感じで

投稿日時 - 2017-02-10 13:54:28

お礼

ありがとうございました。
たすかります。

投稿日時 - 2017-02-10 20:28:25

ANo.2

If .Range("Q" & i).Value = False Then

ここを

If .Range("Q" & i).Value = "False" Then

では?

投稿日時 - 2017-02-10 10:10:15

お礼

ありがとうございます。

投稿日時 - 2017-02-10 20:23:14

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-