Excel マクロについて詳しい方、ご教示ください。
『行数が毎回変わる元データの、A列に「1」と入っている行のみ、先データの各セルにコピペし印刷したい』のですが、うまくいかず行き詰まっています…。
どのようにすればいいでしょうか?
①元データのタイトル行を除きたい
②A列に「1」と入っている場合のみコピペ印刷したい
以上がメインの悩みで、以下はサブ的な悩みなのですが、
③元データ、先データのセル共に連続していない為、全箇所1個1個指定しているが可能ならコンパクトしたい
④元データシリアル値→先データ元号の数字のみの表記にしたい
よろしくお願いいたします。
ーー以下マクローー
Sub テスト()
Dim lastRow As Long
Dim i As Long
'データのA列の最終行取得
lastRow = Sheets("元データ").Range("A" & Rows.Count).End(xlUp).Row
'1行目からlastRow行目まで繰り返し
For i = 1 To lastRow
'データをセット
Sheets("先データ").Range("EA2").Value = Sheets("元データ").Range("B" & i).Value
Sheets("先データ").Range("EL2").Value = Sheets("元データ").Range("C" & i).Value
Sheets("先データ").Range("EW2").Value = Sheets("元データ").Range("D" & i).Value
※計60箇所ある為省略
'印刷プレビュー
Sheets("先データ").PrintPreview
Next
End Sub
No.2
- 回答日時:
No1です。
連投失礼。
③に関しては、もう少し簡単な方法を思いつきました。
一回の印刷に必要なデータは、元データの1行分だと思いますので、先データの印刷対象外の空き行(例えば100行目)を利用する方法です。
先データの値が可変のセルには(例えばEA2セル)
=B100
のように、100行目を参照する式をあらかじめセットしておきます。
このような仕組みにしておくことで、印刷対象の行の値を、先データの100行目にまとめてセットすれば、自動的に印刷内容に反映できることになります。
この方式であれば、個々に値を転記する必要はなくなりますので、マクロに記述する内容は、1行分をまとめて転記するだけにできます。
Dim rw As Long
With Sheets("元データ")
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
'A列の値をチェック
If .Cells(rw, 1).Value = 1 Then
'データをセット
Sheets("先データ").Rows(100).Value = .Rows(rw).Value
'印刷プレビュー
sht.PrintPreview
End If
Next rw
End With

No.1ベストアンサー
- 回答日時:
こんにちは
>①元データのタイトル行を除きたい
→ タイトル行が1行目なら、2行目から処理を行えばよいです。
1行目のままでも、タイトル行のA列が1でなければ、②の処理で
省かれることになります
>②A列に「1」と入っている場合のみコピペ印刷したい
→ 1行ずつ処理しているのですから、A列の値を読んで1でなければ
処理をスキップすれば良いでしょう
>③全箇所1個1個指定しているが可能ならコンパクトしたい
→ セル位置を配列等にセットしておいて、それを参照しながらループ
するような仕組みにすれば、繰り返しで処理にすることが可能です。
>④元データシリアル値→先データ元号の数字のみの表記にしたい
→ セル位置が固定なのか、不定なのかによっても異なります。
IsDate関数で日付かどうかの判断が可能と思いますので、セル位置が
不定の場合は、各セルの処理時にチェックします。
https://learn.microsoft.com/ja-jp/office/vba/lan …
位置固定の場合は、そのセルだけ処理すれば良いですね。
値そのものを変えてしまう方法と、値はそのままコピペしておいて
先データの表示書式を変更する方法とが考えられます。
(印刷するだけなら、後者で良さそうに思います)
位置固定の場合、予め先データの書式設定をしておくことで、
マクロでの処理は不要にできるでしょう。
なお、ご質問にはありませんけれど、シート名を毎回記述するのは煩雑なので、WIth構文を利用したり、シートを一旦変数に代入しておいて利用するなどとしておく方がコードが短くなり視認性が良くなると思います。
上記を反映すると、全体的に以下のようなイメージにできると思います。
(④に関しては内容がよくわからないので、省きました)
Dim sht As Worksheet, pos
Dim rw As Long, n As Long
pos = Split("EA2 EL2 EW2"," ")
Set sht = Sheets("先データ")
With Sheets("元データ")
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
'A列の値をチェック
If .Cells(rw, 1).Value = 1 Then
'データをセット
For n = 0 to 2 ' 例示の範囲のみ繰返し(=3箇所)
sht.Range(pos(n)).Value = .Cells(rw, n + 2).Value
Next n
'印刷プレビュー
sht.PrintPreview
End If
Next rw
End With

