Excelについての質問です。
複数枚にわたるシートがあるんですがそれをフッターではなく
セルの中に自動的にページをふるように設定することって
できるのでしょうか?

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

A 回答 (3件)

複数シートは考えていませんでした。

変形してみました。
下記マクロは単独、複数シートに対応しています。(しているはずです)
複数シートの場合は、1枚目のシートを選択(シート見出しをクリック)してShiftキーかCtrlキーを押しながら2枚目以降のシートを選択(同じようにシート見出しをクリック)します。各シートに渡った頁はシートの選択順にかかわらず左にあるシートから順に付けられます。色々勉強になりました。問題提起ありがとうございました!

Public Const wrtColumn = 1 '印刷範囲での書き込む列位置(左からの列数)
Public cellPage As Integer '複数シートを通しての通し番号

'選択したシートに連続番号をセットする
Public Sub SelectSheetsPageNoSet()
  Dim sht As Worksheet 'ワークシート

  cellPage = 0 '共通頁の初期化
  For Each sht In ThisWorkbook.Windows(1).SelectedSheets 'ウインドウは1つ
    pageNoSet_Sub sht.Name '選択シート毎に処理する
  Next
End Sub

'頁数(- 頁 -)をセルに書き込む。印刷範囲を設定して実行する(Sheet単位)
Public Sub pageNoSet_Sub(shtName As String)
  Dim hPB As Integer '改行位置
  Dim cot As Integer '改行カウンタ
  Dim rowNum As Long '印刷範囲の最終行

  Worksheets(shtName).Activate
  On Error GoTo ErrorHandler '印刷範囲を設定していない場合
  With ActiveSheet
    rowNum = .Range("Print_Area").Rows.Count
    .Range("Print_Area").Cells(rowNum, 1).Select
    hPB = .HPageBreaks.Count
      For cot = 1 To hPB
        cellPage = cellPage + 1
        .HPageBreaks(cot).Location.Offset(-1, wrtColumn - 1) = "- " & cellPage & " -"
      Next
      cellPage = cellPage + 1
      .Range("Print_Area").Cells(rowNum, wrtColumn) = "- " & cellPage & " -"
  End With
  Exit Sub
ErrorHandler:
  If Err = 1004 Then MsgBox "印刷範囲を設定して実行して下さい"
End Sub
    • good
    • 0
この回答へのお礼

すごい!出来ました!
>色々勉強になりました。問題提起ありがとうございました!
とんでもない、恐れ多いです。
マクロ、出来るとホント便利ですねぇ
あたしもこれを機会にマクロの勉強はじめてみようかな。
大変助かりました。ありがとうございました。

お礼日時:2001/09/18 09:59

マクロを書いてみました。

縦に長い表を想定しています。これは横に長い表は対応していません。
横に長い場合は別途書き換える必要があると思います。
印刷範囲が設定してあることが条件です。挿入した改頁と自動の改頁両方をカウントしています。

1頁に収まらない場合、改行位置は自動で設定されるはずですが、画面に改行位置が見えない場合は『HPageBreaks』が正確な値を返してくれないようです。そのため、印刷範囲の最終位置(最下段)に画面を移し、『HPageBreaks』で改行の個数と位置を確定しています。

wrtColumnに印刷範囲での書き込む列位置(印刷の左端から何列目か)をセットします。

以下を標準モジュールに貼り付けます。ご参考に。

'頁数(- 頁 -)をセルに書き込む。印刷範囲を設定して実行する
Public Sub pageNoSet()
  Const wrtColumn = 1 '印刷範囲での書き込む列位置(左からの列数)
  Dim hPB As Integer '改行位置
  Dim cot As Integer '改行カウンタ
  Dim rowNum As Long '印刷範囲の最終行

  On Error GoTo ErrorHandler '印刷範囲を設定していない場合
  With ActiveSheet
    rowNum = .Range("Print_Area").Rows.Count
    '改行位置を設定するために印刷範囲の最後に移動する
    .Range("Print_Area").Cells(rowNum, 1).Select
    hPB = .HPageBreaks.Count
      For cot = 1 To hPB
        '改行位置の前のセルに頁を書き込む(例)
        .HPageBreaks(cot).Location.Offset(-1, wrtColumn - 1) = "- " & cot & " -"
        '= cot & "/" & (hPB + 1) これは頁数と総頁の例
      Next
      '最終頁のセルに書き込む
      .Range("Print_Area").Cells(rowNum, wrtColumn) = "- " & cot & " -"
      '= cot & "/" & (hPB + 1) これは頁数と総頁の例
  End With

  Exit Sub

ErrorHandler:
  If Err = 1004 Then MsgBox "印刷範囲を設定して実行して下さい"
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます♪
やはりマクロを使わないと出来ないんですねぇ。
マクロまで書いていただいてすっごく感謝してます。
早速ためさせていただきました。
しかし、あたしの説明不足だったのと、あたしの知識不足のせいで
よく分からないのでもうひとつ質問させていただきたいのですが
このマクロは複数のシートにわたっても使用することってできるんでしょうか?

