リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。
リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように
したいです。
例)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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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
' ' =================================
No.2
- 回答日時:
こんにちは。
やりたいことは、こんなことでしょうか。
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行分のデータをコピーする作業もループにした方が、プログラムがシンプルになりますね。
No.1
- 回答日時:
こんにちは。
画像、確認しました。
両シートの配置については、
ほぼ前スレでの想定通りでしたし、ご提示のコードから読み取れる内容でした。
・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列に関数がはいっており、計算されたセルの行のみ印刷するという処理が可能でしょうか?
大変申し訳ないですが、ご教授ください。★★★
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
TODAY()で設定したセルの日付...
-
【Excel】指定したセルの名前で...
-
Excel VBAでいくつか質問があり...
-
”戻り値”が変化したときに、マ...
-
Excel vbaで特定の文字以外が入...
-
特定行の色を変えたい(FlexGrid)
-
Excelのプルダウンで2列分の情...
-
Excelで指定した日付から過去の...
-
VBからEXCELのセルの値を取得す...
-
Excel VBA マクロ ある列の最終...
-
指定した条件で行セルを非表示...
-
DataGridViewの各セル幅を自由...
-
Excel VBAで、 ヘッダーへのセ...
-
数字でピラミッドを出力させる...
-
【Excel VBA】セルの色によって...
-
EXCELで変数をペーストしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
VBAの計算で@が出てしまう件
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
VBA ユーザーフォーム ボタンク...
-
VBAでセルをクリックする回...
-
Excel VBA、 別ブックの最終行...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
-
VBAを使用した時間管理
-
”戻り値”が変化したときに、マ...
-
Sub 要具ライフ() ActiveSheet....
おすすめ情報