電子書籍の厳選無料作品が豊富!

リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。
リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように
したいです。
例)10:00 1~3を入力/1~3を印刷済 
  11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする


■したいこと
一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、
次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい

※現マクロは下記にしるしています。(モジュール1)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sub 流し込み印刷()


Sheets("データ入力").Select

Dim mylastRow As Long '最終行を格納する変数
Dim myLastCol As Integer '最終列を格納する変数
Dim myLastCell As String '最終セルを設定する変数


With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル
'最終行の行番号
mylastRow = .Rows(.Rows.Count).Row
'最終列の列番号
myLastCol = .Columns(.Columns.Count).Column
End With



Dim i As Integer

For i = 7 To mylastRow

'1
Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value
'2
Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value
'3
Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value
'4
Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value
'5
Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value
'6
Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value
'7
Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value
'8
Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value
'9
Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value
'10
Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value
'11
Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value
'12
Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value
'13
Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value



Sheets("問合せ回答一覧").PrintOut

Next

i = i + 1

End Sub
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A 回答 (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 流し込み印刷 の実行を何らかのイベントで自動化したいのかも知れない。とか、
想像はしてみましたが、そこまでのニーズではないと判断しました。

何れにしても、
> 印刷済フラグをチェックし、再度印刷されないようにしたい
というリクエストについては、大体、こんな感じになると思いますので。

ニーズに適うものが書けていれば、それが一番いいのですが、
もしも、仕様上の不足がある場合、そしてもしも他に回答が付かない場合、には、
ここは一旦閉じて、シートイメージなどを付した詳細な形で質問を建て直した方が、
解決は近いと思います。
私の回答上の不備や、既に説明されている範囲での仕様に対する誤解や、想定外のエラーや、
処理内容に関する質問、等、あれば、補足欄にでも書いてみてください。

この回答への補足

cj_mover さん

さっそくご回答いただき、ありがとうございます!!
やりたいことはご回答いただいた内容で近いのですが、
やはり現物をみていただいて再度ご返答いただければと思います。

補足では画像はアップロードできないので、
同タイトル(前に「再:」をつけます)にて再度質問を投稿するので、もし可能であれば、
ご返答いただければと思います。

よろしくお願いいたします。

補足日時:2013/10/23 09:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!