重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VBA質問です。

下記のようにマクロを作りました。E2、E3、E4、E5、E6とそれぞれのセルに×が入っているときに、メッセージを出し、
〇が入っているときはメッセージを出したくありません。
また、A1に入ったタイトル名、B2、B3、B4、B5、B6とそれぞれのセルに入れた項目名(間違ったものが入っているものもある)をそれぞれ出したいのですが、マクロを実行するとB2の項目ばかり出てしまい困っています。
※C列(C2以降)はA列(A2以降)に入った項目名とB列(B2以降)に入った項目名を結合する列として使っています。D列は都合により空欄としています。

また、E列に〇が入っているときだけメッセージが出て、×が出ているものはメッセージ表示されません。
どうしたらいいでしょうか。
どうぞよろしくお願いいたします。


Sub チェッカーMsgbox01() 'セルの値とアイコンを表示する

Dim I, C As Long
Dim J, D As Long
Dim result As Range
Dim msg As String
For I = 2 To 6 '2行目~6行目まで繰り返します
Set result = Range("E" & I)
If result = "×" Then
MsgBoxVisible = True
MsgBox (Range("B" & I) & vbCrLf & Range("B" & I) & vbCrLf & Range("B" & I) & vbCrLf & Range("B" & I) & vbCrLf & Range("B" & I)) & vbCrLf, vbCritical
'メッセージボックスにA列の「名前」、「アイコン」を表示します。
End If
Next I

For J = 2 To 6 '2行目~6行目まで繰り返します
Set result = Range("E" & J)
If result = "〇" Then
MsgBoxVisible = False
MsgBox (Range("B" & J) & vbCrLf & Range("B" & J) & vbCrLf & Range("B" & J) & vbCrLf & Range("B" & J) & vbCrLf & Range("B" & J)) & vbCrLf, vbInformation
'メッセージボックスにA列の「名前」、「アイコン」を表示します。
End If
Next J

MsgBoxVisible = True
MsgBox "チェック結果は以上です"

End Sub

「VBAの質問(Msgboxについて)です」の質問画像

A 回答 (2件)

どのような動作を考えているかがイマイチわからないので、添付画像のうち、E2/E4/E6の値が”x”だった場合にどんな体裁でメッセージボックスに表示させるのかを手書きなどでもいいですから、描いてもらえますか?



現時点でわかる誤りは、
Set result = Range("E" & I)

この部分です。
またRange型はなくバリアントもしくはストリング型が適正です。

result = Range("E" & I).Value
でよいです。
もっと言うと、単に判別で一度しか登場していないので、
IF result = "×" Then~ は IF Range("E" & I).Value = "×" Then~
でよいです。(変数resultは不要)

以下、こういう事かな?というコードを書いています。



Sub チェッカーMsgbox02() 'セルの値とアイコンを表示する

msg = ""

For I = 2 To 6

If Range("E" & I) = "×" Then

msg = msg & Range("A" & I).Value & " : " & Range("B" & I).Value & vbCrLf

End If

Next I


If msg = "" Then

MsgBox "該当データはありませんでした"

Else

MsgBox (Range("A1").Value & vbCrLf & msg & vbCrLf )& vbCrLf, vbCritical

End If

MsgBox "チェック結果は以上です。"

End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。以下でやりたいことが実現できました。助かりました。

Sub チェッカーMsgbox01() 'セルの値とアイコンを表示する

Dim I As Long
Dim result As String
Dim msg As String
Dim MsgBoxVisible As Boolean

 

msg = msg & Range("A1") & vbCrLf
For I = 2 To 6 '2行目~6行目まで繰り返します 7行目以降は無視します
result = Cells(I, "E").Value
If result = "×" Then
'メッセージボックスに「×アイコン」と、E列に×が入った行の内容を表示します。

MsgBoxVisible = True
msg = msg & Cells(I, "D").Value & vbCrLf
'メッセージボックスに表示する内容に、A列「タイトル名」とB列「項目名」を結合した D列の内容を追加します。
End If
Next I

If MsgBoxVisible Then MsgBox msg, vbCritical
MsgBox "チェック結果は以上です"

End Sub

お礼日時:2025/02/19 12:21

良く仕様がわからないのですが、こういうことでしょうか。


E列が×の場合、その行のA列とB列を連結して表示しています。
×が1件もない場合は、メッセージボックスを表示しません。

Sub チェッカーMsgbox01() 'セルの値とアイコンを表示する

Dim I, C As Long
Dim result As String
Dim msg As String
msg = ""
For I = 2 To 6 '2行目~6行目まで繰り返します
result = Range("E" & I)
If result = "×" Then
If msg <> "" Then msg = msg & vbCrLf
msg = msg & Range("A" & I) & Range("B" & I)
End If
Next I
If msg <> "" Then
'メッセージボックスにA列の「名前」、「アイコン」を表示します。
MsgBox (msg)
End If
MsgBox "チェック結果は以上です"

End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。以下でやりたいことが実現できました。助かりました。

Sub チェッカーMsgbox01() 'セルの値とアイコンを表示する

Dim I As Long
Dim result As String
Dim msg As String
Dim MsgBoxVisible As Boolean

 

msg = msg & Range("A1") & vbCrLf
For I = 2 To 6 '2行目~6行目まで繰り返します 7行目以降は無視します
result = Cells(I, "E").Value
If result = "×" Then
'メッセージボックスに「×アイコン」と、E列に×が入った行の内容を表示します。

MsgBoxVisible = True
msg = msg & Cells(I, "D").Value & vbCrLf
'メッセージボックスに表示する内容に、A列「タイトル名」とB列「項目名」を結合した D列の内容を追加します。
End If
Next I

If MsgBoxVisible Then MsgBox msg, vbCritical
MsgBox "チェック結果は以上です"

End Sub

お礼日時:2025/02/19 12:21

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

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


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