
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)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
-
4
エクセルの改行について
Visual Basic(VBA)
-
5
Vba FileSystemObject オブジェクトに使って拡張子、BaseNameを取り出す
Visual Basic(VBA)
-
6
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
7
不要項目の行削除方法について
Visual Basic(VBA)
-
8
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
9
VBAについてです。 どなたかご教示いただけないでしょうか。 データのチェックシートを作成しています
Visual Basic(VBA)
-
10
【マクロ】A列にある、日付(本日:4月17日)を検索し、セルを選択するには?
Excel(エクセル)
-
11
VBAの「To」という語句について
Visual Basic(VBA)
-
12
算術演算子「¥」の意味について
Visual Basic(VBA)
-
13
エクセルVBA 段落番号自動取得方法
Visual Basic(VBA)
-
14
vbsでのwebフォームへの入力制限?
Visual Basic(VBA)
-
15
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
16
Excelの関数について このように、Iの個数に基づいて、 それの合計を、Dに表示させたいです。 下
Excel(エクセル)
-
17
VBAのループ処理について教えてください
Visual Basic(VBA)
-
18
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
19
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
20
Excelのマクロについて教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
エクセルの改行について
-
VBAでCOPYを繰り返すと、処理が...
-
算術演算子「¥」の意味について
-
Vba セルの4辺について罫線が有...
-
改行文字「vbCrLf」とは
-
【VBA】 結合セルに複数画像と...
-
VBA 入力箇所指定方法
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
[Excel VBA]特定の条件で文字を...
-
Excel 範囲指定スクショについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報