[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データ表を印刷する時にページ数を印字させるには』(みく)
データ表を印刷すると何枚も出てくる場合に、ページ数をどこかに印字させたいのですが どうしたらいいのでしょうか。 それともうひとつ、データが入ってないページは印刷されないようにしたいのですが、 良い方法があればお願いします。(罫線だけでデータが入ってない箇所)
Thisworkbookモジュールに
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim ws As Worksheet, myR As Range For Each ws In ThisWorkbook.Worksheets Set myR = ws.Cells.Find("*", ws.Cells(1), xlFormulas, xlPart, _ xlByRows, xlPrevious, False, False, False) If Not myR Is Nothing Then Set myR = ws.Range("A1:J" & myR.Row) 'A1からJ列までの最終行まで印刷の場合(適宜変更) With ws.PageSetup .PrintArea = myR.Address .CenterFooter = "&P" End With End If Next ws End Sub
こんな感じでどうでしょう? ページ番号は普通にヘッダーやフッターで設定できますけど一応コード内でも設定してます。 印刷範囲も罫線が無ければEXCEL4.0マクロでGET.DOCUMENT(10)あたりで出来そうですけど。 (momo)
遅くなってすいません。 コード表示に入力すれば良いのでしょうか? 入れて見たのですがうまく行かないのです。どうしてでしょうか。
(みく)
ツール マクロ VisualBasicEditor と進むとエディターが表示されます。 左側にプロジェクトエクスプローラーというのがあると思いますが そこにSheet1、Sheet2とならんで下にThisworkbookという所があると思いますので そこをダブルクリックして開いた画面に貼り付けてください。
あとは印刷プレビューでも動作すると思うのでチェックしてみてください。 (momo)
具体的にデータはどの様に成っているのでしょう?
>データが入ってないページは印刷されないようにしたい と書いて居られますが、こちらからは どのページがデータが入っていて どのページがデータが入っていないか分かりません。 みくさんが見て居られるシートがこちらからは見えませんので。
また、どの様なレイアウトのシートなのかも分かりません。 1行目に見出しで、2行目からデータか? データの上に、空白セルが有ったり無かったりするのか? データが有る行は全ての列でデータが入っているのか? みくさんが見て居られるシートがこちらからは見えませんので。
色々な事は決まっているのではないかと思いますので この辺りを詳しく教えていただけると良いと思うのですが。 みくさんが見て居られるシートがこちらからも見える様に。。。
(HANA)
どうもすいません。 まず、A1:I5に表の見出し部分(○○データ表という名称)がありまして、 A6:I7に項目(日付、商品名、個数等)があります。 データはA8:I500に入ってます。 データ表の印刷には、行のタイトルとしてA1:I7が使われています。 データが入るA8:I500のセルは罫線が引かれています。 データは日付順に上から順番にデータが入って来まして、最終データの下は全て空白の状態です。
ほんとに、ごめんなさい。 よろしくお願いします。
(みく)
間のデータが抜けることが無いのなら、マクロ以外では ↓で純丸さんが書いて居られる方法が使えるのではないかと思います。 [[20090807143307]] 『印刷条件を設定したい』(超初心者グミ)
例えば、K1セルを作業セルにした場合 K1セルに ="A1:I"&COUNTA(A:A)-COUNTA(A1:A7)+7 メニュー・挿入(I)→名前(N)・・・定義(D) 名前(W) Print_Area 参照範囲(R) =INDIRECT(Sheet1!$K$1)
ページ数は、フッタで設定しておいて下さい。 メニュー・ファイル(F)→ページ設定(U) ヘッダー/フッター タブ [フッターの編集(U)]ボタンを押して 左側・中央部・右側 のお好きなところへカーソルを持っていって [#]のボタンをクリック。(&[ページ番号] と設定されます。)
また、ご返信の際は >入れて見たのですがうまく行かないのです。 だけでなく「【どの様に】上手く行かないのか」を一緒に 書いておいていただけると良いと思いますよ。
>コード表示に入力すれば良いのでしょうか? みくさんが言って居られる「コード表示」とはどこの事ですか? ・・・シートタブ上で右クリック→コードの表示(V)で表示される所?
momoさんから返信が有りますが「Thisworkbookモジュールに」 と言う事なので、そこへ貼り付けてやってみてもらえると良いと思います。
右クリック→コードの表示(V)で表示されるウィンドウの左側に ↓が有ると思いますが、これの「c」の所です。![]()
因みに、右クリック→コードの表示(V)で表示される所は「b」の所。
(HANA)
どうもありがとうございます。できました。 とってもとっても助かりました。 ご親切にありがとうございます。 momoさんから教えていただいた方法も出来たのですが、ページ数が表とダブってしまって うまく行きませんでした。 他に方法があればいいのですが。 momoさんもHANAさんも ほんとにありがとうございました。 いつも助けて頂いて感謝してます。
これとは関係の無い話しなのですが、HANAさんの回答に 純丸さんの質問へジャンプさせるように してある箇所がありますが、あれはどのようにするのでしょうか。 それと、エクセルのコード表示が張り付けてありますが、それもどのようにしたらできますか。 何にも知らないのですいません。
(みく)
>あれはどのようにするのでしょうか。 ←[[20100413102223]] 『データ表を印刷する時にページ数を印字させるには』(みく) ↑ 行頭に半角スペースを空けないと自動リンクになります、 行頭に半角スペースを空けると自動リンクになりません。 ↓ ←[[20100413102223]] 『データ表を印刷する時にページ数を印字させるには』(みく) (dack)
リンクの設定の方法は、基本的には↓です。 https://www.excel.studio-kazu.jp/wiki/excelboard/index2.html#link 初めての方へ(詳細版)−[リンクの張り方]
[[ ]]の中に書く番号は [ 初めての方へ | 一覧(最新更新順) | 返信・編集 | 差分 | 全文検索 | 過去ログ | エクセルの学校HOME ] の上の行に有ります。 [[20100413102223]] 『データ表を印刷する時にページ数を印字させるには』(みく) >>BOT ~~~~~~~~~~~~~~~~~~この部分です。 リンクする際は、タイトルなども一緒に書いておいてもらえると リンク先の内容が推測出来るので良いと思います。
また、アドレスの中にもあります。 https://www.excel.studio-kazu.jp/kw/20100413102223.html?t=101016 ここですネ。~~~~~~~~~~~~~~
dackさんが書いて居られますが、先頭から書いておくと自動的にリンクに成ります。
また、リンク先が画像の場合は勝手に表示されるみたいです。 上の画像は、「マクロを消してもマクロの警告」のページの https://www.excel.studio-kazu.jp/tips/0026/ 画像のURLを https://www.excel.studio-kazu.jp/tips/0026/e2n12u.jpg と 先頭が半角スペースで始まっていない行に貼り付けているだけです。
>momoさんから教えていただいた方法も出来たのですが、ページ数が表とダブってしまって >うまく行きませんでした。 .CenterFooter = "&P" この位置が問題だという事でしょうか? 左の場合は .LeftHeader = "&P" 中央が .CenterHeader = "&P" 右の場合は .RightHeader = "&P" で、お好みの位置に設定して貰えば良いと思いますが。。。
また >ページ番号は普通にヘッダーやフッターで設定できますけど一応コード内でも設定してます。 と書いて居られます様に、この部分はコードの中から削除して ご自身で設定する事にしても良いのではないかと思います。
(HANA)
貴重な時間を使ってしまってすいません。勉強になりました。 (みく)
最初の質問の事でうまく行かない事が出てきました。 データ表には式が入ってまして、例えば、セルに「商品の価格×個数」が入ってると 商品のデータが入らなければ計算結果は「0」となり表示されます。 そこでIFを使って、「=IF(B10="","",E10*F10)」のようにセルを空白にして表示させない様にしました。 そして、表を「コピー」し「形式を選択して貼り付け」で「値」を選択しました。 そうすると、データの入っていない箇所にあった数式は空白になりますよね。
そうなれば、データの入っていないところは印刷しないはずなんですが、 データ無しの部分も印刷されてしまいます。 セルを確かめたのですが、セルには何も入っていません。 試しに、空白のセルをDeleteで消して見ました。 そしたら、データが入ってる箇所だけが印刷出来るようになりました。 どうしたら解決できますでしょうか。 説明が下手ですいません。
(みく)
私のコードを使っているのでしたら > For Each ws In ThisWorkbook.Worksheets の後に ws.UsedRange.Value=ws.UsedRange.Value の1行を追加してみてください。 (momo)
もう一度お伺いしてみます。 「具体的にデータはどの様に成っているのでしょう?」
[A] [B] [C] [D] [E] [F] [ 1 ] : [6,7] 日付 商品名 個数 [ 8 ] [ 9 ]
の様に現して 何処が入力されているセルで 何処が数式が入っているセルか。 また、数式が入っているセルの数式は何か。
教えて下さい。
(HANA)
[A] [B] [C] [D] [E] [F] [G] [H] [I] [ 1 ] : [ 6 ]
[ 7 ] 商品 値引き 日付 時刻 [ 8 ] \x{fffd}\x{fffd} 商品名 個数 単価 価格 値引 価格
[ 9 ] 5 450 4/1 08:00 1 ポテト 10 50 500 [10 ] 7 430
[11 ] [12 ] [13 ]
[1]〜[6]は表の見出し部分 [7]〜[8]は項目が入ってまして、A7:A8、B7:B8はセルが結合してます。 [9]以降はデータが入っていきます。(1回のデータ入力で2段使うようになってます) A9:A10、B9:B10、C9:C10、D9:D10、E9:E10、F9:F10、G9:G10 のセルが結合され、 値引きの部分だけ2段に分かれてデータが入るようになっています。
A列、B列には式が入ってまして「=sheet1!A1」 他のシートのデータを持ってきてます。 C列には数値が入ります。 D列にはC列の数値(\x{fffd}ajに合った商品名が表示されるように、式が入っています。 別のシートに商品一覧表が登録してありまして、VLOOKUPを使ってます。 E列には数値が入ります。 F列にはD列と同様にC列の数値(\x{fffd}ajに合った単価が表示されるように式が入ってます。 G列には「=E列×F列」の式が入っています。 H列には数値が入ります。 I列には「=G列-E列×H列」の式が入ってます。
説明がうまく出来ないのですが、データを入力するシートが別にありまして、そこで入力したデータを 「コピー」して上で説明した表に「貼り付け」するようにしてます。マクロを使って、 「貼り付け」する箇所は、A500:I501で、「並べ替え」を使って順番になるように表示させています。 1日分のデータの入力が完了した時点で、セルに入ってる計算式を全部値にするために、表を「コピー」して「形式を選択して貼り付け」で「値」を選択してやっております。
その状態で、教えていただきました ="A1:I"&COUNTA(A:A)-COUNTA(A1:A7)+7 メニュー・挿入(I)→名前(N)・・・定義(D) 名前(W) Print_Area 参照範囲(R) =INDIRECT(Sheet1!$K$1)
これを試して見たのですが、データが入ってないのにも関わらず印刷されます。 試しに、データの入っていない箇所を「delete」で消すとうまく行きました。
うまく説明できなくてすいません。 よろしくお願いします。
(みく)
スルーされてる気がするのでVBA案は無しという事でしょうか? 私のコードでしたらFindメソッドのLookInをxlFormulasからxlValuesにするだけで 数式で""にしてる場合でも数式が入ったままで可能になります。
また値貼り付けで残っている長さ0の文字列("")に対しては元のコードのままでも 対応できていると思いますよ。
無理にVBAをお勧めする訳ではないですが、一応補足という事で。 (momo)
すいません。 スルーしたつもりはないのですが、ちゃんとやって見みたんですよ。 分からないところもあって、ページ数が表に掛かってしまったりとかで悩んでいたのと 印刷が同じ様にうまく行かなかったようで、 悩んでいたらHANAさんから別の方法を教えていただいたので それでやってみたら、うまく行ったのでそちらでやって見ようとおもったのです。
もう1度再挑戦してみますので、ちょっと時間下さい。
無視したつもりはありませんので、機嫌を悪くなさらないで下さい。 (みく)
momoさん、遅くなりました。 出来ました。 表の印刷はデータが入ってないところは印刷され無いようになりました。 でも、ページ数が表と重なってしまいます。 表の上部には余白がありますので、そこに表示させても良いのですが ページ数は必要なので表示させたいのですが、どんな方法でも構いません。 教えて頂ければ嬉しいです。お願いします。
(みく)
あ、特に気を悪くとかは無いので安心してください。 たぶん、関数だとどこの列が最終かとか色々考慮するのが面倒だと思ったので どうかな〜?と思っただけですので。
たとえば上の右側でしたら .CenterFooter = "&P" の部分を .RightHeader = "&P" としてみてください。
もしくは、その行を消してしまって HANAさんが教えてくださったように手作業でヘッダーやフッターに&Pを設定してもOKです。
あと、ヘッダーやフッターの位置は、ファイルのページ設定で変更(余白などを調整するところ) できますので色々調整してみてください。 上手くいくといいですね^^ (momo)
ご親切にありがとうございました。全て解決しました。 ページ数に付いては余白の問題から最終的には下余白を多くして、 表の下部分に表示させる事にしました。 (みく)
あれ?データは9行目からになりましたか?
えっと、解決したようですが。。。簡単な所では >C列には数値が入ります。 と言う事なので =COUNTA(C:C)-COUNT(C1:C8)+8 をやってみてもらって、計算が合うようなら K1セルの式を変更して下さい。
2行ずつを結合している様なので =(COUNTA(C:C)-COUNT(C1:C8))*2+8 としないと、合わないかもしれません。
また、C列に入っている物が実際は数値ではなかった場合 期待する結果は得られないと思いますので E,F,G列などで カウントする事にするのが良いかもしれません。
(HANA)
色々教えて頂きましてありがとうございました。 HANAさんから教えていただきました数式の意味も分からなくて、 印刷も表が途中で切れてしまったりしてましたので、頑張って勉強しまして A列から他の列にしてみたりとか・・・・。 私の情報提供不足でかなりご迷惑掛けてしまいましたね。 すみませんでした。
momoさんから教えていただいた数式もほとんど分からなくて、 ただ貼り付けてうまく行ってる状態で・・・。 みなさんがとっても羨ましいです。 本とか買われて勉強なさってるのでしょうか。
(みく)
えっと、、、C列でOKでしたか?
あっっ!!↑で載せた式間違ってます。済みません。。。 タブン =(COUNT(C:C)-COUNT(C1:C8))*2+8 これで確認してみて下さい。
結果が違う場合は どの様な結果が得られるのか また、実際は何行目まで印刷したいのか G列を参照した「=(COUNT(G:G)-COUNT(G1:G8))*2+8」ではどうか 教えて頂ければと思います。
上手く式が出来れば、解説でもしますので。
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.