dポイントプレゼントキャンペーン実施中!

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


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

※現マクロは下記にしるしています。(モジュール1)
※画像に関連する2つのシートを添付しています
上部:データ入力
下部:問合せ回答一覧

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

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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「再:(できる方)エクセルVBA印刷済を印」の質問画像

A 回答 (3件)

#1、cjです。

#1補足欄拝見しました。

> →記載していませんでしたが、セルに関数が入っているので、不要な行が印刷されてしまいます。
> A~M列に関数がはいっており、計算されたセルの行のみ印刷するという処理が可能でしょうか?
> 大変申し訳ないですが、ご教授ください。★★★

"計算されたセルの行のみ印刷"という条件判別ですが、
A列の値(数式の戻り値)が、""(文字列値"")ならば、処理を終わらせるように書いてみました。
想定しているのは、=IF(条件,値,"")、のような構文の数式が設定されている場合です。
うまく行かない場合は、数式そのものを補足してください。
判別がうまく行けば、無駄な印刷は省けます。

'  修正↑▲結合セル▲
と記した行は結合セルである、という情報を元に、従来記述をコメントブロックして、
適正化したものをひとつ上の行に書き加えました。
もし、Sheets("問合せ回答一覧")への差し込みがうまく行かない場合は、
書き加えた行を削除して、コメントブロックを解除してください。

私が書く処理では扱いませんが、
変数 myLastCol について、もし、そちらでお使いになる場合は、
今回、15:16列にフラグを出力する関係で、UsedRangeの列幅が変わってしまう
かも知れないので、注意してください。

以上です。

' ' =================================

Sub 流し込み印刷()  ' '   8315727_2
  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, 1) = "" Then Exit For  '  修正▲空行なら処理を抜ける。A列が空セル、という条件▲

      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:F5").Value = Application.Transpose(Cells(i, 1).Resize(, 3).Value)
'          .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:H17").Value = Application.Transpose(Cells(i, 4).Resize(, 10).Value)
'          .Range("H8:V17").Value = Application.Transpose(Cells(i, 4).Resize(, 10).Value)  '  修正↑▲結合セル▲
          Cells(i, 16) = True  '  11:00◆印刷済フラグ、列位置を指定◆
        End If

        .PrintOut Preview:=True

      End If

    Next i

  End With  ' Sheets("問合せ回答一覧")

  i = i + 1  '  回答のコードでは未使用▼
End Sub

' ' =================================
    • good
    • 0

こんにちは。



やりたいことは、こんなことでしょうか。

Sub 流し込み印刷()

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

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

Dim i As Integer
Dim lp As Integer

For i = 7 To mylastRow

If Sheets("データ入力").Cells(i, 14).Value<>1 then

For lp=1 To 13
Sheets("問合せ回答一覧").Range("F3:J3").Offset(lp-1,0).Value = Sheets("データ入力").Cells(i, lp).Value
Next lp

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

Sheets("データ入力").Cells(i, 14).Value=1

End If
Next i

End Sub

"データ入力"シートの14列目をプリント済み確認フラグセルにして、そこが"1"でなければ印刷し、フラグセルに1を立てる、という処理をしています。
ついでに、13行分のデータをコピーする作業もループにした方が、プログラムがシンプルになりますね。
    • good
    • 0

こんにちは。



画像、確認しました。

両シートの配置については、
ほぼ前スレでの想定通りでしたし、ご提示のコードから読み取れる内容でした。
 ・Sheets("問合せ回答一覧")のRange("F3:J5")およびRange("H8:V17")が差し込み先
  だということは理解できているのですが、これは、
  横方向(それぞれ、5列、15列)に[セルの結合]を適用したものが
  縦に(それぞれ、3行、10行)並んでいる、ということでしょうか?
  [セルの結合]を適用しているかどうか、です。★
 ・ご提示のコードでは、
>   For i = 7 To mylastRow
  Sheets("データ入力")の7行めから、最終行までを処理の対象にしていますが、
  画像では行の表示が読み取れないこともあって、疑問が残ります。
  この、7、というスタート値について、確認をお願いします。★

