• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(できる方)エクセルVBA印刷済を印刷しない)

Excel VBA印刷済を印刷しない

このQ&Aのポイント
  • エクセルVBA印刷済を印刷しない。リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないようにしたいです。
  • 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたいです。
  • 現在のマクロは、データ入力シートから問い合わせ回答一覧シートにデータを流し込んで印刷しています。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 何れにしても、"済"かどうかのフラグについては セル範囲を使って管理するのが妥当でしょう。 仮に、印刷済のフラグ、について  列位置を  15:16列め(O:P列)  フラグを  [ True | その他] といった具合に設定した場合の例です。 列位置については、  10:00 が、印刷済、なら、15列め  11:00 が、印刷済、なら、16列め にフラグを設定するように書いています。 書換えが必要なら、VBEの置換機能で  15  16 をそれぞれ、指定の列番号に[すべて置換してみてください。 一応指定が必要な個所に◆マークを振ってあります。 ついでに、オブジェクトアクセスに無駄が多かったので最適化します。 また、Sheets("データ入力")からSheets("問合せ回答一覧")への 値の差し込みも、ブロック毎に纏めて処理するように書いています。 それと、ひとつ気になったのですが、     .Range("F3:J5").Value = ...     .Range("H8:V17").Value = ... これ ↑ 何故複数列に同じ値を設定するのかな?と考えたのですが、 もしかして[セルの結合]を適用した範囲、ということでしたらば、     .Range("F3:F5").Value = ...     .Range("H8:H17").Value = ... という風に一番左の単列を指定するのが正しいです。 ' ' 以下、標準モジュール ' ' ================================= Sub 流し込み印刷()  ' '   8315727   Dim mylastRow As Long ' ' 最終行を格納する変数   Dim myLastCol As Integer ' ' 最終列を格納する変数   Dim myLastCell As String ' ' 最終セルを設定する変数   With Sheets("データ入力")     .Select  '  ※注意!以下、Select禁止     With .UsedRange ' ' 対象はアクティブシートの使用中のセル       ' ' 最終行の行番号       mylastRow = .Rows(.Rows.Count).Row       ' ' 最終列の列番号       myLastCol = .Columns(.Columns.Count).Column     End With   End With   Dim i As Integer   With Sheets("問合せ回答一覧")     For i = 7 To mylastRow       If Cells(i, 15) = True Or Cells(i, 16) = True Then '  10:00、11:00◆印刷済フラグ、列位置を指定◆         .Range("F3:J5,H8:V17").Value = Empty         If Cells(i, 15) <> True Then  '  10:00◆印刷済フラグ、列位置を指定◆           ' ' 10:00、1 - 3           .Range("F3:J5").Value = Application.Transpose(Cells(i, 1).Resize(, 3).Value)           Cells(i, 15) = True  '  10:00◆印刷済フラグ、列位置を指定◆         End If         If Cells(i, 16) <> True Then  '  11:00◆印刷済フラグ、列位置を指定◆           ' ' 11:00、4 - 13           .Range("H8:V17").Value = Application.Transpose(Cells(i, 4).Resize(, 10).Value)           Cells(i, 16) = True  '  11:00◆印刷済フラグ、列位置を指定◆         End If         .PrintOut       End If     Next i   End With  ' Sheets("問合せ回答一覧")   i = i + 1 End Sub ' ' ================================= ご提示のコードだけを頼りにして、素直にお応えしたつもりですが、 これでいいのかな?とも思っています。 例えば、10:00の分は印刷済で、11:00の分以降を印刷する、という場合、 Sub 流し込み印刷 を実行すると、F3:J5 を空欄のまま印刷する仕様です。 もしかしたら、3:5行や8:17行を非表示にして印刷したいのかも知れない、とか、 もしかしたら、フラグによって差し込み位置を可変にしたいのかも知れない、とか、 もしかしたら、Sub 流し込み印刷 の実行を何らかのイベントで自動化したいのかも知れない。とか、 想像はしてみましたが、そこまでのニーズではないと判断しました。 何れにしても、 > 印刷済フラグをチェックし、再度印刷されないようにしたい というリクエストについては、大体、こんな感じになると思いますので。 ニーズに適うものが書けていれば、それが一番いいのですが、 もしも、仕様上の不足がある場合、そしてもしも他に回答が付かない場合、には、 ここは一旦閉じて、シートイメージなどを付した詳細な形で質問を建て直した方が、 解決は近いと思います。 私の回答上の不備や、既に説明されている範囲での仕様に対する誤解や、想定外のエラーや、 処理内容に関する質問、等、あれば、補足欄にでも書いてみてください。

nenesan23
質問者

補足

cj_mover さん さっそくご回答いただき、ありがとうございます!! やりたいことはご回答いただいた内容で近いのですが、 やはり現物をみていただいて再度ご返答いただければと思います。 補足では画像はアップロードできないので、 同タイトル(前に「再:」をつけます)にて再度質問を投稿するので、もし可能であれば、 ご返答いただければと思います。 よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう