• ベストアンサー

EXCEL VBA----ヘッダーの設定

ヘッダーにセルA5の値を表示させたい時は ActiveSheet.PageSetup.LeftHeader = Range("A5") でいいと思うのですが、 複数ページあり、ページ番号のようにページごとに違うヘッダーの値を表示させることはできますでしょうか? 行ないたいのは、 1ページ目→A5の値 2ページ目が8行目で始まる場合→A12の値(ページ先頭行から5行目) 3ページ目が15行目で始まる場合→A19の値(ページ先頭行から5行目) ・ ・ ・ 総ページ数は一定ではありません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

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  

fk_sap
質問者

補足

Wendy02さん! 私なんかのために、こんなすごいコードを考えて下さり、本当にありがとうございます! 私のレベルでは、このコードの意味も詳しくまでは理解できでいないので、少し教えて頂きたいのですが これは、2ページ目以降はページ数+4行目のデータ 例えば、2ページ目ならA6(2+4行目)のデータを 3ページ目ならA7(3+4行目)のデータを… 言う意味でよろしいでしょうか? もしそうであれば、私の説明不足ですみません。 再度説明させて頂きますと、 各ページの開始行+4行目のデータを持って来たいのです。。。 ご確認をお願いしてもよろしいでしょうか? もしWendy02さんが、私の意図通りに作成して下さっているのであれば、ごめんなさい。 実例用に少しコードを変えてみたので、その間違いかもしれません。もう1度試してみます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。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がヘッダーになるのですが。これは、手動改ページでも同じように働きます。

fk_sap
質問者

お礼

Wendy02さん、こんにちは! すみません!私のコードの手直しの間違いでした。 それと、prevew:=trueをアクティブにしていなかったので 最後にプレビューを見て、すべて最終ページと同じヘッダーになっていたことで、おかしいと思ってしまっていました。 1ページごとに設定し、印刷して行くと言う形になっていたんですね。 2度もお手をわずらわせてしまって、申し訳ありませんでした。 Wendy02さんの手にかかったら、私では絶対不可能だと思えるようなことも、こんなに簡単にできてしまうんですね。 本当に助かりました。ありがとうございました!!!

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

ヘッダーの設定は全ページに適用されますので、1頁ずつばらばらに印刷すれば良いかと思います。 要はコードの順番の問題となるわけで。 まず印刷ページ数を総カウント。 ※印刷ページをカウントする簡単マクロ ※Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") あとはそのページ数にあわせて場合分けで一つ一つ設定するしかないでしょう。

fk_sap
質問者

お礼

早速ご回答ありがとうございました。 「印刷ページをカウントする簡単マクロ」勉強になりました。 でも、場合分けで一つ一つ設定する方法が思いつかなくて・・・ もう少し勉強してみます。 ありがとうございました!