
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で質問しましょう!
似たような質問が見つかりました
- 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も見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
-
4
VBAコードのインデント表示
Visual Basic(VBA)
-
5
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
6
VBA初心者です。次のVBAコードで、17行目を削除したいのですがうまく動きません 改善策を教えてく
Visual Basic(VBA)
-
7
[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-
8
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
9
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
10
エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
11
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
12
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
13
ExcelVBA修正のお願い
Visual Basic(VBA)
-
14
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
15
Vba ファイル書き込み時に書き込みエラーを回避する方法を教えてください
Visual Basic(VBA)
-
16
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
17
VBAの間違い教えて下さい
Visual Basic(VBA)
-
18
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
19
【VBA】値を変更しながら連続でPDFを作成し,それらに印刷設定をした状態で結合するコード
Visual Basic(VBA)
-
20
VBA 入力箇所指定方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの「To」という語句について
-
エクセルのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでFOR NEXT分を Application...
-
算術演算子「¥」の意味について
-
[VB.net] ボタン(Flat)のEnable...
-
VBAでユーザーフォームを指定回...
-
VBAから書き込んだ条件付き初期...
-
Excel VBAについて。こんな動作...
-
マクロVBAです。 どなたかコー...
-
質問58753 このコードでうまく...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
Excel マクロについて詳しい方...
-
以下のプログラムの実行結果は...
-
VBA Application.Matchについて...
-
2つのマクロでチェックボックス...
-
VBAについてです。 どなたかご...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.net 文字列から日付型へ変更...
-
VBA 最終行の取得がうまくいか...
-
VBAでエクセルのテキストデータ...
-
【ExcelVBA】5万行以上のデー...
-
VBAについてです。 データのチ...
-
エクセルVBAで在庫の組み換え処...
-
VBAから書き込んだ条件付き初期...
-
エクセルのVBAコードについて教...
-
VBAでユーザーフォームを指定回...
-
エクセルのVBAについて教えてく...
-
vbaマクロについて
-
ExcelのVBAコードについて教え...
-
【VBA】 結合セルに複数画像と...
-
WindowsのOutlook を VBA から...
-
質問58753 このコードでうまく...
-
ExcelのVBAコードについて教え...
-
Excel VBAについて。こんな動作...
-
[Excel VBA]特定の条件で文字を...
-
[VB.net] ボタン(Flat)のEnable...
-
ExcelからVisual Basicを開くと...
おすすめ情報
②について、読み返してから伝わりにくい表現だったかもと思った為、補足致します。
A列に1と入っている場合のみ、その入っている行をコピペ印刷したいです。
例えば全体的な行数としては10行あったとしても、A3・A5・A8にしか1が入っていなければコピペ印刷するのは3・5・8の行のみで良いです。