• ベストアンサー

VBAで複数セルの何れかが空白なら印刷しない。

VBA初心者です。 VBAでワークシートに印刷ボタンを配置して印刷しているのですが、製品名・受注数・納期・発注番号の何れかが空白だった場合、メッセージを表示させてどの項目が空白か警告表示させて印刷させたくないのです。 複数項目が空白ならメッセージも複数表示できればありがたいです。 もちろんすべての項目が入力されていれば印刷コマンドを実行させたいです。 セルの番地は製品名がY5、受注数がY9、納期がAA9、発注番号がAA14になっています。 お分かりになられる方がいらっしゃいましたら、ご教示お願いいたします。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

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

totozaemon
質問者

お礼

eden3616さん 御礼遅れてしまい申し訳ありません。 何とかうまくできました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

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に満たない行)であれば、印刷データを組み立てずスキップする(結果的に印刷されない)とかすればよいのでは。

totozaemon
質問者

お礼

imogasiさん 御礼遅れて申し訳ありません。 このようなやりかたもあるんですね!! ありがとうございます。

関連するQ&A

  • セル内のデータが空白の場合、その行は印刷しない

    エクセルデータで1000行、列項目が10項目ある表を作りましたが、データのない項目があるので印刷時にデータのない行は印刷しない方法を教えてください。 ただし、AとB列は品名と品名コードが常に表示されます。 データとして在庫数、重量、単価の項目があり金額は重量×単価の計算式があります。 ※在庫数、重量、単価が空白の場合はその行は空白行とみなし印刷しないようにする。  また、プレビューで見た場合も空白行は詰めて表示されること ※在庫数、重量、単価のセル内には関数が登録されておりデータが0の場合は空白となるように 設定してあります。  サンプル画像を添付しますのでよろしくお願いします。

  • ACCESS2000でレポート印刷が空白になる

    ACCESS2000でレポート印刷を行っていますが プレビューでは、きれいに表示され印刷が行えるのですが 直接、プレビューせずに印刷をかけると、VBAで求めているすべての 項目が空白になってしまいます(空の表組が印刷される) 解決方法を教えてください。 ・表組の内容のほとんどがVBA(Report_Activate と Report_Page)で求めています よろしくお願いします

  • VBA 印刷について(空白ページを印刷しない)

    エクセル VBAで空白のシート及び空白ページを印刷しない方法を教えてください。 見積明細シートが明細1、明細2と9まであります。 各シート見積もりの内容によりページ数が異なり 入力の無いシートもあります(明細3以降入力無し等) 又、2行目まではタイトル行のためシートに最初から入力済みです。 縦横とも罫線を引いてあります。 A    B   C   D    E   F 1 項目  適用  単価  単位  金額   備考← タイトル行 2                        ← タイトル行 3 ここから入力 4 5 ↓ 1ページ23行 例えば、明細1 24行まで入力した場合、2ページめの最後(44行目まで) 印刷したい。 明細2以降 タイトル行以外にデーターが有れば印刷、なければ印刷しない。 様な感じです。 最終行まで印刷するところまでは自力でたどり着いたのですが、それだと最終行よりしたの罫線が印刷されなくて困っています どなたかご教示願います

  • EXCEL VBA(初心者)印刷ループについて

    こんばんは。 EXCEL VBA初心者です。 以下のような印刷ループのVBAを作りました。 (シート1にデータを入力しシート2で印刷) Sub 連続印刷() Dim x As Integer x = Application.InputBox( _ prompt:="先頭ページの番号を入力してください") Y = Application.InputBox( _ prompt:="最終ページの番号を入力してください") line: Worksheets("1").Select Range("B1").Select For i = x To Y 'ループ開始番号と終了番号を追加 ActiveCell.FormulaR1C1 = i '変数 i を代入するように修正 ' Range("B1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Next i '次へループ End Sub というものです。 以下の問題点を改善したいのです。 (1)開始番号と終了番号のいずれかが ”空白”の場合は  VBAを中止し何も印刷しない(何もメッセージを表示しない) (2)開始番号が終了番号より数字が大きい場合も(1)と同様の処理にしたい というものです。 初心者のためご教授ください。 よろしくお願いいたします。

  • ワードで1枚の紙に複数ページ印刷するとき、各ページの間にできる空白をなくすにはどうすればいいですか?

    ワードで文章印刷時に「1枚あたりのページ数」を複数に設定すると、1枚の紙に複数のページが縮小して印刷されますよね。 しかし、このとき、1枚の中の各ページ間に空白が開いてしまいます。 この空白をなくしたいのですが、なにか方法はありませんでしょうか? またない場合、 私は1枚の紙に8枚分の文章(キーワード)を、間隔があかないように敷き詰めて印刷したいのですが、別の方法で、そのように印刷する方法がありましたら、教えてください。

  • エクセルの空白セルがAM120000に

    エクセル全くの素人です。 エクセルのデータを利用して、ワードで差込印刷を設定しています。 日付の項目で本来空白のはずの欄が「AM120000」と表示されます。 エクセルの空白セルが「0」と認識されて起こる現象のようですが、解決策が全くわかりません。 かなりの数のデータを差込みますので、簡単に処理できる方法が有ればご教授下さい。 ちなみに「関数」なるものの知識が全くありません。 よろしくお願いします。

  • VBAセルの値が指定数量に満たない時に印刷させない

    皆様いつもお世話になります。 行き詰ってしまったので質問させてください。 複数セルが空白なら印刷させないコードを作ったのですが、そこへ総数が納入ロットより少ない時 と総数が納入ロットより大きい時に警告メッセージを表示して印刷させたくないのです。 もちろん総数=納入ロットは印刷します。 現状のコードでは印刷できてしまうのです。 お手数ですが、よろしくお願いいたします。

  • 【Excel VBA】一定数以上の空白行を削除する

    お世話になります。 現在、見積用のVBAを作成していますが、行き詰った為、質問いたします。 <前提> ・作成する見積明細は横8列で、行数は入力する項目数により可変です。 ・印刷して提出する為に、カテゴリごとに小計をページ最下行に挿入します。 (1ページあたりの行数は見出しを含めず20行です。) ・各カテゴリ内の項目数により、項目の最下行と小計行の間に相応の空白行ができます。 (例1) 項目が5個の場合は14行の空白行、その下に小計が表示される(ページ数は1ページ) (例2) 項目が25個の場合は14行の空白行、その下に小計が表示される(ページ数は2ページ) <問題> ・19行以下の空白行はそのままにし、20行空白ができた場合に該当行を削除して、シートを整えることが目的です。(21行以上空白ができることはありません) ・20行の空白はランダムに発生し、数も不定です。 下から最下行を探して、その一つ上の行から更にその上を探して、 差分が20の場合に該当行を削除する・・・ を繰り返して、上に上がっていく処理をイメージしますが、力不足でまとめられません。 書き方のヒントだけでもご教示ください。 何卒、宜しくお願いします。

  • VBA複数セルで検索

    VBA複数セルで検索 VBA初心者です。 1つのシートにA列氏名1、B列番号1、c列エラー、D列氏名2、E列番号2と並んでます。 例) a*1001* *a*1001 a*1005*該当なし *a*1002 a*1000* *c*1003 c*1003* *e*1005 c*1005*該当なし *d*1004 以下続く(*はセル区切り) 氏名1と番号1の組み合わせが氏名2、番号2にあるかどうかチェックして ないものは、C列に「該当なし」とエラーを表示させたいです。 Find関数を使用してやってみたのですが、氏名と番号をセットで検索する方法がわかりません。 氏名と番号をくっつけて検索すればいいのでしょうか?

  • 空白行になるまでループし、印刷するマクロを教えて下さい

    シート1にデータがあり、シート2にvlookup関数を使用して、 番号に対応する登録番号・所属・氏名を表示させるようにしました。 質問なのですが、 A2に番号が1~3まであり、空白(空白行)になるまで シート2に登録番号・所属・氏名を表示させ 番号ごとに印刷をしたいと思っています。 シート2に番号1の内容(登録番号・所属・氏名)を表示させ印刷し、 印刷後、シート2に番号2の内容を表示させシート2印刷し、 印刷後、シート2に番号3の内容を表示させシート2印刷し、 番号行が空白になったらこの処理を終了するというマクロを作りたいのですが、 どのようにしたらよいですか。 初心者でよく分からないのですが。 皆さん教えて下さい。 【シート1】 番号 登録番号 氏 名 所属学科 職名 1 00001 田中 健太 機械工学科 教授 2 00201 音   光 機械工学科 講師 3 01525 鈴木 洋  機械工学科 助手 【シート2】 番号 登録番号: 所属: 氏名:

専門家に質問してみよう