以下①でRange("A1,D1")に空欄があったらメッセージ出し終了、空欄がなかったら②で保存するようにしたいです。
ELSE Ifで繋ぐのだろうなぁと思っていろいろやってみたのですがFor Nextがあるとどこに入れて繋げばいいのかわからなくなってしまいました。
①②を1つにするにはどうしたらいいでしょうか。宜しく御願いします。
①Sub 空欄セル確認()
Dim Rng As Range
For Each Rng In Range("A1,D1")
If Rng.Value = "" Then MsgBox "未入力項目があります"
Next
End Sub
②Sub セルText名でダイアログ_マクロ無し保存()
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Text & "月" & Range("D1").Text & "日", arg2:=12
End Sub
No.7
- 回答日時:
No.6へのコメントについて。
> 後学の為に「:」の使い方を
If Rng.Value = "" Then MsgBox "未入力項目があります": Exit Sub
If文ですから、「条件が不成立なら、Thenの右側は全部無視して次の行にいく」という動作をする。だからこれは
If Rng.Value = "" Then
MsgBox "未入力項目があります"
Exit Sub
End If
と全く同じです。
ひとつでも未入力項目があるのを発見したら、MsgBoxを出すのはいいけれども、その先を漫然と続けちゃダメで、そこで打ち切り、おしまいにしなくちゃいけない。だからExit Subです。
":"は複数の文を1行にまとめて書くための区切りです。だからたとえば
A = 1: B = 2: C = 3 : D = 4: E = 5
のように、行を分けて書くと長ったらしくなるのを、単にスッキリ読みやすくするだけの目的で使ってもいいんです。
でもこの場合には、ただ短くするだけではありません。条件が成立した場合に二つのこと、MsgBoxとExit Sub を逐次やらせたい。とは言ってもMsgBoxはプログラムの制御にとってさして重要ではない、ま、ザコみたいなもんですので、わざわざ4行で書くのも大げさってか、業腹である。それで":"を使って、「条件が不成立のときには実行しない部分(2つの文)」をまとめたわけです。
回答有難う御座います。
以下と同じでそれを簡略化したコードと言う事なんですね。
Sub 空欄セル確認()
Dim Rng As Range
For Each Rng In Range("A1,D1")
If Rng.Value = "" Then
MsgBox "未入力項目があります"
Exit Sub
End If
Next
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Text & "月" & Range("D1").Text & "日", arg2:=12
End Sub
No.5
- 回答日時:
責任範疇が広がるため、①と②をひとまとめのコードにすることはおすすめしません。
入力値の検証と、検証が妥当だった際の処理を切り分けていると想定します。
その場合、検証結果が妥当/不当かという情報を得た上で、その後の処理を実施するようにします。
Sub Main()
If Not 空欄セル確認() Then
Exit Sub
End If
Call セルText名でダイアログ_マクロ無し保存
End Sub
Function 空欄セル確認() As Boolean
Dim Rng As Range
For Each Rng In Range("A1,D1")
If Rng.Value = "" Then
MsgBox "未入力項目があります"
空欄セル確認 = False
Exit Function
End If
Next
空欄セル確認 = True
End Function
Sub セルText名でダイアログ_マクロ無し保存()
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Text & "月" & Range("D1").Text & "日", arg2:=12
End Sub
No.4
- 回答日時:
こんばんは
チェックするセルが2つだけのようなので、わざわざループにしなくても良いのでは?
単純な If ~ Then ~ Else ~ の構文で済みます。
If Range("A1") = "" Or Range("D1") = "" Then
MsgBox "未入力項目があります"
Else
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Text & _
"月" & Range("D1").Text & "日", arg2:=12
End If
No.1
- 回答日時:
まず、「あります"」に続けて : exit sub と書く。
そして、②のナカミをNextの次の行に入れる。早速の回答有難う御座います。
以下にしてみましたら動作しませんでした。
Sub 空欄セル確認()
Dim Rng As Range
For Each Rng In Range("A1,D1")
If Rng.Value = "" Then MsgBox "未入力項目があります"
Exit Sub
Next
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Text & "月" & Range("D1").Text & "日", arg2:=12
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シート名でファイル検索する 2 2021/11/30 17:05
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Visual Basic(VBA) 左から空白文字を探して左側を比較する 4 2022/02/02 22:48
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) サブフォルダ含むすべてのフォルダの Excel 検索 4 2021/12/13 09:33
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
メッセージを1度だけ表示したい。
-
ダブルクリックすると現在の時...
-
Jtableの特定のセルの背景色や...
-
VBAで、貼り付け禁止命令を実現...
-
エクセルVBA(実行時エラー438...
-
Excelについて
-
エクセルテキストボックスの文...
-
Excel VBA ダブルクリックで入...
-
VBA セルに合わせて移動するが...
-
セル色を5秒間隔で変える
-
ハイパーリンクされているファ...
-
Excelのセル内にある図形を削除...
-
jTableのセルを入力禁止にしたい。
-
Visual Studio2019のC#で開発し...
-
【VBA】InputBoxで文字をセルに...
-
VBAの判定の仕方を教えてくださ...
-
EXCEL VBA Rangeの指定方法につ...
-
Swing 編集不可でも選択可能なJ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELマクロ 保護されているシ...
-
データが入力されている隣のセ...
-
エクセルテキストボックスの文...
-
Excelについて
-
メッセージを1度だけ表示したい。
-
ハイパーリンクされているファ...
-
ダブルクリックすると現在の時...
-
エクセルVBA(実行時エラー438...
-
エクセルVBA セル選択後にカレ...
-
Windowsで動くVBAがmacOSで動か...
-
VBAで、貼り付け禁止命令を実現...
-
VBAで丸をつけたいです。
-
VBA セルに合わせて移動するが...
-
セル色を5秒間隔で変える
-
(VBA)アクティブセルを起点に...
-
Excel VBA ダブルクリックで入...
-
Jtableの特定のセルの背景色や...
-
エクセルのVBAでダブルクリック...
-
VBAのListBoxで複数選択して...
-
マクロを使って画像を貼り付け
おすすめ情報