- ベストアンサー
EXCEL VBA----ヘッダーの設定
ヘッダーにセルA5の値を表示させたい時は ActiveSheet.PageSetup.LeftHeader = Range("A5") でいいと思うのですが、 複数ページあり、ページ番号のようにページごとに違うヘッダーの値を表示させることはできますでしょうか? 行ないたいのは、 1ページ目→A5の値 2ページ目が8行目で始まる場合→A12の値(ページ先頭行から5行目) 3ページ目が15行目で始まる場合→A19の値(ページ先頭行から5行目) ・ ・ ・ 総ページ数は一定ではありません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
fk_sapさん、こんにちは。Wendy02です。 水平ページブレイクから取ればよいのですが、ページブレークは、VBAでは、脆弱なのですね。Ver4マクロ関数を使わないでもできるのですが、やはり、直接アプリケーションから情報を取る関数には敵いません。そこで、私は、以下のようなコードにしてみました。試してみてください。 Option Explicit Sub EachPageHeaderChange() Dim lngTotalPage As Long Dim lngPageNumber As Long Dim i As Long With ActiveSheet On Error Resume Next lngTotalPage = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))") For i = 1 To lngTotalPage If i = 1 Then .PageSetup.LeftHeader = .Range("A5").Value Else lngPageNumber = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1, " & i - 1 & ")") .PageSetup.LeftHeader = .Cells(lngPageNumber + 4, 1).Value End If .PrintOut From:=i, To:=i ', Preview:=True ''プレビュー用 Next End With End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です、 プレビュー画面で、試してみれば分るはずですが、 ("INDEX(GET.DOCUMENT(64)),1, " & i - 1 ) GET.DOCUMENT(64)で、特殊な配列でページごとの改ページ行が取得できています。それを、Index関数で取り出して、lngPageNumber に与えています。 >各ページの開始行+4行目のデータを持って来たいのです .PageSetup.LeftHeader = .Cells(lngPageNumber + 4, 1).Value lngPageNumberは、例えば、2ページ目の始りまが、55行目だとすれば、A59がヘッダーになるのですが。これは、手動改ページでも同じように働きます。
お礼
Wendy02さん、こんにちは! すみません!私のコードの手直しの間違いでした。 それと、prevew:=trueをアクティブにしていなかったので 最後にプレビューを見て、すべて最終ページと同じヘッダーになっていたことで、おかしいと思ってしまっていました。 1ページごとに設定し、印刷して行くと言う形になっていたんですね。 2度もお手をわずらわせてしまって、申し訳ありませんでした。 Wendy02さんの手にかかったら、私では絶対不可能だと思えるようなことも、こんなに簡単にできてしまうんですね。 本当に助かりました。ありがとうございました!!!
- popesyu
- ベストアンサー率36% (1782/4883)
ヘッダーの設定は全ページに適用されますので、1頁ずつばらばらに印刷すれば良いかと思います。 要はコードの順番の問題となるわけで。 まず印刷ページ数を総カウント。 ※印刷ページをカウントする簡単マクロ ※Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") あとはそのページ数にあわせて場合分けで一つ一つ設定するしかないでしょう。
お礼
早速ご回答ありがとうございました。 「印刷ページをカウントする簡単マクロ」勉強になりました。 でも、場合分けで一つ一つ設定する方法が思いつかなくて・・・ もう少し勉強してみます。 ありがとうございました!
補足
Wendy02さん! 私なんかのために、こんなすごいコードを考えて下さり、本当にありがとうございます! 私のレベルでは、このコードの意味も詳しくまでは理解できでいないので、少し教えて頂きたいのですが これは、2ページ目以降はページ数+4行目のデータ 例えば、2ページ目ならA6(2+4行目)のデータを 3ページ目ならA7(3+4行目)のデータを… 言う意味でよろしいでしょうか? もしそうであれば、私の説明不足ですみません。 再度説明させて頂きますと、 各ページの開始行+4行目のデータを持って来たいのです。。。 ご確認をお願いしてもよろしいでしょうか? もしWendy02さんが、私の意図通りに作成して下さっているのであれば、ごめんなさい。 実例用に少しコードを変えてみたので、その間違いかもしれません。もう1度試してみます。