- ベストアンサー
VBAで複数セルの何れかが空白なら印刷しない。
VBA初心者です。 VBAでワークシートに印刷ボタンを配置して印刷しているのですが、製品名・受注数・納期・発注番号の何れかが空白だった場合、メッセージを表示させてどの項目が空白か警告表示させて印刷させたくないのです。 複数項目が空白ならメッセージも複数表示できればありがたいです。 もちろんすべての項目が入力されていれば印刷コマンドを実行させたいです。 セルの番地は製品名がY5、受注数がY9、納期がAA9、発注番号がAA14になっています。 お分かりになられる方がいらっしゃいましたら、ご教示お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Excel関数のCountAを用いてデータのあるセルの数を調べ、 4であれば印刷、4でなければメッセージ表示をするサンプルです。 印刷処理は仮で入れていますが、現在使われている処理を用いてください。 Sub sample() Dim strMsg As String '対象のセルのどれかが空白であるか判定 If WorksheetFunction.CountA(Range("Y5"), Range("Y9"), Range("AA9"), Range("AA14")) = 4 Then '印刷処理を記述 ActiveSheet.PrintOut Else 'メッセージ内容の作成 If Range("Y5") = "" Then strMsg = strMsg & "製品名 " If Range("Y9") = "" Then strMsg = strMsg & "受注数 " If Range("AA9") = "" Then strMsg = strMsg & "納期 " If Range("AA14") = "" Then strMsg = strMsg & "発注番号 " strMsg = Replace(Trim(strMsg), " ", ",") MsgBox strMsg & vbCrLf & "上記の項目が空白です。" End If End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
IF文で4セルが空白かどうか行けばまずいのですか。 4つぐらいなら4セルを判別して該当数を数えることは出来るでしょう。 ーーー 参考に下記のようなことをやってみました。 VBAのUnionの利用です。 Sub test02() For i = 1 To 5 Dim Target As Range Set Target = Union(Range("B" & i), Range("D" & i), Range("E" & i), Range("G" & i)) Target.Select MsgBox "A" x = Application.WorksheetFunction.CountA(Selection) MsgBox x Next i End Sub Count関数とCountA関数の使い分けに注意。わからなければWEBで調べる。 上記は同一行の例を対象にしてますが、4列バラバラ・飛び飛びの列について、文字列が入っているセル数を1行のコード実行で数えられます。これで4でない場合は印刷しない。 Unionはセル(行、列)がバラバラでも良い。しかし上記では、iで表せないと使えない。 >製品名がY5、受注数がY9、納期がAA9、発注番号がAA14 と行番号がバラバラ「になっているが、元データをたどると、1行のどこかの列にあるのでは? それならその段階でチェックして、ブランクセルが1以上(文字列や数字が4に満たない行)であれば、印刷データを組み立てずスキップする(結果的に印刷されない)とかすればよいのでは。
お礼
imogasiさん 御礼遅れて申し訳ありません。 このようなやりかたもあるんですね!! ありがとうございます。
お礼
eden3616さん 御礼遅れてしまい申し訳ありません。 何とかうまくできました。 ありがとうございました。