• ベストアンサー

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
質問者

お礼

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

関連するQ&A

  • エクセルVBA

    エクセル2003です エクセルの印刷レビュ-までのマクロをおしえてください *A列からQ列までで行は1~150で伸縮します  最終行をA5より下のA列のセルに値が連続で入っている最後が最終印刷範囲行とします *罫線ありです *1ページを30行とします *2ページ目からの先頭行に(A7:Q7)を印刷に入れたい *ヘッダーは右上に日付 *フッダーは右下にページ 現状では罫線で最終行が決まってしまいます 現状コード Sub 印刷() With ActiveSheet.PageSetup .PrintTitleRows = "$7:$7" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = Range("A1:Q1").Resize(Range("A" & Rows.Count).End(xlUp).Row).Address With ActiveSheet.PageSetup .RightHeader = "&""MS Pゴシック,太字 斜体""&14&D" .RightFooter = "&""MS Pゴシック,太字 斜体""&14&P/&N" .PaperSize = xlPaperA4 .Zoom = 75 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview End Sub 罫線ではなくA列のセルに文字列等が入っている行を最終行にしたいのですが 教えて頂けないでしょうか? 出来れば説明付きでよろしくお願いします

  • エクセルのヘッダーのことで質問です。

    このサイトで学習して、とあるエクセルシートに"A1"セルの内容を そのまま書き込むマクロを造りました。 With ActiveSheet.PageSetup 'セルA1の値をへッター左にセットする LeftHeader = Range("A1") End With ですが、ここに"A1"と"B1"をセットすると言うふうにするには? あるいは"A1"セルと定数”御中”を一緒にセットさせるにはどのように記述したらよいでしょうか。 よろしくお願いします。

  • マクロでの印刷設定について教えてください。

    お世話になります。 エクセルマクロでヘッダ-の値を各対応セル値を置くために下記のようにしてしております。  ActiveSheet.PageSetup.LeftHeader = Range("A5").Value これを 文字の大きさを 9 色を赤 文字を太字 に装飾したいのですが、どのような形にすれば宜しいかを お教えください。 丸投げの形で申し訳ございません。

  • VBAにてヘッダー&フッダーの設定のしかた

    vbaにてヘッダー&フッダーを設定したいと思っています。 With ActiveSheet.PageSetup ・・・・・ ・・・・・ End With みたいな感じで設定したいと思っているのですが、 ページが複数になった時、ヘッダーは1枚目だけ、 フッダーは2枚目だけに表示するようにしたいのですが、 可能でしょうか? EXCEL2000です。 宜しくお願いします。

  • エクセル ヘッダーにセルの値について教えて下さい

    エクセルで見積書を作成しています。 シート1を表紙、シート2を内訳書としています。 シート1のC1セルに打ち込んだ物件名をシート2のヘッダーになるよう設定したいのですが、 Private Sub Workbook_BeforePrint(Cancel As Boolean)  ActiveSheet.PageSetup.leftheader = Range("sheet1!C1").Value End Sub VBEのThisWorkbookに上記を貼付けたところシート2のヘッダーに物件名を表示できましたが、シート1のヘッダーにも出てしまいます。 シート2にのみ表示させる方法ってあるのでしょうか?

  • VBAでのヘッダー操作について

    ただいまVBAの勉強中なのですが、 13ページあるワークシートに対してヘッダーにページ番号を振るマクロを作成しようとしております。 ページ番号は以下のような3桁表示にしたいのですがうまくいきません。 001,002,・・・009,010,012,013 With Worksheets("表1").PageSetup .LeftHeader = Format$("&P", "000") End With このようにプログラムしたのですが、結果は 1,2,・・・9,10,11,12,13 となってしまいます。 どのようにすれば3桁表示になってくれるのでしょうか?

  • エクセルVBA

    エクセル2003です エクセルの印刷するマクロをおしえてください *A列からQ列までで行は1~300で伸縮します  最終行をA5より下のA列のセルに値が連続で入っている最後が最終印刷範囲行とします *罫線ありです *1ページを30行とします *2ページ目からの先頭行に(A4:Q4)を印刷に入れたい マクロで印刷設定をした事がないのでさっぱりわかりません *ヘッダーとフッダーも可能でしょうか? 出来れば説明付きでよろしくお願いします

  • エクセルのヘッダーを変数で指定したい

    マクロで、エクセルのヘッダー部に日付を表示させたいのですが、当日日付を表示させるのではなく、任意の日付を表示させようと考えています。 ヘッダー部のマクロ With ActiveSheet.PageSetup   .RightHeader = "&""MS 明朝,太字""&12" & w_date & "現在" End With と記述し、実行結果を印刷プレビューで見ると、ページいっぱいに日付が表示されてしまいます。 文字の大きさを指定しない場合の記述 With ActiveSheet.PageSetup   .RightHeader = "&""MS 明朝,太字""" & w_date & "現在" End With これだと、正しく右側に"yyyy/mm/dd現在"と表示されます。 ヘッダー部の右側に文字の大きさを指定した上で、正しく表示させるにはどのように記述すればいいでしょうか? ご教授、よろしくお願いします。

  • Excel ヘッダーのフォントの編集

    お世話になってます。マクロ初心者です。 A37に文字が入っていて、それをヘッダーにしたいと考えています。 Sub Header() With ActiveSheet.PageSetup .CenterHeader = Range("A37").Value End Sub とすることで、文字を入れることはできました。 後はフォントをHGP創英角ポップ体,ヘビー、フォントサイズを36にしたいのですが、 ネットで探してもセルの番号と組み合わせた例がなくて、うまくいきません。 よろしくお願いします。 ちなみに、A37には=&B35&A36 が入っていて、B35には=TEXT(A35,"[DBNum3]m")、 A35には2012/1/1など日付が入ります。A36には文字で月分予定と入ってます。 初めはヘッダーを直接編集したのですが、うまくいかずマクロでやってます。

  • Excel2003 VBAで印刷 セル指定

    よろしくお願いします。 ボタン5をクリックしてある範囲を印刷したいのですが、私が知っているものはセル指定でActiveSheet.PageSetup.PrintArea = Range("A90:K130") であれが印刷可能なのですが最後の行までにしたいのですがどうしてもうまくいきません。 ActiveSheet.PageSetup.PrintArea = Range(Cells(90, 1), Cells(r, 11)) それと同時に11列全部(文字は小さくてもいいのですが)一枚に印刷したのですが よろしくお願いします。 Private Sub CommandButton5_Click() res = MsgBox("決済記録を印刷します", vbYesNo + vbQuestion) If res = vbYes Then r = Range("A65536").End(xlUp).Row + 1 'Range(Cells(90,1),Cells(r,11)) '印刷したい範囲 ActiveSheet.PageSetup.PrintArea = Range("A90:K130") ActiveSheet.PrintOut preview:=True End If End Sub

専門家に質問してみよう