- ベストアンサー
エクセルVBAでメッセージボックスの表示方法について
エクセル97です。 Sub エラー表示() A$ = Worksheets("Sheet1").Range("L10") B$ = Worksheets("Sheet1").Range("L11") C$ = Worksheets("Sheet1").Range("L12") D$ = Worksheets("Sheet1").Range("L13") E$ = Worksheets("Sheet1").Range("L14") F$ = Worksheets("Sheet1").Range("L15") If Worksheets("Sheet1").Range("L9") = False Then MsgBox "条件設定に下記のエラーがあります。" _ + Chr(&HD) + Chr(&HA) + "ご確認ください。" _ + Chr(&HD) + Chr(&HA) + A$ _ + Chr(&HD) + Chr(&HA) + B$ _ + Chr(&HD) + Chr(&HA) + C$ _ + Chr(&HD) + Chr(&HA) + D$ _ + Chr(&HD) + Chr(&HA) + E$ _ + Chr(&HD) + Chr(&HA) + F$ _ + Chr(&HD) + Chr(&HA) + "", vbCritical, "確認!!" End If End Sub 上記のようなメッセージを表示するマクロを作りました。 Sheet1のセルL10~L15に計算でエラーを表示させ、どれか一つでもエラーがあれば、メッセージボックスが出るようにしたのですが、たとえば、セルL10とL15のみのエラーだとメッセージボックスが途中、4行分も空いてしまい、かっこうが悪いのです。 改行せずに、続けて表示させようかとも思いましたが、それもあまり形がよくありません。 こんな場合、表示されてないセルの行を自動的に詰めるような方法はないのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 「計算でエラーを表示させ」とは、計算結果がエラーだったら何らかの文字を表示させているって事? その判定をさらに L9 にさせている? 対象セルに入っている関数も提示してあると処理概要が掴みやすいのですが。。。 Sub Test1() Dim msgResult As String, i As Integer msgResult = "条件設定に下記のエラーがあります。" & Chr(13) & _ "ご確認ください。" & Chr(13) With Worksheets("Sheet1") For i = 10 To 15 If .Range("L" & i) <> "" Then msgResult = msgResult & Chr(13) & .Range("L" & i) End If Next i If .Range("L9") = False Then MsgBox msgResult, vbCritical, "確認!!" End With End Sub
その他の回答 (4)
- papayuka
- ベストアンサー率45% (1388/3066)
再びこんにちは。 > + Chr(13)は > 他の人が書かれた > +Chr(&HD) + Chr(&HA) や > +Chr(10) + Chr(13)と > 意味がどうちがうのでしょうか? 改行を表すコードです。 Windows は通常 CR+LF(キャリッジリターン + ラインフィールド)ですが、MsgBoxで使う場合 CRだけでも、LFだけでも問題無く改行されるので省略しちゃいました。 何故CR+LFの2つで「改行」を表すかと言うと、昔のプリンターは、左から右に文字を印字して行き、CRで一番左に戻り、LFで1行下がり、また左から2行目を印刷って感じで2つのコードが必要だった。。。と聞いた事があります。 Chr(13)とChr(&HD)、Chr(10)とChr(&HA) は同じ意味です。 10進数の「13」は16進数の「D」です。&Hを付けると16進表記なので「&HD」 10進数の「10」は16進数の「A」です。&Hを付けると16進表記なので「&HA」 Chr(&HD) + Chr(&HA) は Chr(13) + Chr(10) と同じで、私は省略して Chr(13) と書いてしまっただけです。Chr(10) + Chr(13)は順序を間違えて書かれたのかなと。。 ちなみに名前付き定数に「vbCrLf」と言うのもあります。 Sub AAA MsgBox "Chr(13)" & Chr(13) & "でも、" MsgBox "Chr(10)でも" & Chr(10) & "改行するぞ" MsgBox "実はvbCrLfが" & vbCrLf & "一番正当か?" End Sub
お礼
ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
既に出ているご回答がそのようですが、 文字列をsとして、毎回繰り返しに入る前に、s=""でクリアし、セルにエラーがあるかどうかを1つずつ判別し、あればs=s & (セル内容) & chr(10) & chr(13)を繰り返す。 するとエラーのあるセル値の文字列だけがsに累積されます。 繰り返しが終わったところでMsgboxで出せば良い。
お礼
ありがとうございます。
- PAPA0427
- ベストアンサー率22% (559/2488)
1個1個やるしかないでしょう。 If Worksheets("Sheet1").Range("L9") = False Then MsgBox "条件設定に下記のエラーがあります。" _ + Chr(&HD) + Chr(&HA) + "ご確認ください。" _ + Chr(&HD) + Chr(&HA) + A$ _ + Chr(&HD) + Chr(&HA) + B$ _ を If Worksheets("Sheet1").Range("L9") = False Then STR$= "条件設定に下記のエラーがあります。" _ + Chr(&HD) + Chr(&HA) + "ご確認ください。" _ If Worksheets("Sheet1").Range("L10" = False Then STR$ + Chr(&HD) + Chr(&HA) + A$ _ ElseIf Worksheets("Sheet1").Range("L11") = False Then STR$ + Chr(&HD) + Chr(&HA) + B$ _ ・ ・ ・ End If STR$ + Chr(&HD) + Chr(&HA) + "", vbCritical, "確認!!" MsgBox STR$ End If
お礼
ありがとうございました。
- taknt
- ベストアンサー率19% (1556/7783)
Sub エラー表示() A$ = Worksheets("Sheet1").Range("L10") B$ = Worksheets("Sheet1").Range("L11") C$ = Worksheets("Sheet1").Range("L12") D$ = Worksheets("Sheet1").Range("L13") E$ = Worksheets("Sheet1").Range("L14") F$ = Worksheets("Sheet1").Range("L15") if A$<>"" then A$=A$+Chr(&HD) + Chr(&HA) if B$<>"" then B$=B$+Chr(&HD) + Chr(&HA) if C$<>"" then C$=C$+Chr(&HD) + Chr(&HA) if D$<>"" then D$=D$+Chr(&HD) + Chr(&HA) if E$<>"" then E$=E$+Chr(&HD) + Chr(&HA) if F$<>"" then F$=F$+Chr(&HD) + Chr(&HA) If Worksheets("Sheet1").Range("L9") = False Then MsgBox "条件設定に下記のエラーがあります。" _ + Chr(&HD) + Chr(&HA) + "ご確認ください。" _ + Chr(&HD) + Chr(&HA) + A$ _ B$ + C$ + D$ + E$ + F$ + "", vbCritical, "確認!!" End If End Sub としてあげれば いいでしょう。
お礼
ありがとうございました。 出来ました! ところで改行の +Chr(&HD) + Chr(&HA) と、 他の人が書かれた +Chr(10) + Chr(13) あるいは + Chr(13)は、意味がどうちがうのでしょうか? 書換えてやってみたらどれも同じ様になるのですが・・・。 お礼にまた質問してすみません。
お礼
ありがとうございました。 完璧に出来ました! ところで改行の記号の + Chr(13)は 他の人が書かれた +Chr(&HD) + Chr(&HA) や +Chr(10) + Chr(13)と 意味がどうちがうのでしょうか? 書換えてやってみたらどれも同じ様になるのですが・・・。 お礼にまた質問してすみません。