
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.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で処理したら出来たので解決致しました。
この度は丁寧でわかりやすいご回答を、本当にありがとうございました!
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
-
4
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
5
VBA 2次元配列の出力
Visual Basic(VBA)
-
6
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
7
VBA Application.Matchについての質問です
Visual Basic(VBA)
-
8
VBAについて教えて下さい
Visual Basic(VBA)
-
9
エクセルで、数字ではない値(文字列)が入った場合の計算式を教えてください。
Excel(エクセル)
-
10
修正依頼:【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
11
不要項目の行削除方法について
Visual Basic(VBA)
-
12
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
13
VBAでエクセルのテキストデータをクリップボードに格納したい。
Visual Basic(VBA)
-
14
vbaマクロについて
Visual Basic(VBA)
-
15
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
16
VBA 同じフォルダ内のすべてのファイルに同じセルをペーストしたい
Visual Basic(VBA)
-
17
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
18
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
19
ダブルクリックで貼り付けた画像からリンクのみ削除し、画像を残したい。
Visual Basic(VBA)
-
20
毎回変わる範囲を検索し、コピペするマクロについてご教示ください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
改行文字「vbCrLf」とは
-
【マクロ】開いているブックの...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
以下のプログラムの実行結果は...
-
【ExcelVBA】値を変更しながら...
-
Vba 型が一致しません(エラー1...
-
Excelのマクロについて教えてく...
-
vbaにてseleniumを使用したedge...
-
Excel 範囲指定スクショについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報
②について、読み返してから伝わりにくい表現だったかもと思った為、補足致します。
A列に1と入っている場合のみ、その入っている行をコピペ印刷したいです。
例えば全体的な行数としては10行あったとしても、A3・A5・A8にしか1が入っていなければコピペ印刷するのは3・5・8の行のみで良いです。