『ヘッダーを可変値(列を指定したい)にする方法はありますか?』(mia) お世話になります。 シートを印刷する際のヘッダーとして、A列を指定する方法はありますでしょうか? (特定のセルの値を表示するのではなく、列ごと指定したいのです) 下記のような表があるとして、印刷する際にはB列〜C列を印刷範囲とし、 A列はヘッダーとして出力したいのです。 ※A列の値が変わるごとに改ページが挿入されるようvbaで設定しています    A    B    C 1 野菜 キャベツ 群馬 2 野菜 ピーマン 高知 3 果物 りんご  青森 完成イメージは下記のように出力されてほしい。 −−−−−−−−−−−−−− 野菜 キャベツ 群馬 ピーマン 高知 −−−−−−−−−−−−−− 果物 りんご 青森 −−−−−−−−−−−−−− 最終的には全ての列をA4縦1ページに収めて出力したいのですが、 L列まであるので非常に小さくなってしまいます。 そもそもA列の値が変わる毎に改ページを挿入する構造のため、 識別要素であるA列は頭にひとつ出てくれれば印刷範囲に含めなくて済むという観点です。 このような荒業をvbaで行うことは可能でしょうか? ご教示よろしくお願いいたします。 < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- あちらで、意向を確認後、コード案を提案しようと思っていたんですが お気に触りましたか? (β) 2015/05/08(金) 13:43 ---- あちらでアップ予定していたコードです。 元シート(以下コードでは"Sheet1")はさわらず、印刷用シート(以下コードでは"Sheet2")に整形したものをおいて そこで印刷をかけます。(コードでは PrintOut を PrintPreview にしてあります) Sub Test() Dim shP As Worksheet Dim shM As Worksheet Dim wkR As Range Dim c As Range Dim f As Long Dim t As Long Application.ScreenUpdating = False Set shM = Sheets("Sheet1") '元シート Set shP = Sheets("Sheet2") '印刷用シート '以下の設定コードは、あらかじめ手動で設定してあれば不要 With shP.PageSetup .PrintTitleRows = "$1:$2" .PrintTitleColumns = "" .FitToPagesWide = 1 .FitToPagesTall = False End With With shM.Range("A1").CurrentRegion Set wkR = .Offset(, 2).Columns(.Columns.Count).Cells(1) .Columns("A").Copy wkR wkR.CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo For Each c In wkR.CurrentRegion f = .Columns("A").Find(What:=c.Value, LookAt:=xlWhole, SearchDirection:=xlNext, After:=.Columns("A").Cells(.Rows.Count)).Row t = .Columns("A").Find(What:=c.Value, LookAt:=xlWhole, SearchDirection:=xlPrevious, After:=.Cells(1)).Row shP.UsedRange.ClearContents shP.Range("A1").Value = c.Value .Rows(f & ":" & t).Offset(, 1).Copy shP.Range("A3") shP.PrintPreview Next End With wkR.CurrentRegion.Clear End Sub (β) 2015/05/08(金) 15:00 ---- ↑ すでにページ替えが挿入済みでしたね。であれば、それを利用することでアップしたコードでやっている重複の削除とFind検索は不要になりますね。 、また、アップしたコードはSheet2に印刷イメージを作成していますが、元シートのみで(内容を変更しないで)処理することもできます。 ただし、いずれにしても、タイトル項目ごとに(裏側で)印刷をわけることにはかわりないですが。 (β) 2015/05/08(金) 15:56 ---- すでにA列の値がかわるところにページブレークが挿入されているという前提で、作業シートを使わず、元シートのみで処理します。 なお、シート横1ページで印刷というページ設定は、事前に行われているという前提です。 Sub Test2() Dim shM As Worksheet Dim hpb As HPageBreak Dim f As Long Dim t As Long Application.ScreenUpdating = False Set shM = Sheets("Sheet1") '元シート f = 1 '念のため最終行の下にページブレークを挿入。 shM.HPageBreaks.Add Before:=shM.Range("A" & Rows.Count).End(xlUp).Offset(1) For Each hpb In shM.HPageBreaks If hpb.Type = xlPageBreakManual Then If Not IsEmpty(shM.Cells(f, "A")) Then t = hpb.Location.Offset(-1).Row '印刷領域の設定 shM.PageSetup.PrintArea = "$B$" & f & ":$L$" & t 'ヘッダー設定 shM.PageSetup.LeftHeader = shM.Cells(f, "A").Value & Chr(10) & " " '印刷実行 shM.PrintPreview End If f = hpb.Location.Row End If Next shM.PageSetup.PrintArea = "" shM.PageSetup.LeftHeader = "" End Sub (β) 2015/05/08(金) 17:48 ---- お世話になります。 返信遅れまして失礼しました。 ご回答頂きましてありがとうございます。 最初に頂いたものを実行してみましたところ、(完全に記載し忘れた自分のミスなのですが) 先頭にタイトル行行があるため、それが消えてしまいました。 印刷設定で全てのページにタイトル行を印刷するように設定しており、 (vba制御ではなく、もともとExcelにある機能です) 頂いたコードを実行すると、この設定が飛んでしまうようです。 ↓正確には下記のような表でした↓   A    B    C    D   ・・・以降L列まで続く 1 番号  名前  値1  値2  2 000  ●●●  000  000 3 000  ▲▲▲  001  001 4 001  ■■■  002  002 とはいえヒントを頂きましたので、こちらを参考にさせて頂きます。 ------------------------------------------------------- ※蛇足 べつに気に障るとか腹が立つという類のものではないのですが、 もともとvba板なので質問の内容は自ずとvbaに限られるわけで、 わざわざ「vbaでどうやるのか教えてください」と書く必要はないのでは… と思い割愛しました。 そもそもvba板を利用するような人間なら、ある程度はExcelに精通してるでしょうし、 私が質問しているヘッダの設定云々もそこまで難解な機能ではないので、 簡単に内容を書けば伝わるかな、と思っておりました。 なんというか…正直、自分では思いもつかない伝わり方をしていたことに、 やや驚いた感すらありました。 顔の見えない相手との意思疎通は難しいな…と改めて痛感しました。。 (mia) 2015/05/11(月) 10:13 ---- >もともとvba板なので質問の内容は自ずとvbaに限られるわけで そうなんですが、あそこの板(に限りませんが)で、最近、板間違いで、関数や一般機能の質問を される人が少なくなかったので、確認させていただいたものです。 (β) 2015/05/11(月) 15:03 ---- こんにちは。 >そもそもvba板を利用するような人間なら、ある程度はExcelに精通してるでしょうし、 >私が質問しているヘッダの設定云々もそこまで難解な機能ではないので、 >簡単に内容を書けば伝わるかな、と思っておりました。 ああ、、、でも、質問されるかたのなかにはそういう知識のないかたもいらっしゃるんですよ。 本当にいらっしゃるんです。なので、「これくらい知ってて当然」というつもりで回答すると、 そういうかたは辛くなっちゃうんです。 また、知ってるけどこのファイルではヘッダーは使わないという例もあります。 1行目から印刷するがヘッダーは3〜5行目、という例を見たこともあります。 一概には言えないのです。 伝える必要のあることは「これでもか」ってくらい説明してくださいな。 ( 佳 ) 2015/05/11(月) 21:20 ---- ども^^ >値が変わるごとに改ページを挿入する機能なんてありませんから、 なくはないですね。 集計機能(今はなんていうんだっけ?)で、改ページを挿入できます。(並べ替えの必要あり) あと、ピボットテーブルでも、希望に近い出力が可能です。 (ただし出力の切り替えは個々なので、手動で行うか、マクロで行うかの必要あり) VBAに精通していても、エクセルに詳しいとも限らないですね。 VBAに精通していたら、エクセルの機能に代わるものを自由自在に作れてしまうのですから。 (まっつわん) 2015/05/13(水) 14:39