Subject: ページ数を自動計算させるにはどうすれば? ======================================== From: べー Date: 2000/11/25(土) 00:31:17  こんばんわ。べーと申します。お世話になります。  早速ですが、ちょっと説明しにくいんですけど、1つのワークシート上に大きく分けて上と下で合わせて2つの範囲で作業し、上の部分は下の部分のヘッダーにしてあります。これを自動的に毎回出力するようにしましてます。  ここで悩みなのですがこのヘッダー部分の範囲の中には、あらかじめ『ページ項目』として例えば『1/2ページ』というように表示させるセルを作成したいのですが、手作業でなく、自動的に何分の何ページと出力させる設定をどうすればできるでしょうか?  仕事上どうしても解決したいので皆さん宜しくお願い致します。エクセル97です。 ======================================== From: ミコ Date: 2000/11/25(土) 17:16:34 べーさん、こんにちは。ミコと申します。(^^) マクロの方法で、こんな感じでいかがでしょう。 ヘッダー部分の範囲を、100行目にしてあります。 他の行の場合は、コードの 100 のところを変更してください コードの使い方ですが、  1.シートタグを右クリックし、コードの表示  2.挿入、標準モジュールで、出てきた白い所に下のコードを貼り付けてください。  3.右上の×でシートに戻り、Alt+F8 で、マクロ名を選んで実行してください。  4.シートの100行目にページ数が表示されます。     (^-^)/~~ Option Explicit Sub 各ページ数を表示() " Dim page As Integer, i As Integer" page = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1) For i = 1 To page " Cells(100, i).NumberFormatLocal = ""@""" " Cells(100, i) = (i & "" / "" & page)" Next End Sub ======================================== From: スープー Date: 2000/11/27(月) 20:04:09 ミコさん、こんばんわっす。 べーさんのご質問の件なんですが・・・ もしかして、各ページにページ数を振りたいんじゃないっすか?  For i = 1 To page " Cells(100*i, 7).NumberFormatLocal = ""@""" " Cells(100*1, 7) = (i & "" / "" & page) Next" *べーさん、[7]のところは、お好きな列番号を数字で入れてください。 もし、勘違いでしたら、許して欲しいっす。(^^; じゃ、崑崙山に帰るっす。 ======================================== From: スープー Date: 2000/11/27(月) 20:06:21 わぁ〜ん、間違えたっす。  For i = 1 To page " Cells(100*i, 7).NumberFormatLocal = ""@""" " Cells(100*i, 7) = (i & "" / "" & page) "  Next 申し訳ないっす。m(_ _;;A ======================================== From: ミコ Date: 2000/11/28(火) 17:02:45 こんにちはー(^^) スープーさん、お久しぶりです(^^) スープーさんの方法だと、1ページを100行と考えて、 100行目ごとにページ数を表示させるんですね。 なるほど、ペーさんは、こういうことがなさりたいのかもしれませんね。 ******* でももし、セルに表示させなくてもよろしければ、 ページ設定でヘッダーに設定することにより、 自動的に何分の何ページ『1/2ページ』と出力させることができます。 1. ファイル、ページ設定、ヘッダーフッター、ヘッダーの編集で、 2. &[ページ番号]&[/&[総ページ数]&[ページ   と入れてください。 ******* それから、ごめんなさい。ぺーさんの例だと、『1/2ページ』という事で、 「ページ」の文字を入れるんでしたね。前回のコードを訂正しました。 なお、まとめて1行のセルに表示した内容を、 各ページのヘッダーに設定して印刷するコードを追加しました。 1ページづつ印刷しているので、ちょっと低速です(^^;; ******** Sub ページ数印刷() '100行目のセルにページ数を表示し、その内容をヘッダーに設定して印刷 " Dim page As Integer, i As Integer, j As Integer, Lastcol As Integer" Dim atai As String '最終ページ数取得 page = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1) '100行目のセルに、A列から順番にページ数を表示 For i = 1 To page " Cells(100, i).NumberFormatLocal = ""@""" " Cells(100, i) = (i & "" / "" & page & "" ページ"")" Next '100行目の最終データ列数を取得 " Lastcol = Cells(100, Columns.Count).End(xlToLeft).Column" '1ページ目から最終ページまで以下の作業を繰り返す For j = 1 To Lastcol 'ヘッダー内容を一旦クリア " ActiveSheet.PageSetup.CenterHeader = """"" '100行目に表示したページ数を変数に格納 " atai = Cells(100, j)" 'ヘッダーを設定 ActiveSheet.PageSetup.CenterHeader = atai '該当ページだけを印刷 "  ActiveWindow.SelectedSheets.PrintOut From:=j, To:=j, Copies:=1, Collate:=True" Next End Sub ======================================== From: べー Date: 2000/11/30(木) 23:08:38 皆さんこんばんわ。 管理人さん以前の投稿で改行し忘れてしまいました。 大変申し訳ありませんでした。 ミコさんスープーさんありがとうございました。 また返信が遅れてしまい申し訳ありません。 会社が忙しくてなかなかこちらを見ることができません。 早速、試してみます。 結果をご報告させて頂きますので宜しくお願い致します。 それでは失礼します。 ======================================== From: べー Date: 2000/12/02(土) 22:26:43 こんばんわ。 ミコさんスープーさんありがとうございました。 結果についてですが何かうまくいきませんでした。 もしかしたら自分がやりたいことがうまくミコさんスープーさんに 伝わってないのかもしれません。 もし良かったらメール下さい。 実際に作業したいシート(現物)を見て頂きたいのですが。。。 ご連絡お待ちしております。 ======================================== From: ケイン Date: 2000/12/02(土) 23:58:41 こんばんは 横入りすいませんです。 これってつまり、 >上の部分は下の部分のヘッダーにしてあります じゃなくて、「行タイトル」にしてしまえばいいだけの事なんじゃないでしょーか ? そーすれば、お望みどおり上の部分が全ページに印刷されますし、もちろんヘッダーは別に ページ数表示に設定できるわけですが・・。 やり方としては、 1 まず印刷したい範囲全体を選択 2 「ファイル」「ページレイアウトの設定」「ヘッダー/フッター」タブでヘッダーに "  ""1/?ページ"" を設定、フッターは ""(指定しない)"" に設定" 3 「シート」タブで「行タイトル」の窓をクリックしてカーソルを出しておき、シート上の   [上の部分]としているところの行をドラッグ選択する。「列タイトル」をクリックで   同じく上の部分の、列範囲をドラッグ選択する。すると、各窓には、絶対参照で行/列の   範囲が指定される。 4 いったんプレビューを出して、ヘッダーと印刷範囲が重なっていないかなど確認し、重なって   いたら、「設定」「余白」タブで用紙の上端部分の余白を調整し、最終的にプレビューで   チェックする。 5 印刷スタート で、オッケーだと思いますが、どうでしょうか ? では。 ======================================== From: ミコ Date: 2000/12/03(日) 08:06:41 みなさん、あはようございます。 ケインさん、お世話になります。いつもありがとうございます。m(_ _)m 実は私もあれから、ちょっと自分が勘違いしているように思っていたんです。 それで、セルにページ数を表示させないで、直接印刷してよろしければ、 ケインさんの方法でいいのではないでしょうか。 ぺーさん、ケインさんの方法を一度試していただきたいと思います。 ところで、ぺーさん、Excelのバージョンはなんだったでしょうか? ケインさんの方法だと、Excel95になると思います。 念の為、2000(たぶん97も一緒だと思います)の方法も書いておきます。 ケインさんのご説明、とてもわかりやすいので、こちらを参考に書かせて頂きますね。 1 まず印刷したい範囲全体を選択 2 「ファイル」「ページ設定」「ヘッダー/フッター」タブで「ヘッダーの編集」に   &[ページ番号]&[/&[総ページ数]&?ページ "  を設定、フッターは ""(指定しない)"" に設定" 3 「シート」タブで「行タイトル」の右端の四角をクリックして   「ページ設定ー行のタイトル」のボックスを出しておき、   シート上の[上の部分]としているところの行をドラッグ選択し、   ボックスの右端をクリックしてページ設定画面に戻ります。 4  次に「列タイトル」の右端をクリックして   「ページ設定ー列のタイトル」ボックスを出します   同じく上の部分の列範囲をドラッグ選択し、   ボックスの右端をクリック、ページ設定画面に戻ります。   すると、各窓には、絶対参照で行/列の範囲が指定されます。 5  いったん「ファイル」「印刷プレビュー」を出して、   ヘッダーと印刷範囲が重なっていないかなど確認し、重なっていたら、   「ページ設定」「余白」タブで用紙の上端部分の余白を調整し、   最終的にプレビューでチェックする。 6  印刷スタート それから、メールで現物のシートをというお話なのですが、 こちらでは、今後ペーさん以外の方もスレッドを参考にされる事があります。 メールでやり取りしてしまうと、その後の内容がわかりませんので、 それは最終手段という事で、極力スレッド上で解決させて頂きたいと思います。 今回の方法でも思うような結果が得られない場合は、また遠慮なくおっしゃって下さい。 その場合、いくつかお伺いしたい事があります。 1 まず、バージョン。これは今回に限らず、必ず書いてくださいね。 2 ページ数を表示させたいセルの範囲と、それ以外のヘッダーのセル範囲。 3 印刷したい、下の部分の範囲。 4 今回うまく行かなかったということですが、どういう状況でしょうか。 以上です。ご検討よろしくお願い致します。m(_ _)m ======================================== From: べー Date: 2000/12/08(金) 00:36:10 皆さんこんばんわ。 ミコさんケインさんありがとうございました。 仕事が忙しくてなかなか返信できなくてすみません。 早速ですがミコさんの質問の回答と結果についてです。 1 エクセルのバージョンですが、一番初めに記述してある通りエクセル97です。 2と3についてはこの後、まとめて報告させて頂きます。 4 前回・前々回のみこさんのマクロについてですが、前回のやり方ですと例えば、 2枚印刷した場合ですと2枚目のヘッダーの上に2/2ページとでてきてしまいました。 多分100行目がちょうどそこにあたったからだと思いますが。  前々回のやり方ですとヘッダーの左の空いているスペースに、2000/2/2と 確かこのような感じでした。 2と3の質問に付け加えて自分がやりたいことをもっと詳しく解説させて頂きます。  まず、作業シートの割り当て方ですが、  ヘッダーの部分:セル1-Aから5-CWまでの部分です。  フッターの部分:セル6-Aから61-CWまでの部分です。 この2つの部分合わせて1ページです。  次にこれを使って作業しようとしている訳なんですけれども、今まではこの2つの部分 をじかに作っていましたが、ヘッダーだけはページ数を格納するのセル以外は、毎ページ 変わらないので今回からヘッダーの部分を自動的に出すようにし、尚且つページ数が自動的に 計算できるようにさせたいというのが今回皆さんに相談しました目的です。  そこでケインさんとミコさんのページ設定を使ったやり方なんですけど、ここで挙げました 上記の『ヘッダーの部分:セル1-Aから5-CWまでの部分』は、元から既にページ設定で 自動的に出力されるようになっています。フッターの部分はフッターとしては指定していま せん。ですから今の状況はヘッダーフッターフッターフッター・・・と言う感じで作業をして います。  このヘッダーの部分にあらかじめページ数を格納するための結合されたセル2-CDから 4-CWを用意してあります。この上に見出しとしてページというセル1-CTから1-CW があります。目的はこのセル2-CDから4-CWの中に、?/?ページとうまく出力したい ということです。  だからせっかくケインさんとミコさんが考えてくださったページ設定のやり方ではできない と思います。できればマクロを使ったやり方を教えて欲しいのですが?  ミコさんうまく説明していなかった自分の責任で、ご迷惑をお掛けして申し訳ありません。 何とか以前頂いたマクロのやり方を改良できないでしょうか?  もし説明で不十分な部分がありましたら、また説明させて頂きます。 宜しくお願いします。 失礼します。 ======================================== From: ミコ Date: 2000/12/08(金) 02:13:54 ぺーさん、こんばんは。 ごめんなさいっm(_ _)m >エクセルのバージョンですが、一番初めに記述してある通りエクセル97です。 またやってしまいました。大変失礼致しました。 >ヘッダーの上に2/2ページとでてきてしまいました。 >多分100行目がちょうどそこにあたったからだと思いますが。 これもごめんなさい。後で気が付いたんですが、その通りなんですよ。 印刷範囲を設定しなければいけませんでした。(^^;; それで、ここの所がわからないのですが。。。  >このヘッダーの部分にあらかじめページ数を格納するための >結合されたセル2-CDから4-CWを用意してあります。 このセルの結合の仕方ですが、例えば、C2D2を結合、E2F2を結合という感じで、 横に2つづつセルを結合しているのでしょうか? その場合ですと、CW2(101列目)まで来ると、一つ余ってしまいますが。。。 ======================================== From: べー Date: 2000/12/08(金) 23:59:39 ミコさんこんばんわ。 まず訂正ですが結合されたセル2-CDから4-CWではなく2-CTから4-CWです。 2-CTから4-CWの範囲を結合し、これで1つのセルです。 それから編集範囲なんですが、別に100行目とは決おりませんで、ここもちょっと厄介 なところかもしれませんが・・・。 昨日の説明がミコさんに通じていましたら、話がスムーズだと思いますが、 説明の仕方がうまくいかなかったら申し訳ありませんが、こうイメージして下さい。 ヘッダーの部分を仮に1として、その下の範囲フッターの指定はしていませんが、 フッターの部分と呼んでいる部分を2とします。 ここで昨日の話に戻りますが、もし今回ヘッダーの指定もせずに作業したとしますと、 1を作った直後に2を作り、これを必要に応じて作業すればよいのですが、ヘッダー指定を していますので1は一度作ればよいことになりますよね? ヘッダー指定なしの場合        1+2⇒1+2⇒1+2⇒1+2⇒・・・・・(以降同じ作業)。  ヘッダー指定の場合        1+2⇒2⇒2⇒2⇒2⇒2⇒・・・・・(以降同じ作業)。  とこんな感じになります。 あと少し付け加えますと、上の場合は1+2で1ページ分で以降同じ間隔です。 下の場合は、最初は1+2で1ページ分ですが2ページ目は2だけで、1ページ分となって しまい編集範囲のズレが生じてきます。 このズレをどういうように制御していくかも、問題になります。 ちなみに今の作業シートでの編集範囲は、A1〜CW5の部分がヘッダーですのでこれで 5行、A6〜CW61の部分がフッターですのでこれで56行となり、1ページ目の範囲は61 となります。 2ページ目は、62〜118ですので57行になります。2ページ目以降は同じ間隔ですので 実質ズレが生じてしまうのは、1ページ目と2ページ目の差だけです。 これを何とかうまくできないでしょう? ミコさんお願いします。 説明が下手で申し訳ありませんが宜しくお願いします。 説明不十分の場合は、また説明させて頂きます。 ======================================== From: ミコ Date: 2000/12/09(土) 05:44:46 おはようございます。ミコです(^^) ぺーさん、一つ確認させていただきたいのですが、 >ケインさんとミコさんが考えてくださったページ設定のやり方ではできないと思います。 これは、実際に試してみて頂けたのでしょうか? >『ヘッダーの部分:セル1-Aから5-CWまでの部分』は、 >元から既にページ設定で自動的に出力されるようになっています。 とありますが、これは、「ファイル」、「ページ設定」、「シート」、の所で 「行タイトル」を $1:$5 と設定しているという事でしょうか? その場合、ケインさんご説明の「ヘッダー/フッター」の設定も それに付け加えてできるのですが。。。 >昨日の説明がミコさんに通じていましたら、話がスムーズだと思いますが、 ご説明の内容、全てを理解できていないかもしれませんが、 >2-CTから4-CWの範囲を結合し、これで1つのセルです。 >目的はこのセル2-CDから4-CWの中に、?/?ページとうまく出力したいということです。 とのこのなので、今回のマクロでは、1ページづつを印刷する都度、 結合したCT2〜CW4セルに該当ページ数を表示させてから、印刷作業を実行しています。 A1〜CW5を「ページ設定」の「行タイトル」に設定し、印刷を確認しました。 こちらで一度試してみていただけますか?    (^-^)/~~ Sub ページ数印刷2() " Dim page As Integer, j As Integer, Lastcol As Integer" '最終ページ数取得 page = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1) 'セルCT2(CT2〜CW4結合セル)の書式を設定 " Cells(2, 98).NumberFormatLocal = ""@""" '1ページ目から最終ページまで以下の作業を繰り返す For j = 1 To page 'セルCT2(CT2〜CW4結合セル)をクリア " Cells(2, 98) = """"" 'セルCT2(CT2〜CW4結合セル)に各ページ数を表示 " Cells(2, 98) = (j & "" / "" & page & "" ページ"")" '該当ページだけを印刷 " ActiveWindow.SelectedSheets.PrintOut From:=j, To:=j, Copies:=1, Collate:=True" Next End Sub