エクセル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行分も空いてしまい、かっこうが悪いのです。
改行せずに、続けて表示させようかとも思いましたが、それもあまり形がよくありません。
こんな場合、表示されてないセルの行を自動的に詰めるような方法はないのでしょうか?
No.3ベストアンサー
- 回答日時:
こんにちは。
「計算でエラーを表示させ」とは、計算結果がエラーだったら何らかの文字を表示させているって事?
その判定をさらに 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
ありがとうございました。
完璧に出来ました!
ところで改行の記号の
+ Chr(13)は
他の人が書かれた
+Chr(&HD) + Chr(&HA) や
+Chr(10) + Chr(13)と
意味がどうちがうのでしょうか?
書換えてやってみたらどれも同じ様になるのですが・・・。
お礼にまた質問してすみません。
No.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
No.4
- 回答日時:
既に出ているご回答がそのようですが、
文字列をsとして、毎回繰り返しに入る前に、s=""でクリアし、セルにエラーがあるかどうかを1つずつ判別し、あればs=s & (セル内容) & chr(10) & chr(13)を繰り返す。
するとエラーのあるセル値の文字列だけがsに累積されます。
繰り返しが終わったところでMsgboxで出せば良い。
No.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
No.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
としてあげれば いいでしょう。
ありがとうございました。
出来ました!
ところで改行の
+Chr(&HD) + Chr(&HA) と、
他の人が書かれた
+Chr(10) + Chr(13)
あるいは
+ Chr(13)は、意味がどうちがうのでしょうか?
書換えてやってみたらどれも同じ様になるのですが・・・。
お礼にまた質問してすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 該当セルに行替えを含むデータを命令文に入れて、2行に表示したい。 5 2023/07/20 11:51
- Visual Basic(VBA) Excelのマクロについて教えてください。 3 2022/06/30 09:36
- Visual Basic(VBA) 飛び地セルの空白判定 2 2022/10/24 15:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで#N/Aを含めた平均値...
-
循環参照にならない方法があっ...
-
Tomcat のエラーログ
-
MacでKCFErrorDomainCFNetwork ...
-
WSUSインストール時に設定ウィ...
-
BASIC認証エラー時の表示HTML指定
-
AndroidStudioでエラーが出て解...
-
vsftpd 大量転送で時たま途中で...
-
docker pullのエラー
-
IndentationError: unexpected ...
-
.NETでActiveXコントロールを使う
-
ドメインに参加しようとするとD...
-
プロファイルエラー
-
ACCESS2000で今週の月曜日を取...
-
エクセルVBA 関数エラー箇所を...
-
Windows10 エラーメッセージ
-
MXレコードのエラー?
-
【QnapNAS】不良HDDと診断され...
-
/var/log/messagesエラー出力
-
クライアントが切断されました。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで#N/Aを含めた平均値...
-
循環参照にならない方法があっ...
-
検索をかけた時、ページを開け...
-
ドメインに参加しようとするとD...
-
MACアドレス 00:E0:C3 SAKAI って
-
エクセルVBA 関数エラー箇所を...
-
アウトルックで送信時に「名前...
-
/var/log/messagesエラー出力
-
「内部サーバーエラー サーバー...
-
応答を解析できません
-
android studioエラー
-
vsftpd 大量転送で時たま途中で...
-
.NETでActiveXコントロールを使う
-
プロファイルエラー
-
マクロでのエラーについて
-
【QnapNAS】不良HDDと診断され...
-
エクセル #N/Aを印刷時に表示...
-
[504 Gateway Timeout]が発生し...
-
クライアントが切断されました。
-
MacでKCFErrorDomainCFNetwork ...
おすすめ情報