説明を含む丁寧なご回答ありがとうございます!
①に関してはそりゃそうだ…となりまして、間抜けな質問してしまったことが恥ずかしい限りです…!
また、ループでの処理やシート名をwith構文使うなどコードが短くなる知恵をくださりとても為になりました。
追記頂いた空き行を利用する方法も、今回はこれから各セルに入れてく作業するのは手間だったのでやりませんでしたが、そもそも最初からそのようにしていればと発想力に感動しました。
④に関しても、formatで処理したら出来たので解決致しました。
この度は丁寧でわかりやすいご回答を、本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】値を変更しながら連続でPDFを作成し,それらを結合した状態で出力するコード 3 2024/05/20 10:43
- Visual Basic(VBA) A2~I4179列にあるリストを支社名ごとにシートに分けたいです。 各シート名はA列にある支社名とし 3 2023/08/29 16:46
- Visual Basic(VBA) クリップボードに貼付している文字列が、マクロで別ブックへ転記すると、消えてしまう 1 2023/10/15 13:36
- Excel(エクセル) 【マクロ】VLOOKUPにて参照元にデータが無い場合【該当なし】と表示したい 3 2024/06/08 16:45
- Visual Basic(VBA) 【ExcelVBA】値を変更しながら連続でPDFを作成し,ファイル名を自動で付して出力するコード 6 2024/07/16 17:12
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Excel(エクセル) 【マクロ】book1からbook2への適切な転記が出来ない件 2 2023/11/08 17:23
- Visual Basic(VBA) 【補足欄が足りなかったため、こちらで再質問させていただきます。】 Excelの転記マクロについて、教 4 2023/09/27 08:51
- Visual Basic(VBA) VBA listBoxについて 2 2024/03/26 16:14
- Excel(エクセル) 【マクロ】転記ツール。転記先にデータがある場合、上書きするか消すか質問をして欲しい 2 2023/10/29 22:52
このQ&Aを見た人はこんなQ&Aも見ています
-


【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-


[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-


VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
-
4

エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
5

【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
6

エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
7

Visualbasicの現状について教えてください
Visual Basic(VBA)
-
8

VBAのエラー表示の対処法について
Visual Basic(VBA)
-
9

VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
10

【VBA】値を変更しながら連続でPDFを作成し,それらに印刷設定をした状態で結合するコード
Visual Basic(VBA)
-
11

Excelのマクロについて教えてください。
Visual Basic(VBA)
-
12

VBA 2次元配列の出力
Visual Basic(VBA)
-
13

修正依頼:【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
14

VBA Application.Matchについての質問です
Visual Basic(VBA)
-
15

VBAについて教えて下さい
Visual Basic(VBA)
-
16

エクセルで、数字ではない値(文字列)が入った場合の計算式を教えてください。
Excel(エクセル)
-
17

不要項目の行削除方法について
Visual Basic(VBA)
-
18

VBA 同じフォルダ内のすべてのファイルに同じセルをペーストしたい
Visual Basic(VBA)
-
19

VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
20

Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】オートフィルター を...
-
Vba Array関数について教えてく...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】値を変更しながら...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBAでセルの書式を変えずに文字...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
-
VBAで特定の文字が入った行をコ...
-
WindowsのOutlook を VBA から...
-
Excel 範囲指定スクショについ...
-
【マクロ】シートの変数へ入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報










②について、読み返してから伝わりにくい表現だったかもと思った為、補足致します。
A列に1と入っている場合のみ、その入っている行をコピペ印刷したいです。
例えば全体的な行数としては10行あったとしても、A3・A5・A8にしか1が入っていなければコピペ印刷するのは3・5・8の行のみで良いです。