お礼日時:2001/09/17 10:26

同じような質問ありますよ↓


簡単には出来ないようです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=94009
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
簡単には出来ないようですね。

お礼日時:2001/09/17 10:05

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

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

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

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

Q複数シートで○印をつけたセルの文字列を集約シート上から順に自動コピーしたいです

お知恵をお貸しください。

複数シート 「a」「b」「c」があります。
下のようにそれぞれに表があり、プルダウンで「○」を付けられるようにしています。


<aシート>
   A    B    C    D    E
1  注文   品目   数量   備考
2       もも   4
3  ○    くり   10   燻蒸済
4  ○    うめ   8

<bシート>
   A    B    C    D    E
1  注文   品目   数量   備考
2  ○    あじ   1    至急
3       さば   12   
4       たこ   9

それを「集計」シートに集計したいと思っています。
   A    B    C    D    E
1  注文   品目   数量   備考
2  ○    くり   10   燻蒸済
3  ○    うめ   8
4  ○    あじ   1    至急

 ○がつく数は日によって違います。
 一応自前で考えたのは

 a~cシートのE列を作業列とし、
 aシートは
  E2=if(A2="○",ROW(),"")
 bシートは
  E2=if(A2="○",100+ROW(),"")
 cシートは
  E2=if(A2="○",200+ROW(),"")

 として、数字を昇順に入れました。

 そのうえで、集計シートに
  a2=IFERROR(INDEX(a!A:A,SMALL(a!$A:$A,ROW(a1))),"") と入力し、それぞれのセルにコピーしました。
  ここで行き詰りました。
  このままでは、aシートしか参照しません。
  b~cシートも参照するにはどうすればよいでしょうか。

  違う方法があればそれでも構いません。
  
  どうぞよろしくお願いします。

お知恵をお貸しください。

複数シート 「a」「b」「c」があります。
下のようにそれぞれに表があり、プルダウンで「○」を付けられるようにしています。


<aシート>
   A    B    C    D    E
1  注文   品目   数量   備考
2       もも   4
3  ○    くり   10   燻蒸済
4  ○    うめ   8

<bシート>
   A    B    C    D    E
1  注文   品目   数量   備考
2  ○...続きを読む

Aベストアンサー

koron02さんが考えた数式を見るとa、b、cの各シートの最大行数を100行程度と想定しているように見えます。もし、それで良いのであれば、各シートに作業列を作るのではなく、いっそのこと、作業シートを作ってしまった方が楽ではないでしょうか。
具体的には、作業シートの1~100行にaシートからリンク貼り付け、101~200行にbシートからリンク貼り付けといった具合です。集計シートから作業シートを参照すれば、koron02さんが考えた数式の応用で対応可能だと思います。

QExcelで複数枚の印刷物に連番をふるには?

エクセルである伝票の表紙部分を作成しています。

伝票が大量にあるので、毎回幾つかの束に分けて保存しています。

それらの表紙には、「○○ No.1」「○○ No.2」...といった形で番号を印字しているのですが、現在は1枚ずつ手入力で番号部分を変更し、1枚ずつ印刷しています。

これが意外と面倒な作業なので、なんとか改善を行おうと検討しています。


具体的には、印刷時に枚数を指定すると、1から順番に特定部分に番号を挿入して印刷が出来ればベストです。

この様な事は可能なのでしょうか?

ちなみに表紙は何種類もあるので、それぞれの伝票の表紙はシートで分けられています。
枚数が何十枚になる事もあるので、シート内に下に何枚分も追加していく、といった方法は避けたいのが本音です。
(この方法だと印刷枚数を指定するのが面倒なので...)

識者の方何卒お知恵をお貸し頂ければと思います。

よろしくお願いいたします。

Aベストアンサー

「伝票が」という表現は、ややわかりにくいのですが、印刷部数毎に連番をふりたいということでよいですか?

過去の質問で「エクセル 印刷 連番」で検索すると事例がたくさんでてきます。

マクロで実現する例をひとつ貼っておきます
http://oshiete1.goo.ne.jp/qa3191856.html

QExcelで1ページ2枚,2ページを2枚印刷!!

Excelで印刷をしたい。 ????印刷の時に,1ページを2枚,2ページを2枚,・・・というようにそれぞれ2枚ずつページ番号を振って印刷していと思っています。仕事の発送で困っていますので,出来るだけ早く答えが欲しいです。方法を教えてください。

Aベストアンサー

回答No1です。印刷操作でその前にページ番号を付ける操作が必要でしたね。
「ページレイアウト」タブから右下隅のある「ページ設定↓印をクリックします。
「ヘッダー・フッター」のタブで例えばページ番号をページの下部分に表示するのでしたら「ヘッダーの編集」をクリックします。
「中央部」の窓にカーソルを置き、上の部分にある「ページ番号の挿入」をクリックします。
これでページ番号がページ下部の中央部に表示されます。
その後に回答1で述べた操作を行うことになりますね。

QExcelの改ページ 同シート内で複数の改ページの設定

同じシート内で多くの改ページを設定しなければならない場合
1ページ毎に設定していかないといけないのでしょうか?
それとも改ページしたいデータで並び替えて、同データのある行で改ページを分割していくのは可能でしょうか?

たとえばA列に上から111112223333344455555とある場合に自動的に1と2の間、2と3の間、3と4の間、4と5の間にそれぞれ自動的に改ページを入れたいのですが・・・

Aベストアンサー

マクロなら入力している値が変わったところに「改ページ」を挿入することが可能です。
「マクロはNG」なら手作業で1カ所ずつ挿入する必要があります。「プレビュー」→「改ページプレビュー」を利用すれば、改ページ位置の変更を、多少、楽に操作できるかもしれませんが、行数が多いならこの方法でも大変だと思います。

A列の値が変わったら改ページを挿入するマクロのサンプルは以下になります。
以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。

Sub Macro4()
Const col As String = "A" '改ページを判断するデータの列名
Dim idx As Long
Dim sv
sv = Cells(1, col).Value
For idx = 1 To Cells(65536, col).End(xlUp).Row
  If Cells(idx, col).Value <> sv Then
    ActiveSheet.HPageBreaks.Add Before:=Rows(idx)
    sv = Cells(idx, col).Value
  End If
Next idx
End Sub

でも実際のシートはそんなに単純ではないと思います。質問文に具体的な指示がないので、100%期待に添えるとは思いませんが、「ご参考まで」にどうぞ。
なおマクロの実行結果は「UNDO」で戻せませんので試しに実行するなら、シートは必ず保存しておいて、元に戻せるようにしておいてください。

マクロなら入力している値が変わったところに「改ページ」を挿入することが可能です。
「マクロはNG」なら手作業で1カ所ずつ挿入する必要があります。「プレビュー」→「改ページプレビュー」を利用すれば、改ページ位置の変更を、多少、楽に操作できるかもしれませんが、行数が多いならこの方法でも大変だと思います。

A列の値が変わったら改ページを挿入するマクロのサンプルは以下になります。
以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュー...続きを読む

QExcelで複数ページにわたり、特定の列・行を印字したい

Excel2002を使っています。
言葉で上手く説明できるか分からないのですが…下記のような事を行ないたいのですが、うまく出来ません。どうすればよいか教えて下さい。
<現在のシートの内容>
・A1~B2まで結合、C1~G2まで結合、H1~I2まで結合
・3行目はA列のみに文字を入力
・4,5行目は空白
・6~7行目は2行2列ごとに結合し、最後(K、L、M列)のみ3列を結合
・8行目以下は行では結合せず、6~7行目にあわせて列を結合し各セルに数値や文字を入力(A~M列まで)
・100行目までデータあり。途中、改ページあり。
<行ないたいこと>
・A1~I3までの内容とA6~M7までの内容を、全てのページの上部に印刷したい
<試したこと>
ページ設定の「シート」で「行のタイトル」「列のタイトル」を入力
※「行のタイトル」は$6:$7、※「列のタイトル」は$A:$Mとしました
<結果>
・A6~M7までの内容は全てのシートに上手く印字されましたが、
 A1~I3の内容は1枚目のみでした
<これは避けたい!ということ>
・ページが変わるごとにA1~I3までの内容とA6~M7までの内容をコピー&ペーストすること。
※ファイルを見ている時は、途中に余計なものが入らないようにしたい。現状は、ウィンドウ枠の固定で7行目まで固定しています。

以上です
どうすれば、上手く印刷できるでしょうか?

Excel2002を使っています。
言葉で上手く説明できるか分からないのですが…下記のような事を行ないたいのですが、うまく出来ません。どうすればよいか教えて下さい。
<現在のシートの内容>
・A1~B2まで結合、C1~G2まで結合、H1~I2まで結合
・3行目はA列のみに文字を入力
・4,5行目は空白
・6~7行目は2行2列ごとに結合し、最後(K、L、M列)のみ3列を結合
・8行目以下は行では結合せず、6~7行目にあわせて列を結合し各セルに数値や文字を入力(A~M列まで)
・100行目までデータあり。途中、改ページあり...続きを読む

Aベストアンサー

逆の言い方を言うと
4:5とJ1:M3を見出しから外したい訳ですね

で、無論J1:M3には何か書かれていて常時非表示にはできないのですよね?

4:5を印刷しないのは
行そのものを「表示しない」にすれば対応できるのですが
J1:M3だけを印刷対象から外すのは難しいですね
Openofficeのカルクなら簡単なのですが…

対策としては
・別シートに印刷用シートを作る
セルの書式設定中の保護タブに在る「非表示」などを何とか活用し
印刷対象から外す(御免なさい やり方知りません)
印刷時はOpenOfficeで開いて印刷用フォームをあてがう
位しか思いつきません

うーん
お役に立てず済みません


人気Q&Aランキング

おすすめ情報