QAコラム第01弾配信中!

添付画像の表を印刷する際に、
【1ページ目】
1~3行がタイトル
4~49行がデータ

【2ページ目以降】
3行目だけがタイトル
50~95行がデータ

【最終ページ】
3行目だけがタイトル
データ行は月ごとに変わります。

上記にて印刷をしたいです。


これを設定するマクロコードを教えていただきたいのですが。
情報がたりなければご指摘ください。
よろしくお願いします。

「マクロ 印刷タイトルを2ページ目以降変え」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>4~49行がデータ


>50~95行がデータ
この行数、つまり45行入るかどうかは、このマクロは考慮されておりません。最初、プレビューから、マージンなどで、調整して納まるようにしてください。

また、一応、垂直改行は考慮はしていますが、1ページに収まらない右にはみ出た分に関しては、処理できません。
もし、とのようなスタイルでも、希望の行数にするなら、手動改ページを入れるなど、別のマクロが必要です。

'//
Sub PrintOutMacro()
 Dim i As Long
 Dim sPrintArea As String
 Dim HPage As Long
 Dim VPage As Long
 Dim PageTotal As Long
 Dim FirstPage As Integer
 Dim LastRow As Long
 Dim RightCol As Long
 With ActiveSheet
  '-------------------------------
  '印刷範囲再設定
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
  RightCol = Cells(4, Columns.Count).End(xlToLeft).Column
  sPrintArea = Range("A4", .Cells(LastRow, RightCol)).Address
  .PageSetup.PrintArea = sPrintArea
  '-------------------------------
  FirstPage = 1 '最初のページ
  On Error Resume Next
  'ページ数の算出
  HPage = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))") - 1
  VPage = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
  On Error GoTo 0
  PageTotal = Int(HPage * VPage) 'ページ総数
  '誤動作のための保守
  If PageTotal <= 2 Then
  If MsgBox("ページが、" & PageTotal & "枚しかありませんがよろしいですか?", _
   vbQuestion + vbOKCancel) = vbCancel Then Exit Sub
  End If
  For i = FirstPage To PageTotal
   If i = 1 Then
    .PageSetup.PrintTitleRows = "$1:$3"
   Else
    .PageSetup.PrintTitleRows = "$3:$3"
   End If
   .PrintOut From:=i, To:=i ', Preview:=True ''外すとプレビューになる
  Next i
 End With
End Sub
'///
    • good
    • 0
この回答へのお礼

WindFallerさん
回答ありがとうございました。
プレビューで確認できました。

