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

解決済みの質問

エクセル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行分も空いてしまい、かっこうが悪いのです。
改行せずに、続けて表示させようかとも思いましたが、それもあまり形がよくありません。
こんな場合、表示されてないセルの行を自動的に詰めるような方法はないのでしょうか?

投稿日時 - 2003-05-08 19:34:31

QNo.542487

困ってます

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

こんにちは。

「計算でエラーを表示させ」とは、計算結果がエラーだったら何らかの文字を表示させているって事?
その判定をさらに 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

投稿日時 - 2003-05-08 20:41:30

お礼

ありがとうございました。
完璧に出来ました!

ところで改行の記号の
+ Chr(13)は
他の人が書かれた
+Chr(&HD) + Chr(&HA) や
+Chr(10) + Chr(13)と
意味がどうちがうのでしょうか?

書換えてやってみたらどれも同じ様になるのですが・・・。
お礼にまた質問してすみません。

投稿日時 - 2003-05-09 14:07:20

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

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

回答(5)

ANo.5

再びこんにちは。

> + 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

投稿日時 - 2003-05-09 23:19:40

お礼

ありがとうございます。

投稿日時 - 2003-05-10 22:31:40

ANo.4

既に出ているご回答がそのようですが、
文字列をsとして、毎回繰り返しに入る前に、s=""でクリアし、セルにエラーがあるかどうかを1つずつ判別し、あればs=s & (セル内容) & chr(10) & chr(13)を繰り返す。
するとエラーのあるセル値の文字列だけがsに累積されます。
繰り返しが終わったところでMsgboxで出せば良い。

投稿日時 - 2003-05-08 22:21:10

お礼

ありがとうございます。

投稿日時 - 2003-05-09 14:08:34

ANo.2

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

投稿日時 - 2003-05-08 19:50:20

お礼

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

投稿日時 - 2003-05-09 14:05:01

ANo.1

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

としてあげれば いいでしょう。

投稿日時 - 2003-05-08 19:43:15

お礼

ありがとうございました。
出来ました!

ところで改行の
+Chr(&HD) + Chr(&HA) と、
他の人が書かれた
+Chr(10) + Chr(13)
あるいは
+ Chr(13)は、意味がどうちがうのでしょうか?

書換えてやってみたらどれも同じ様になるのですが・・・。
お礼にまた質問してすみません。

投稿日時 - 2003-05-09 14:04:17

あなたにオススメの質問