今回、新たに、説明のコメントを画像に貼り付けてあるようなのですが、
こちらからは、シート名を示唆する部分以外、読み取れていません。
すみませんが、テキストとして再度、説明し直して頂けますか。★

もう一点、ご提示のコードで
> With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル
の部分についてですが、
.UsedRangeは、塗り潰しなどの書式設定についても、一度でも編集されたことのあるセル範囲
を返します。
つまり、有意なデータがあるかどうかとは関係ない範囲を返すプロパティです。
例えば、データ入力は100行め迄済んでいて、ということでも、
500行め迄塗り潰しされていれば、mylastRowは、100ではなく500になってしまいます。
シート上、手作業で、Ctrl+End で選択されるセルが、正しく最終行になっているか確認してください。
もし、相違が見られる場合は、対処として、
特定の列を基準にして、データの最下行を採る必要があります。
書き直した方がいいかどうか、です。★
この場合、どの列を基準にしたらいいか決める必要があります。★option

また、Sheets("データ入力")の、時刻系列が読み取れないこと、★
印刷済フラグを何処にどのように設定するのか、未だ判りません。★

今の処、要求仕様への理解に関しては、前スレの時点から変わりありません。
ただ、先回のコードに不備があって動かなかったようなので、
サンプルブックを作成した上で、修正を加え動作確認したものを再掲します。
もし、こちらのミスで解決を遅らせていたのならすみません。
一応、先回説明したように、
Sheets("データ入力")の各行に対して、15:16列めをフラグ設定範囲にしています。
先回の補足の様子では、たぶんお望みとは違うのかな、とは思いますが、
といって、どう違うのか、新しく解ったことがないので、修正だけしておきます。

疑問点を★マークで纏めました。
画像にて既に説明されている行き違いもあるかと思いますが、
再度の補足をお待ちしています。


' ' =================================

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 ' Preview:=True

      End If

    Next i

  End With  ' Sheets("問合せ回答一覧")

  i = i + 1
End Sub

' ' =================================

この回答への補足

こんにちわ!!!早速ご回答いただき、ありがとうございます。
修正いただいた内容でこちらで思った通りの動きができました。
ただ、一部うまくいかない点があります。
★★★の部分だけご教授いただければと、こちらで考えた通りの
ものができます。ご質問いただいた項目についての回答もあわせて、
下記に記載しています。


・Sheets("問合せ回答一覧")のRange("F3:J5")およびRange("H8:V17")が差し込み先
  だということは理解できているのですが、これは、
  横方向(それぞれ、5列、15列)に[セルの結合]を適用したものが
  縦に(それぞれ、3行、10行)並んでいる、ということでしょうか?
  [セルの結合]を適用しているかどうか、です。★

→セルの結合を適用しています。


>   For i = 7 To mylastRow
  Sheets("データ入力")の7行めから、最終行までを処理の対象にしていますが、
  画像では行の表示が読み取れないこともあって、疑問が残ります。
  この、7、というスタート値について、確認をお願いします。★

→スタート値は7行目からです。


今回、新たに、説明のコメントを画像に貼り付けてあるようなのですが、
こちらからは、シート名を示唆する部分以外、読み取れていません。
すみませんが、テキストとして再度、説明し直して頂けますか。★

→シート名以外は今回の説明コメントではないので、お気になさらず。


もし、相違が見られる場合は、対処として、
特定の列を基準にして、データの最下行を採る必要があります。
書き直した方がいいかどうか、です。★
この場合、どの列を基準にしたらいいか決める必要があります。★option

→記載していませんでしたが、セルに関数が入っているので、不要な行が印刷されてしまいます。
A~M列に関数がはいっており、計算されたセルの行のみ印刷するという処理が可能でしょうか?
大変申し訳ないですが、ご教授ください。★★★

補足日時:2013/10/23 13:05
    • good
    • 0

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