• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの印刷について)

エクセルの印刷方法を効率化する

このQ&Aのポイント
  • エクセルの印刷方法を効率化するための方法を教えてください。
  • エクセルの表の内容を印刷する際、名簿から請求書の氏名欄に順番にコピーして印刷する方法はありますか?
  • エクセル上でマクロを利用せずに効率的に印刷する方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

シート2の名前欄に名前を入れることで,あとの数字等がVLOOKUPなどでつるつるっと自動で入るようにしてあるとします。 方法1:エクセルを使う一番標準的な方法 シート2の名前欄にデータメニューの入力規則を設定し,シート1の名前欄を元ネタにして,プルダウンで名前を選択できるように仕込む シート1の仮にB列(例えばB2から最大B30ぐらいの範囲)に名前が一覧されているとすると データメニューの入力規則を選ぶ 種類をリストにする 下の空欄に =INDIRECT("Sheet1!B2:B30") と設定する 名前欄の▼をプルダウンして次々名前を入れ替え,ぽちりぽちりと印刷する。 方法2:大概の人にはあんまり人気がないんだけど一番カタイ方法 シート2のA1:J30ぐらいの範囲に請求書があるとする シート2のB2に名前欄があるとする シート1のB列(B2から)に名前の一覧があるとする シート2のK2に数字の1を記入する シート2のB2に =INDEX(Sheet2!$B$2:$B$30,K2)&"" と記入する A1:K30をコピーし A31に貼り付ける K32に =K2+1 と記入する 31行に改ページを取り付ける 31行から60行を選択し(若しくはA31:K60を選択し),必要数下向けにえいやーーっとオートフィルドラッグする と,必要な帳票が一斉に作成される 改ページプレビューなどで印刷範囲,一枚ごとの印刷範囲を確認した上で,必要なページ範囲を一気に印刷する。 #応用 シート1にリストされている名前の数を拾って,シート2の印刷範囲(3人分ならA1:K90までのように)が自動で設定されるよう仕込む方法もあります。もしもこのアプローチを取るなら,別途新しいご相談で質問を投稿してみてください。 #マクロを使って1枚ずつ「差込印刷」すると,シートに仕込んだ数式があんまり上手く出来て無くて反応がトロイ場合に,印刷に失敗する場合があります。

FIARCE
質問者

お礼

こんにちは。 方法1 を実践してみたところ、▼の作成もでき、私の求めていた印刷が出来ました。 思いついて調べてみたものの、知識を入れ込むのに時間がかかりそうで…聞ける人もおらず…困っておりました。 知識のない私にも分かりやすい、丁寧なご回答ありがとうございました。 すぐに実行にうつせて大変助かりましたので、ベストアンサーとさせていただきました。 方法2 においても、時間の余裕がある時に実践してみたいと思います。 本当にありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 質問に >シート2の氏名欄を書き換えればその人の請求書が完成するようになっている・・・ とありますので、 下記の条件ならVBAで可能だと思います。 (1)Sheet2の氏名欄(仮にA1セルとします)に氏名を入力すれば、関数などで請求書が完成! (氏名入力のみで自動計算) ※ 実際問題として毎回「名前リスト」の人すべてに請求書発行というコトはないと思います。 (月によっては「売上なし」という人もいるはず) そこで一つの案ですが、Sheet3のA列(A2セル以降)に今回請求書を発行する氏名を入力しておきます。 その人だけに請求書を印刷するというVBAにしてみました あくまで一例です。 Alt+F11キー → 画面左下の「This Workbook」をダブルクリック → ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 請求書印刷() 'この行から Dim i As Long Dim ws1, ws2, ws3 As Worksheet Set ws1 = Worksheets("Sheet1") '←「名簿」Sheet Set ws2 = Worksheets("Sheet2") Set ws3 = Worksheets("Sheet3") For i = 2 To ws3.Cells(Rows.Count, 1).End(xlUp).Row ws2.Range("A1") = ws3.Cells(i, 1) '←「A1」部分は実際の氏名入力セル番地を! ws2.PrintOut Next i End Sub 'この行まで ※ Sheet名がついている場合は上記コード内の「Sheet1」・「Sheet2」部分を実際のSheet名に変更してください。 ※ 今回はSheet3のA列に印刷する氏名を入力するようにしてみましたが、 Sheet1「名簿」のA列を挿入しその列に今回印刷する氏名を入力する方が判りやすいかもしれませんね。 その場合は当然コードも変わってきます。 ※ 最初は2~3名分だけの氏名をSheet3のA2セル以降に入力しマクロを試してみてください。 参考になれば良いのですが・・・m(_ _)m

