
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

No.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
ありがとうございます。以下でやりたいことが実現できました。助かりました。
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
No.1
- 回答日時:
良く仕様がわからないのですが、こういうことでしょうか。
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
ありがとうございます。以下でやりたいことが実現できました。助かりました。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
Vba FileSystemObject オブジェクトに使って拡張子、BaseNameを取り出す
Visual Basic(VBA)
-
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
-
4
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
5
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
6
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
7
エクセルの改行について
Visual Basic(VBA)
-
8
不要項目の行削除方法について
Visual Basic(VBA)
-
9
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
10
算術演算子「¥」の意味について
Visual Basic(VBA)
-
11
VBAの「To」という語句について
Visual Basic(VBA)
-
12
エクセルVBA 段落番号自動取得方法
Visual Basic(VBA)
-
13
vbsでのwebフォームへの入力制限?
Visual Basic(VBA)
-
14
【マクロ】A列にある、日付(本日:4月17日)を検索し、セルを選択するには?
Excel(エクセル)
-
15
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
16
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
17
VBAのループ処理について教えてください
Visual Basic(VBA)
-
18
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
19
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
20
VBA 同じフォルダ内のすべてのファイルに同じセルをペーストしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba textboxへの入力について教...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
Vba FileSystemObject オブジェ...
-
複数のExcelファイルをマージす...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
【マクロ】値を渡されたプロシ...
-
VBAでユーザーフォームを指定回...
-
【ExcelVBA】5万行以上のデー...
-
VBAでセルの書式を変えずに文字...
-
Web画面の文字をVB6で取得したい
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
エクセルのマクロについて教え...
-
エクセルの改行について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報