Excel VBA 質問スレッド №1772 (解決済)

プログラムをまとめる方法

投稿者 : 流     投稿日時 : 2024/02/08(Thu) 15:01:00     OS : 未指定     EXCEL : Office 365
下記の様な同じようなプログラムがあるときに何らかの処理を加えることで
プログラムを短くすることは可能でしょうか。
ご教授いただければ幸いです。


Sub sample15()
  Dim R_cnt1 As Long
  R_cnt1 = 5
    Do While Cells(R_cnt1, "A").Value <> "END"
       
               '2つの列のいずれかが未入力の場合
                     If Cells(R_cnt1, "D").Value = "" Or Cells(R_cnt1, "E").Value = "" Then
                        MsgBox "未入力があります。"
                     End If
                     If Cells(R_cnt1, "J").Value = "" Or Cells(R_cnt1, "K").Value = "" Then
                        MsgBox "未入力があります。"
                     End If
                     If Cells(R_cnt1, "O").Value = "" Or Cells(R_cnt1, "R").Value = "" Then
                        MsgBox "未入力があります。"
                     End If
                 R_cnt1 = R_cnt1 + 1
    Loop
    
End Sub

スポンサーリンク
[返信 1] Re : プログラムをまとめる方法
投稿者 : higeru     投稿日時 : 2024/02/08(Thu) 15:19:32
「同じようなプログラム」とは7~15行目の「同じような」Ifブロックのことでしょうか?

それよりもこのマクロでは特定列に空白のセルがあった時に、どの列か何行目かも分からず「未入力があります」と出ますが、それでよいのですか?
これならひとつでも空白があったらメッセージを出して終わりにすれば?と思ってしまいますが。

[返信 2] Re : プログラムをまとめる方法
投稿者 : 流     投稿日時 : 2024/02/08(Thu) 15:30:50
higeru様 ありがとうございます。

> 「同じようなプログラム」とは7~15行目の「同じような」Ifブロックのことでしょうか?

はい、そうです。


> それよりもこのマクロでは特定列に空白のセルがあった時に、どの列か何行目かも分からず「未入力があります」と出ますが、それでよいのですか?
> これならひとつでも空白があったらメッセージを出して終わりにすれば?と思ってしまいますが。

確かに、そうですね!それだけだと不親切ですよね;
MsgBox R_cnt1 & "行目に未入力があります"
これで行は指定できるのですが、列はどのように記載したらよいでしょうか?
重ねて質問すみません。

[返信 3] Re : プログラムをまとめる方法
投稿者 : higeru     投稿日時 : 2024/02/08(Thu) 16:04:20
セルをふたつずつまとめてチェックする必要もあるとは思えないので、以下でよくないですかね。

Sub sample15()
    Dim R_cnt1 As Long
    R_cnt1 = 5
    Do While Cells(R_cnt1, "A").Value <> "END"
        Dim col As Variant
        For Each col In Array("D", "E", "J", "K", "O", "R")
            If Cells(R_cnt1, col).Value = "" Then
                MsgBox col & R_cnt1 & " が未入力です。"
            End If
        Next
        R_cnt1 = R_cnt1 + 1
    Loop
End Sub

[返信 4] Re : プログラムをまとめる方法
投稿者 : 流     投稿日時 : 2024/02/08(Thu) 16:34:28
higeru様 ご丁寧にプログラムをありがとうございます。

一応、その2つのいずれかが~という感じなのですが
Arrayの使い方はすごく参考になりそうです。

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

[返信 5] Re : プログラムをまとめる方法
投稿者 : 追加質問!!!     投稿日時 : 2024/02/09(Fri) 12:52:35
こんにちは。解決済みにしてしまったのですが
すみません。追加で質問があります。
下記の様に配列に定数を使用することは出来ないのでしょうか?
実際に入れてみたのですが、全て未入力のメッセージボックスが出てきます。


Public Const AL_RE = 20
Public Const AL_RO = 21
Public Const AL_IJ = 22
Public Const AL_MK = 23
Public Const AL_SA = 24
Public Const AL_DZ = 25

For Each col In Array("D", "E", "J", "K", "O", "R")

For Each col In Array(AL_RE, AL_RO, AL_IJ, AL_MK, AL_SA, AL_DZ)

[返信 6] Re : プログラムをまとめる方法
投稿者 : higeru     投稿日時 : 2024/02/09(Fri) 14:55:01
空白チェックの対象はT~Y列でよいのですか?

[返信 7] Re : プログラムをまとめる方法
投稿者 : 流     投稿日時 : 2024/02/09(Fri) 15:35:35
higeruさん

引用したので、そのままでした。すみません。
はい。教えて頂いた方法は別の列のチェックにに使用させていただこうと思っています。

[返信 8] Re : プログラムをまとめる方法
投稿者 : higeru     投稿日時 : 2024/02/09(Fri) 17:51:59
■[返信 7] 流さん(2024-02-09 15:35:35)の記事
> はい。教えて頂いた方法は別の列のチェックにに使用させていただこうと思っています。

 そうなると実質1行だけ抜粋されても何とも言えませんね。
 「解決済み」だと色も違って新しい書き込みに気付きにくいので、この際全コードを付けて新たに投稿した方がよいと思います。

[返信 9] Re : プログラムをまとめる方法
投稿者 : 流     投稿日時 : 2024/02/13(Tue) 13:43:07
かしこまりました。

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

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2026-04-05 14:35:39 )
タイトルとURLをコピーしました