素人なのでWeb上で検索しながらコピーしてコードを作っているのですが
たびたび壁に当たります(^^;
これでまたゴールに近づくことができました。

また質問するかと思いますのでよろしければご教授お願いします。
ありがとうございました。

お礼日時:2015/07/08 00:51

Worksheet.PrintOut メソッドは、その引数により、印刷するページを指定できます。



つまり 1 ページ目だけ印刷し、1 ~ 2 行目の値を Range.ClearContents で消し、改めて 2 ページ目以降を指定して印刷すればいいですね。その後さらに、消した文字列を同じ範囲に記入しておけばいいですね。

あるいは、あらかじめ 1 ~ 2 行目に記入しておいた IF 関数によりタイトルを表示させ、IF が参照しているスイッチとなるセルの値を書き換えると、タイトルが非表示になるようにしておいてもいいです。上と同様に、印刷するページごとにスイッチの値を上書きしていけばいいですね。

各メソッドなどについては、VBE 画面のヘルプを確認してください。
    • good
    • 0
この回答へのお礼

MarcoRossiItalyさん
回答ありがとうございました。

説明不足ですみません。
上司がエクセル上で確認するケースもあるので、印刷プレビューの時点で
1ページ目と2ページ目以降の表示を変えたかったのです。

ページ設定でタイトル行を3行目にすると表示されるのですが、50行目に
小計行があり、ページを追うごとにずれてしまい、うまく表示できませんでした。

IF関数の入れ方などもっと調べてみます。
ありがとうございました。

お礼日時:2015/07/08 00:44

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルの行タイトルを特定のページにつけたい。

エクセルで、6ページに渡って印刷されるシートがあるのですが、
今、行のタイトルを前ページに印刷されるようになっています。
これを、最後の2ページだけ、行のタイトルを表示しないようにする
方法ってありますでしょうか。
シートを分けるしかないのでしょうか。
ご回答よろしくお願いしますm( _ _ )m

Aベストアンサー

Excelを長年使っていますが、私の知る限り特定のページだけに行のタイトルを印刷する事は難しいと思います。

恐らく、最初の4ページと最後の2ページは表の形式が違うという事だと思いますので、最後の2ページは別シートにする事をお勧めいたします。

あるいは既に表が完成していて、行の追加などがないのであれば、行タイトルを直接ページの切れ目の部分に挿入するというローテクもできないわけではないですけどね。あまりお勧めではありません。

Q【初心者】エクセルVBAタイトル行の設定

エクセルVBAで、印刷する際のタイトル行の設定をしたいと思っています。
実際の動作は、
タイトル行にしたい箇所を選択→
マクロ実行→
選択した行が印刷する際のタイトル行になる  というものです。

行数を指定するのに変数を使用しましたが、私の書き方が悪いせいで上手くいきません。
---------------------------------------------
Sub Macro1()

'変数指定
Dim topRow As Long
Dim LastRow As Long

'選択範囲の先頭、最終行を取得
topRow = Selection.Row
LastRow = Selection.Rows(Selection.Rows.Count).Row

’印刷タイトル行を指定する
With ActiveSheet.PageSetup
.PrintTitleRows = Rows(""" & topRow & ":" & LastRow & """).Address
'↑ここが失敗しています。

   .PrintTitleColumns = ""

End With

End Sub
---------------------------------------------
.PrintTitleRows = Rows(""" & topRow & ":" & LastRow & """).Addressの箇所を
.PrintTitleRows = Rows("2:6").Address 等と数字を直接入力すれば平気なのですが、
変数に置き換えたとき、どのように記載すればよいかがわかりません。。。

エクセルVBAで、印刷する際のタイトル行の設定をしたいと思っています。
実際の動作は、
タイトル行にしたい箇所を選択→
マクロ実行→
選択した行が印刷する際のタイトル行になる  というものです。

行数を指定するのに変数を使用しましたが、私の書き方が悪いせいで上手くいきません。
---------------------------------------------
Sub Macro1()

'変数指定
Dim topRow As Long
Dim LastRow As Long

'選択範囲の先頭、最終行を取得
topRow = Selection.Row
LastRow = Selection.Rows(Selec...続きを読む

Aベストアンサー

.PrintTitleRows = Rows(""" & topRow & ":" & LastRow & """).Addressの箇所を

.PrintTitleRows = Rows(topRow & ":" & LastRow).Address
ではダメでしたか?

QEXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには

お世話になっております。
タイトルの通りの質問なのですが、
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するにはどうすればよいのでしょうか?

たとえば、A1のセルに「ABC」と入力されていたとします。
その「ABC」をヘッダーに自動的に出力できるようにしたいのです。
できればマクロは使いたくありません。

宜しくお願いします。

Aベストアンサー

「表示」メニューの「ヘッダーとフッター」では、セル参照を指定することはできません。
「行タイトル」や「列タイトル」しか使用できません。
「行タイトル」を使用するには「ファイル」メニューの「ページ設定」で「シート」タグを選択してください。
ここで「行タイトル」にA1でしたら1行目を選択すればOKです。
ただし、行丸ごとですので注意してください。

QEXCEL、マクロ-改ページ行番号の取得方法を教えてください

EXCELで作成した表を印刷したいのですが、表が縦長で複数ページにわたります。
そこで各ページの下端にそれぞれ罫線を挿入するマクロを書きたいのですが、
改ページ位置の取得方法がわかりません。各ページの上端行でも下端行でも良いので
行番号を取得する方法はないものでしょうか?

どなたかご教授願います。

マクロ全体としては下記を考えています。

1.データの下端行の取得
2.印刷範囲の設定(横1ページ×縦複数ページ)
3.最初の改ページ位置の取得
4.ページ下端セル行の下に罫線を入れる
5.次の改ページ位置の取得
6.以下、データ最下端行まで繰り返し

(各行のセルの高さは一定ではないです。)

Aベストアンサー

難しく考えず、フッターを使ったらいかがでしょう。
フッターの1行目をスペースで連打し、フォントの設定で下線を選びます。
これで下線が表示され、丁度データと境になるのではないですか?

どうしても改ページ位置取得なら、HPageBreakオブジェクトのLocationプロパティを使ってみたらどうでしょう。
HPageBreaks (HPageBreakオブジェクトのコレクション)
ActiveSheet.HPageBreaks.Count (改ページ総数)
ActiveSheet.HPageBreaks(1).Location.Row (一番目の改ページの行)
Location.Rowで改ページの行が分ります。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセル 特定のページだけ行のタイトルを印刷したくない

エクセル2003です。
印刷タイトル-行のタイトルを設定したとき、特定のページだけその行のタイトルを印刷させないことは可能でしょうか。
具体的には、行のタイトルを設定している縦長の表があります。印刷すると数ページになりまして、その表の下に脚注(数十項目)に入れてあります。表本体と脚注は改ページして有ります。
PC画面上で見るときはウインドウを分割して表本体と脚注を同時に見ていますが、印刷すると脚注のページにも表の行タイトルが印刷されてしまいます。
VBAのお世話にならずに、脚注ページだけ行タイトルを印刷しないように設定することは可能でしょうか?

Aベストアンサー

表の部分と脚注の部分を別シートにするしかないと思いますよ。

QEXCEL-VBAで印刷時のページ番号を取得したい

EXCEL97です。
ブックの目次を作るマクロを作っています。
ブック内のシート名を目次のシートに縦に並べることはできたのですが、
その横にセットしたページ数をどうやって取得するか悩んでいます。
過去ログも見たのですがHPageBreaks.Countでは
プレビューでは1ページしかないはずのシートで
1が返ってきたりしてどうもうまくいきません。
良い方法があればどなたか教えてもらえないでしょうか。

Aベストアンサー

Application.ExecuteExcel4Macro("get.document(50)")
で、印刷ページ数が取得出来ます。

http://www2.odn.ne.jp/excel/waza/print.html

Q改ページの2ページ目の作り方

エクセルで、改ページプレビューを押すと、
青い線が出てきて印刷範囲を指定できますよね?
あれでA4一枚で印刷できる大きさなんですけど
2枚に分けたい時はどうすればいいのでしょうか?
増やそうとしても一枚目の範囲が大きくなるだけ
なんです。
質問の仕方がうまくなくて申し訳ないです。

Aベストアンサー

上下に分けたい場合、分割したい行の行番号を右クリックして改ページ挿入。
左右に分けたい場合、分割したい列の列番号を右クリックして改ページ挿入。

Qエクセルで、ヘッダーに特定セル内容を指定して印刷したい

ずばり、質問タイトルそのままです。
ヘッダー又はフッターに日時やファイル名・シート名は指定出来ますが、
そのシートのセルに入力されている内容を指定することは出来ますか?
初心者なので、手順も細かく指導頂けるとありがたいです。

Aベストアンサー

これはマクロを使わないとできませんね。
Alt+F11でVBAの画面を開き、左側のThisWorkBookというところをダブルクリックしてください。

右側の画面に以下のマクロをコピーして貼りつけてください。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
 With ActiveSheet
  .PageSetup.LeftHeader = .Range("A1").Text
 End With
End Sub

この例では左のヘッダーにセルA1の内容をセットしています。
マクロ中のセル番地はA1でなく実際のセルに置きかえてください。
また、LeftHeaderの部分も以下にしたがって適切なものに置きかえてください。

左ヘッダー LeftHeader
中ヘッダー CenterHeader
右ヘッダー RightHeader
左フッター LeftFooter
中フッター CenterFooter
右フッター RightFooter

マクロを記述したらその画面は閉じてしまってかまいません。
これで印刷時(または印刷プレビュー時)に、ヘッダーやフッターに指定したセルの内容が反映されます。

なお、マクロを設定した後、一度保存してExcelを終了し、もう一度ブックを開き直さないとマクロが有効にならないかもしれません。(なぜだかわからないですが、私が試したらそういう現象が起きたので、念のため)

これはマクロを使わないとできませんね。
Alt+F11でVBAの画面を開き、左側のThisWorkBookというところをダブルクリックしてください。

右側の画面に以下のマクロをコピーして貼りつけてください。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
 With ActiveSheet
  .PageSetup.LeftHeader = .Range("A1").Text
 End With
End Sub

この例では左のヘッダーにセルA1の内容をセットしています。
マクロ中のセル番地はA1でなく実際のセルに置きかえてください。
また、LeftHeaderの部分も...続きを読む

QExcel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合

MATCH関数で、検索した値が複数ある場合に1つしか出なくて困っています。
(例)
   A B C D
1 年月日 種類 番号 備考
2 4月1日 肉類 1
3 4月2日 野菜 2
4 4月3日 肉類 1
5 4月4日 果物 2
6 4月5日 野菜 1
7 4月6日 果物 3
8 4月7日 果物 2
9 4月8日 肉類 1

この表で、D9の備考の欄に「種類:肉類、番号:1」と同じものがあった時の日付を、新しい日付で取り出したいのです。

INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2)
としたのですが、本当は4月3日を取り出したいのですが、4月1日が出てきます。
どのようにしたら良いでしょうか?
Excel2003です。
よろしくお願いします。

Aベストアンサー

MATCH関数を使用しませんが、D9の書式を日付にして、
=MAX((A2:A8)*(C2:C8=1)*(B2:B8="肉類"))
と、入力してShift+Ctrl+Enterキーで入力完了してみてください(配列式になります)。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング