- ベストアンサー
エクセルで作る見積表の抽出印刷方法??
エクセルで見積表を作りたいと考えています。商品名、単価をあらかじめ入力しておいて、後で数量さえ入力すれば合計金額が出るという、よくあるタイプのものです。 しかし、ここまでなら私にも作成出来るのですが、問題はこの後です。数量を入力した商品、単価、数量、金額、最終的な合計金額のみを印刷できるようにしたいのです。つまり、その都度、数量を入力していない商品(行)を省いて印刷したいのです。そうしないと商品の量が多い為に、大変な枚数になってしまい、分かり難い見積表となってしまいます。 また、もう1つお願いがあるのですが、実際、見積表の数量を入力する営業さん達は、エクセルについては超初心者ばかりです。抽出して印刷する方法は、出来るだけ分かりやすいものだと助かります。しかし無理であれば、どんな方法でも構いません。教えてください!!宜しくお願いします。補足が必要であれば致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
いろいろな方法があると思いますが意外と 簡単なマクロの組み方を一つの例として挙げます! 前提: (1)シート名をSheet1とする。 (2)A列=商品、B列=単価、 C列=数量、D列=金額とする。 (3)1行目は見出し行とする。 (4)メニューバーのファイルより 印刷範囲の設定を行なう (A列~D列を印刷) 作成手順: (1)コマンドボタンを用意する。 1行目E列に1個「編集」 1行目F列に1個「戻す」 用意の方法 1:メニューバー/表示(v) /ツールバー/コントロールツールボックス にチェックするとツールバーに ボタンが表示される 2:そのなかのコマンドボタンをクリック する。 (マウスポインタをあてれば名称が出ます) 3:シート上の作成したい場所で好きな大きさに ドラックする。 4:出来たコマンドボタンを 右クリックし、 コマンドボタンオブジェクト/編集にて ボタンの表面の文字を編集する。 (2)「編集」ボタンをダブルクリックすると 下記の表示が出てくる Private Sub CommandButton1_Click() End Sub 上記の間に下記を追加する。 Private Sub CommandButton1_Click() Dim i As Integer i = 2 Do Until i = -1 If Worksheets("Sheet1").Cells(i, 1).Value = "" Then i = -1 Else If Worksheets("Sheet1").Cells(i, 4).Text = 0 Or _ Worksheets("Sheet1").Cells(i, 4).Text = "" Then Worksheets("Sheet1").Rows(i).Select Selection.EntireRow.Hidden = True End If i = i + 1 End If Loop End Sub 上記は、2行目より1行づつ、商品が記入されている 間、金額が0か、そうでないかのチェックを行い、 金額が0の場合、行を非表示にしている。 商品欄が空白になった行でチェック終了とする。 この書き込みが終了したら一番上の×ボタンで画面を 閉じて下さい。シートに戻ります。 (3)「戻す」ボタンをダブルクリックすると 下記の表示が出てくる Private Sub CommandButton2_Click() End Sub 上記の間に下記を追加する。 Private Sub CommandButton2_Click() Worksheets("Sheet1").Cells.Select Selection.Rows.Hidden = False End Sub 上記はSheet1の行非表示を元に戻しています。 (2)と同様画面を閉じて下さい。 (4)シートにもどったら、デザイン画面から実行画面に 変更します。 方法は、ツールバーのアイコンで 三角定規と定規と鉛筆が組み合わさったような絵が ONになっていると思うのでクリックしてOFFに してください。 編集する場合はこれをONにするとマクロの編集 が可能です。 (5)以上でボタンをクリックするだけで 不必要な行が非表示になり、印刷されない状態になり ます。 入力するさいは戻すでもとにもどせば入力できます。 次にこのファイルを開く時 「マクロを有効にしますか?」の メッセージが表示されるので、 「有効にする」で開いてください。 どうでしょう!(^-^)
その他の回答 (4)
ごめんなさい、抜けてました。 たしかにこれだけでは印刷できないですね… 4のcを修正させてもらいます。 4:印刷用マクロを作成する a まず納品書シートに画面を戻し、個数欄に例として数を入力しておく b 「ツール」→「マクロ」→「新しいマクロの記録」→マクロ名「印刷」・マクロの保存先「作業中のブック」→ OK(ここからマクロの登録開始) c 印刷用シートに画面を写す→「データ」→「フィルタ」→「オートフィルタ」→「オプション」→ 抽出条件の指定「0と等しくない」→OK→「印刷」→ 記録終了 見積表シートを修正し、印刷ボタンを押すと、 ボタンに登録したマクロが実行されて 修正結果が反映されるようになってます。 (逆にいえばボタンを押さないと修正が反映されません。) もし毎回印刷が必要という訳ではなく、 結果の反映を見てから印刷したいというのであれば 4で印刷ボタンのかわりに反映(実行)ボタンを作成し、 印刷用シートを「印刷」でプリントアウトしてもいいと思います。 反映用マクロの作成は、私がANo.#4で書いた4と全く同じです。 これでまだ不具合であればまた補足下さい。
お礼
回答ありがとうございます。hicatさんの回答通りにやってみたら出来ました! 皆さんにご回答頂いた内容を試しているのですが、分からないものもあり、再度質問をしております。もし時間がありましたら、そちらの方も見てみてください。あつかましくてほんとスミマセン!宜しくお願いします。 何度もご親切に回答を頂き、今回は本当にありがとうございました。
これでどうでしょうか・・・ 1:見積表書式を作成する(これを見積表シートとする) 2:見積表シートをシートコピーし、印刷シートを作成する 3:見積表シートに入力したら印刷シートへ反映するようにセルをコピーする。 (相手会社名・日付・個数等、営業の人が入力するであろう箇所をコピー) 4:印刷用マクロを作成する a まず納品書シートに画面を戻し、個数欄に例として数を入力しておく b 「ツール」→「マクロ」→「新しいマクロの記録」→マクロ名「印刷」・マクロの保存先「作業中のブック」→ OK(ここからマクロの登録開始) c 印刷用シートに画面を写す→「データ」→「フィルタ」→「オートフィルタ」→「オプション」→ 抽出条件の指定「0と等しくない」→OK→記録終了 5:営業さんに分かりやすいように印刷ボタンを作る a 「表示」→「ツールバー」→「フォーム」 b 「ボタン」→ボタンを作る→マクロの登録「印刷」を選択→OK c 作ったボタンを右クリックし、「テキストの編集」で名前を「印刷」に変える 4・5と同様の手順で「クリア(消去)」を作ったり、 営業の人が入力する箇所に「塗りつぶし」を作っておくと親切でしょうね。
補足
お返事ありがとうございます。 分からない点がありましたので、教えてください。 この方法だと、数量を入れ終わった後に訂正をしたい場合、もとの見積表シートを修正しても、自動的には印刷用シートに反映されませんでした。フィルタの逆三角マークを押して、「すべて」にすればでましたが・・・。どうしてでしょうか?やりかたが違うのでしょうか? また、印刷ボタンですが、出来る事は出来ましたが、これを押すと印刷できるのですか?私が作ったボタンでは、表が範囲指定されるだけで印刷までは出来ませんが、そういったものなんでしょうか?宜しくお願いします。
- tirta
- ベストアンサー率42% (44/103)
マクロは操作の自動化とでも言うんでしょうか? 複数の動作を一度に自動処理できるので大変便利ですが・・・ ある程度簡単なものなら前述のように 「ツール→マクロ→新しいマクロの記録」を選択後自分のやりたい 操作をそのまま実行します。それが終わったところで「マクロの 記録終了」をクリックすれば完成 という事になります ただしこの作業中の行為はすべて記録されるため 間違ったことも、それを「やり直し」をかけてもすべて記録されます。 これを「フォーム → ボタン選択 →ボタンにマクロを登録」と なって初めてボタンいっぱーつ状態になるのですが・・・ ちなみに「マクロ」が出ない場合は追加インストールになるんじゃ なかったっけ・・・? またこういう「記録だけ」で作ったマクロはいかなる状況においても 自分の思ったように動くわけではないため、正直現時点ではお勧めできません。 通常はVBAというかたちでマクロのための「特別な文法」で作成します。 このへんはもっと上級の方が書いてくださるかも。 ちなみに先ほど紹介したサイトはマクロの解説もあります。 マクロを簡単に「記録」で作成するにせよ、先ほどの私のつたない回答で 得られる結果になるのかどうかわからないと、お答えもしようがないのです あまりお役に立てずすみません 私も仕事中人目を盗んでの書き込みです(笑)
- tirta
- ベストアンサー率42% (44/103)
発注がなければ、数量の部分はブランクですか、0ですか?わかんないので それは回避して、個数の列に データ→フィルタ→オートフィルターの順に選択 オートフィルターのプルダウンリストが現れたら上から2番目の オプションをクリック 左のプルダウンに1 右のプルダウンに「以上」を設定 反対にすべて表示するときはオートフィルターのプルダウンリストの中から 「すべて表示」にするか「データ→フィルタ→オートフィルターのチェック まーくをはずす」です これで一様おっしゃってるような形になりませんか? この一連の動作をマクロ記録して、ボタンに登録すれば他の方も使いやすく なると思いますが・・・ ちなみにエクセルの質問の場合バージョンも書き込んだほうがいいですね 下のサイトはとても参考になると思います
補足
早速のお返事ありがとうございます。 バージョンは、2000の1個前(←97かな?すみません!)です。ところで、マクロ記録って何ですか?すみません、やり方も含めておしえてください。宜しくお願いします。
お礼
すみません!私の入力の仕方がおかしかったようです。 kukkychanさんの入力通りをそのままコピーして貼りつけたら出来ました! ありがとうございました。
補足
お返事ありがとうございます。 早速やってみたのですが、「編集」をクリックすると、「構文エラー」が出ます。 下記の部分なのですが、再度、教えてください。 「 If Worksheets("Sheet1").Cells(i, 4).Text = 0 Or _ 」 最後の「Or」の部分が怪しい気がします。(ここを直せマークみたいなものが出てました) 宜しくお願いします!!