FIARCE
質問者

お礼

こんにちは。 そうですね、毎回すべての人に請求書発行はありません。 マクロを使用する機会がなく勉強不足なんですが、(  )や矢印なので補足していただき、分かりやすく説明して下さっているので、勉強してチャレンジしてみたいと思います。 この回答を印刷して今後の参考にしたいと思いました。 少し時間がかかりそうなので、ベストアンサーの方と迷いましたが、理解力のない私にでもすぐチャレンジ出来たということで…すみません。 ご丁寧な回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

独学で、聞く人もないものがうろうろしているような感じです。 こんなのは、ワードの智識なのですが、「差込み印刷」というのをまず勉強して使えないか考えるものです。 多分できるでしょう。これも思いつかないのはオフィスソフトの経験不足だろう。 ーー エクセルででも、関数と簡単な印刷マクロだけで出来る。 Googleで「imogasi 請求書」で照会すれば、記事が出てくる。関数とVBAの折衷方式。それだけにVBAは印刷する行 だけですむ。 ただもとの記事がどれだったか判りにくいが。 アイデアは (1)元データの各行に連続番号を振る。1社分に1番号。オートフィルででも一発で出来る。 (2)印刷シートで、連続番号を決めた印刷範囲外の1セルに入力する(Nとする)。 (3)関数で元データシートのNという連続番号の行の諸項目を、請求書フォームのそれぞれの項目のところにセットする。 (4)(その1社分)印刷する。 (3)の番号を1づつ変化させることと(4)の印刷は毎回必要なので、VBAで自動化する(4、5行のコード) この考えでは、毎回同じシートの同じ印刷範囲を印刷することに注意。このアイデアがプログラムの経験の無いものには出てこないかも。 ーー もちろんVBAですべて処理しても複雑なコードにはならない。 === そうは言うけれど、質問者にできるかなという気がする。経験をつんでエクセルの基礎力をつける必要があるように思う。 (3)の関数の作り方わかるかな。

FIARCE
質問者

お礼

こんにちは。 調べていて、Wordでの差し込み印刷というのも知ったのですが、エクセルだけで出来ないものかと思ったものですから、ここで質問致しました。 質問にも書かせていただいたとおり、マクロの知識がないのも分かっております。 ご丁寧にご回答いただきましたが、私の理解力では追いつきそうもありません。 単に式を入れる程度の作業ぐらいしかエクセルは使わず、マクロを使う機会がなかったので、勉強してみたいと思います。 ありがとうございました。

回答No.1

こんばんは、私に回答できるのかまだ分からないのですが、一つ事前に質問させてください。 シート1の名簿は毎回、同じ方の名前が同じ順序に並べられているものでしょうか?つまり、シート1はいつも同じでしょうか? また同じではなかった場合、名簿にある人数は同じでしょうか? シート2にある請求書の名前欄のセル番号はいつも同じでしょうか? もしかしたらマクロが使えるかも知れません。 マクロはエクセル内にある機能ですので、エクセルさえあればマクロを使用する事ができますので、その点はご安心ください。

FIARCE
質問者

お礼

こんにちは。 シート1はほとんどいつも同じです。 シート2にある請求書の名前欄のセル番号は同じです。 いち早いご回答をいただいたのですが、マクロ知識のない私でも分かるご回答をいただいておりますので、質問を締め切ることに致しました。 ここを見れておらず、お返事が遅くなって申し訳ございませんでした。 マクロについても、もう少し勉強してみたいと思います。 またご縁がありましたら、ご回答宜しくお願い致します。ありがとうございました。

関連するQ&A