- ベストアンサー
excelシートの部数印刷でのページ番号表示
初めまして。どうしてもわかないので皆様にお世話になれればありがたいと思います。 EXCELのページ番号ですが、部数印刷した場合でも連番で表示される機能もしくはVBAなどありますか? 1シート1ページを10枚印刷した場合にページ番号が連番表示されるということです。 お力を貸してください。宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
これは標準の印刷機能では難しいですね。(できるかもしれませんが) 連番でページ番号を振りながら印刷するマクロを組んでみました。 Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Sub ページ数をつけて印刷() Dim n As Variant, i As Integer n = InputBox("印刷部数を入力してください") If n = "" Then Exit Sub For i = 1 To n ActiveSheet.PageSetup.CenterFooter = i ActiveSheet.PrintOut Next End Sub Alt+F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。実行すると印刷部数を入力するダイアログが出るので、最初は1などを入力して試してみてください。キャンセルを押したり、何も入力せずにOKを押したら実行を中止しします。 注意点ですが、このマクロを実行して印刷部数を入力すると、印刷ダイアログは出てこずにいきなり印刷が始まります。ページ設定やプリンタの設定は、あらかじめファイルメニューで行っておいてから、マクロを実行してください。 なお、このマクロでは中央のフッターにページ番号を表示していますが、他の場所にしたい、フォントや大きさを希望の大きさに調節したい、という場合はそのように修正するので補足をお願いします。
その他の回答 (5)
- ham_kamo
- ベストアンサー率55% (659/1197)
だめでしたか…。 手元にExcel2007がないため、ネットでそれらしき情報を検索してみたのですが、まだ発売されて間もないためか情報が少なく、ちょっとこれ以上は原因追及ができない状態になってしまいました。 とりあえず、「部数」-「ページ数」の形式で右上に表示するようにしてみました。以下のマクロと差し替えていただけますか? Sub ページ数をつけて印刷() Dim n As Variant, i As Integer Dim H_Break As Integer Dim V_Break As Integer Dim P_Page As Integer n = InputBox("印刷部数を入力してください") If n = "" Then Exit Sub H_Break = ActiveSheet.HPageBreaks.Count '横の改ページ数取得 V_Break = ActiveSheet.VPageBreaks.Count '縦の改ページ数取得 If V_Break = 0 Then P_Page = H_Break + 1 Else H_Break = H_Break + 1 V_Break = V_Break + 1 P_Page = H_Break * V_Break End If For i = 1 To n ActiveSheet.PageSetup.RightHeader = CStr(i) & " - &P" If i = 1 Then Application.Dialogs(xlDialogPrint).Show Else ActiveSheet.PrintOut End If Next End Sub
お礼
ありがとうございます。 部数-ページは正常にできました。 感激しております。 山間部のJAで働いている者ですが、Visual Basic を知っている者が皆無な為、業務効率で大変苦労しておりました。 ham_kamoさんのお陰で一つ問題解決致しました。 ですがまだまだ、課題は山積みです。 在庫管理の効率化、独自のHPの作成、ネット販売・・・・PC頼りの業務が未だ、整備されていません。 もし、お暇がありましたら御指南ください。宜しくお願いします。 ほんとにありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
補足拝見しました。 Excel2007をお使いなのですね。こちらはExcel2000なので、やはりバージョンの違いによるものかな…。ちょっと調べてみます。 記録していただいたマクロを見る限り、マクロの書式はExcel2007でも変わってないようなので、うまくいくはずなのですが…。とりあえず、ちょっとだけ変えてみたので、差し替えて試していただけますか? Sub ページ数をつけて印刷() Dim n As Variant, i As Integer Dim H_Break As Integer Dim V_Break As Integer Dim P_Page As Integer n = InputBox("印刷部数を入力してください") If n = "" Then Exit Sub H_Break = ActiveSheet.HPageBreaks.Count '横の改ページ数取得 V_Break = ActiveSheet.VPageBreaks.Count '縦の改ページ数取得 If V_Break = 0 Then P_Page = H_Break + 1 Else H_Break = H_Break + 1 V_Break = V_Break + 1 P_Page = H_Break * V_Break End If For i = 1 To n ActiveSheet.PageSetup.RightHeader = "&P+" & CStr((i - 1) * P_Page) ActiveSheet.PageSetup.RightFooter = "&P+1" If i = 1 Then Application.Dialogs(xlDialogPrint).Show Else ActiveSheet.PrintOut End If Next End Sub 私の手元にExcel2007がないため、調べてもわからないときは、すみませんがギブアップするかもしれません。ただ、ページを「通し番号」でなく、 1-1 1-2 2-1 2-2 のように、「部数」-「ページ数」のようにすることはできるかもしれません。これではまずいでしょうか? あと、左記のマクロでは動作確認用に右下にも部数に関係なく「ページ数+1」の数字が出るようにしておいたのですが、そこはどのようになっているでしょうか?
補足
お手数をおかけしております。 印刷した結果、右上は10.20.12.22 右下に11.21.11.21となりました。 「部数」-「ページ数」でも十分対応できますのでご協力を願います。
- ham_kamo
- ベストアンサー率55% (659/1197)
すみません、もう1つ試していただきたいことがあります。 新規のブックを開き、 「ツール」>「マクロ」>「新しいマクロの記録」 を選択してください。 「マクロの記録」ダイアログが出るので、マクロ名はそのままMacro1で、「マクロの保存先」は「作業中のブック」を選択し、「説明」のところはユーザー名とか出てしまうので削除して、OKを押してください。 その状態で、 「ファイル」>「ページ設定」>「ヘッダー/フッター」の画面を開き、「ヘッダーの編集」を押して、右側のヘッダーのテキストボックスを選択し、ページ数を入力する#マークのボタンを押してください &[ページ番号]と入ると思うので、その後ろに+1と入力し、 &[ページ番号]+1 と入力された状態にしてOKを押し、ページ設定の画面を閉じます。 マクロの記録の小さな画面の■を押して記録を停止してください。 その状態で適当にセルに何か入力して、印刷プレビューで右上のヘッダーにどのように表示されるか教えてください。(1ページ目だと、2と表示されるはず) それから、Alt+F11を押すとVBAの画面が開くので、左のVBAProject(Book1)という新規のブックの下の、標準モジュールの中にあるModule1をダブルクリックしてください。右の画面に記録したマクロが表示されます。そのマクロを補足欄に貼り付けていただけますか?
補足
お手数かけます。Module1のマクロです。宜しくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "&P+1" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.708661417322835) .RightMargin = Application.InchesToPoints(0.708661417322835) .TopMargin = Application.InchesToPoints(0.748031496062992) .BottomMargin = Application.InchesToPoints(0.748031496062992) .HeaderMargin = Application.InchesToPoints(0.31496062992126) .FooterMargin = Application.InchesToPoints(0.31496062992126) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlPortrait .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 100 .PrintErrors = xlPrintErrorsDisplayed .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = True .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" End With End Sub
- ham_kamo
- ベストアンサー率55% (659/1197)
> ページ番号が(10.20.11.22)と印刷されました。 えーと、これは原因がつかめないですね。。。こちらでは1,2,3,4と出てきているのですが。。。 Excelのバージョンの違いかな?当方はExcel2000ですが、そちらのバージョンは何でしょうか?(ヘルプ>バージョン情報で出てきます) ちょっとデバッグコーディングを入れて、その他も少し細工した修正版にしたので、それに置きかえてみていただけますか?(肝心のページ設定箇所はいじってないので、ページの表示は変わらないのですが、その原因を探るため) 実行すると部数を入力した後、「このシートのページ数は○であってますか?」というダイアログが出ます。「はい」を押すとそのまま処理を続行しますが、「いいえ」を押すと処理を中止します。そこで、そのページ数があっているかどうかを確認していただきたいのです。 上記のページ数が間違っていても、とりあえず「はい」を押して印刷してみてください。テストのために右のフッターにもページ数が入るようにしています。これは部数のコントロールをしていなくて、単に実際のページ+1を表示することにしています。なのでそこは2,3,2,3となるはずですが、そこの表示がどうなるか確認していただけますか? なお、いきなり印刷ではなく、最初に印刷ダイアログを出すようにしました。1部目は実際に印刷しなくてもそこから印刷プレビューで確認できます。(ただし1部目だけで、2部目以降は直接印刷されてしまいますが) Sub ページ数をつけて印刷() Dim n As Variant, i As Integer Dim H_Break As Integer Dim V_Break As Integer Dim P_Page As Integer n = InputBox("印刷部数を入力してください") If n = "" Then Exit Sub H_Break = ActiveSheet.HPageBreaks.Count '横の改ページ数取得 V_Break = ActiveSheet.VPageBreaks.Count '縦の改ページ数取得 If V_Break = 0 Then P_Page = H_Break + 1 Else H_Break = H_Break + 1 V_Break = V_Break + 1 P_Page = H_Break * V_Break End If If MsgBox("このシートのページ数は" & P_Page & "であってますか?", _ vbQuestion + vbYesNo) = vbNo Then Exit Sub For i = 1 To n ActiveSheet.PageSetup.RightHeader = "&P+" & (i - 1) * P_Page ActiveSheet.PageSetup.RightFooter = "&P+1" If i = 1 Then Application.Dialogs(xlDialogPrint).Show Else ActiveSheet.PrintOut End If Next End Sub
お礼
返信ありがとうございます。 バージョンはExcel2007を使用しています。 印刷してみましたが、10.20.12.22とでました。 2ページ2部印刷でダイアルログは「このシートのページ数は2であってますか?」とでました。 これは、新規ページで試した結果ですが、実際に印刷したいページは2ページ目が他ページから図のリンク張り付けを行っております。 その結果、ダイアルログは「このシートのページ数は6であってますか?」となり、ページ番号は10.20.10.20.16.26とでました。 お手数ですが宜しくお願いします。
- ham_kamo
- ベストアンサー率55% (659/1197)
No,1です。 > (1)ページ番号表示位置を右上の場合 > (2)1シート2ページの部数印刷で連番にした場合(1.2.1.2.を1.2.3.4.に) はわかったので、そのように修正してみましたが、 > もしくは、2シート1ページを部数印刷で連番にした場合・・・ というのはどういう場合でしょう。各シートをの印刷サイズを半分に縮小して、複数シートを1枚に2ページ分印刷する、ということでしょうか。そうだとすると、それは通常は印刷するときにプリンタの詳細設定で指定するので、ちょっとややこしくなりそうです。 とりあえず、(1)(2)に対応したマクロです。上記の「2シート1ページを部数印刷」の部分は私の認識であっているか、補足をお願いします。 Sub ページ数をつけて印刷() Dim n As Variant, i As Integer Dim H_Break As Integer Dim V_Break As Integer Dim P_Page As Integer n = InputBox("印刷部数を入力してください") If n = "" Then Exit Sub H_Break = Sheet1.HPageBreaks.Count '横の改ページ数取得 V_Break = Sheet1.VPageBreaks.Count '縦の改ページ数取得 If V_Break = 0 Then P_Page = H_Break + 1 Else H_Break = H_Break + 1 V_Break = V_Break + 1 P_Page = H_Break * V_Break End If For i = 1 To n ActiveSheet.PageSetup.RightHeader = "&P+" & (i - 1) * P_Page ActiveSheet.PrintOut Next End Sub
お礼
ham_kamo さん 早速の返信ありがとうございます。 修正していただいたマクロは趣旨はバッチリ合ってます。 ただ。。。一つだけ・・・ 1シート2ページを2部、試し印刷したところ、ページ番号が(10.20.11.22)と印刷されました。 これが治れば、長年の懸案が解決します。是非お願いします。
お礼
ありがとうございます。すばらしいの一言です。 お言葉に甘えていくつか希望を追加しますが・・・ (1)ページ番号表示位置を右上の場合 (2)1シート2ページの部数印刷で連番にした場合(1.2.1.2.を1.2.3.4.に) もしくは、2シート1ページを部数印刷で連番にした場合・・・ 是非、お力をお貸しください。 お願いします。