[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数あるシートをボタン一つで印刷したい』(ショムニ)
恐らく過去ログにあるのだと思いますが、見つけきらずにスイマセン。 Sheet1にオブジェクトのボタンを作成しておき、複数あるシート(2〜13シート)を、 作成しておいたsheet1のボタンを押せば印刷出来る方法はありますか? 恐らくマクロだと思うのですが、マクロは全くの初心者なのでちんぷんかんぷんです… 何方か教えて下さい!!
マクロなど組まずとも、複数のシートを選択した状態で印刷すればよいと思います(庸)
ニュアンスが伝わらなくてすいません。印刷ボタンを作成したいのですが… (ショムニ)
必要なシートを選択して印刷するという一連の動作をマクロの記録して ボタンに登録してあげればよいと思います。 マクロの記録はメニューバーのツールの中にあります。 ボタンの作り方はこちらが詳しいです(庸) [[20050727164210]] 『マクロを使って塗りつぶし』(ばんばん)
すいません。ホントに初心者なモノで… >必要なシートを選択して印刷するという一連の動作をマクロの記録して >ボタンに登録してあげればよいと思います。 ……意味は解るのですが、画面の前で固まってしまいました… どうやって記録したらイイんですか? (ショムニ)
こんにちは! (庸)さんの仰ってるのは印刷したいシートを全部選択しておいてから 印刷のボタンを押したらどうですか?という意味だと思いますよ。 で、それを記録したのが↓です。 どうでしょうか? Option Explicit Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2005/7/30 ユーザー名 : SoulMan
Sheets(Array("Sheet13", "Sheet12", "Sheet11", "Sheet10", "Sheet9", "Sheet8", "Sheet7" _ , "Sheet6", "Sheet5", "Sheet4", "Sheet1", "Sheet2", "Sheet3")).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub (SoulMan)
SoulManさん、無記名さん、フォローありがとうございます。 ショムニさん、そっけない説明ですみませんでした。 マクロの記録の手順を説明しますね。
1. まず、2〜13のシートを選択した状態にします 2. ツールバーからツール>マクロ>新しいマクロの記録をクリック 3. マクロの記録という窓が出てくると思います。 なにやら入力を求められている気がしますが、ほっといてOKをクリック 4. ここからエクセルが記録をはじめました。 ショムニさんのいつものやりかたでひとまずシートを印刷しましょう 5. 先ほどOKをしたときに窓が小さくなって■ボタンが画面上にあるはずです。 印刷が終わったら、それをクリックしてマクロの記録をストップさせます。 6. これで記録が終わりました。どんな結果になっているかを確認しましょう Alt+F11を押し、画面左側の標準モジュールのところをクリック SoulManさんが書いてくださったものと同じようになっているでしょうか?
手順としては以上です。 たとえば、印刷が終わったら自動的にカーソルをA1に戻したいなんてのがあれば 印刷終了のちにA1を選択し、それからストップボタンを押すといいですし このマクロの記録を覚えるといろいろ便利ですよ。 がんばってくださいね(庸)
余りにもあっけなさすぎて、開いた口が塞がらない程でした。 マクロという言葉だけで、鳥肌が立ってたのに、こうして一つ一つ 理解していくと、もう一段ハードルを上げて… みたいなやる気が出てきますね!! 庸さん・SoulManさんホントにありがとうございました。頑張ります!! (ショムニ)
久しぶりに現れてきてすいません。 たくさんの方々に教えて頂いたこのファイルを重宝しながら使用しています!! …が、ココで問題点が一つ。 今のプログラム(そんな大袈裟なモノじゃないケド)ですと、印刷ボタンを押せば Sheet2〜sheet13まで全て印刷されますが、それを「データ入力されているsheetのみ」 印刷しなければならない事例が多々出没してきました… と、言うのもsheet3などは出張精算書なので、人によっては用紙を複数枚用意しておい た方がイイだろう…と言う事で、最初からsheet内に同書式ページを10ページくらい作 成してあげているのですが、それも個人単位で必要枚数に誤差が生じ、2枚でよい人も 6枚でよい人も均一で10枚印刷されてきます。 また、なかには月によってsheet4とsheet8は未実施のため印刷の必要なかったり… 印刷ボタンは【当月提出書類一括印刷】と記述していますが、各シートの表内(入力さ せるセル)にデータが入力されてない場合、そのsheetは印刷対象にならないような方 法はあるのでしょうか? もしこの問題がクリア出来たら、かなり仕事の幅が広がりそうなんですが… (ショムニ)
一つの案ですが、、、 何処かに作業列を作り、印刷チェックなどを入れてみては如何でしょう?
例: 各シートのA1(邪魔にならないセル)に印刷枚数を入力。 若しくは、 >各シートの表内(入力させるセル)にデータが入力されてない場合 とありますので、COUNTA関数などで計算式を入力など。 それを各シートチェックさせるコードを書くのは如何でしょう?
(キリキ)(〃⌒o⌒)b
キリキさんはじめまして♪ 早速のご回答ありがとうございます!! 月日は経っても相変わらず進歩の少ない私でして… ご提案頂けた印刷チェックの件ですが、 例1の「印刷枚数を入力」というのは あらかじめ「もう、このsheetは○枚!!」と決め打ちするのが前提の案ですよね!? コレはちょっと… イメージじゃないかも… すいません。
例2のCOUNTA関数ですが、この単語自体は何となく聞いた事があります♪ それを各シートチェックさせるコードを書く… 何だかそれっぽいですね!! どんなに用紙を用意してあげてても、例えば10行ある表が一つの書類だとしたら 必ずA1には該当日付が入力されたとして、A11が2ページ目の該当日付… A21が 3ページ目の該当日付… みたいにそこんトコに日付(データ)が入力されている 場合に「印刷しろー!!」みたいな命令の関数ですよね? それをマクロに記録してやる…と!! 解りました♪
で…… どうやったら…イイんでしょうか…(T_T) (ショムニ)
>あらかじめ「もう、このsheetは○枚!!」と決め打ちするのが前提の案ですよね!? 決め打ちとでは無いですよ〜 例えば、A1 に「3」と入っていれば、3枚 「0」だったら、印刷しない。 って意味だったんですけど・・・
>人によっては用紙を複数枚用意しておいた方がイイだろう… これは、同じモノを複数枚印刷するって事ですよね? >同書式ページを10ページくらい作成 であれば、そんなにページを作らなくても、印刷枚数を入力してあげれば済みませんか?
ちょこっと作ってみました。 各シートのページ設定はしてあるものとしてます。 各シートの IV1(一番右上)のセルに印刷枚数を入力してみてください。 印刷の必要ないものは、「0」または、空欄にしておいてください。
標準モジュールへ '------------------ Sub test() Dim MySh As Worksheet Dim mai As Long For Each MySh In Worksheets With MySh mai = .Range("IV1").Value If mai > 0 Then Worksheets(MySh.Name).PrintOut Copies:=mai End If End With Next MySh End Sub
(キリキ)(〃⌒o⌒)b
キリキさん。ありがとうございます。 すいません。読解力が無くて… 大きな勘違いをしていました。 やはり、簡単なデータがないと失礼ですね。 今現在の私のマクロが↓これ↓です。(単純にですが…)
Sub 印刷ボタン() ' ' 印刷ボタン Macro ' マクロ記録日 : 2006/1/30 ユーザー名 : ショムニ '
'
Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6", "Sheet7", _ "Sheet8", "Sheet9", "Sheet10")).Select Sheets("Sheet1").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("メインメニュー").Select Range("B3").Select End Sub
といった感じなのですが、このsheet3に先ほど申し上げた、書式が複数枚あるんです。 キリキさんの仰る >>そんなにページを作らなくても、印刷枚数を入力してあげれば… というご意見は重々解りますが、その複数枚は臨時バイト人数(例年の流れから10名が 最大数で月単位で変動)の勤務データなので、 同じデータを使い回し出来ない状態なのです。 メインメニューで、その月のバイトさんの「番号」「氏名」を毎月事前に登録しますの で、その「番号」がsheet3のP4セルに自動反映されます。 そのP4データの有無を拾って印刷に反映出来れば… と考えています。 上記のマクロのどこに、そのような数式を挿入すればよろしいのでしょうか? お手数をお掛けいたします。 (ショムニ)
こんな感じで如何でしょう?
>このsheet3に先ほど申し上げた、書式が複数枚あるんです。 Sheet3だけが、複数枚あるのですか?
Sheet1〜10 IV1 に、印刷枚数を数字で入力 Sheet1〜2,4〜10 IV2 印刷ページ数を入力しておく Sheet3 IV2 =COUNTA(P4,○○,○○,○○) ~~~~~~~~~~~~~~ ココには、データが入力されてページが増えていくセル番地を入力 上のショムニさんが仰っていた例ですと、、、 >例えば10行ある表が一つの書類だとしたら >必ずA1には該当日付が入力されたとして、A11が2ページ目の該当日付… A21が >3ページ目の該当日付… IV2 =COUNTA(A1,A11,A21,A31,A41) の様に入力してください。
標準モジュールへ '---------------------- Sub test() Dim MySh As Worksheet Dim mai As Long, bu As Long For Each MySh In Worksheets With MySh If MySh.Name <> "メインメニュー" Then mai = .Range("IV1").Value bu = .Range("IV2").Value If mai > 0 And bu > 0 Then Worksheets(MySh.Name).PrintOut To:=bu, Copies:=mai .Range("IV1") = "" End If End If End With Next MySh End Sub
これで如何でしょう?
※一度印刷を掛けると、IV1 をクリアしています。 (キリキ)(〃⌒o⌒)b
キリキさん。ありがとうございます。 現在、自宅に帰り手元に資料とファイルがないため、何度も何度も読み返しシュミレーションしています。 早速明日の朝、仕事場で試してみようと思います。 >Sheet3だけが、複数枚あるのですか? …ですが、今現在のところSheet3のみです。 しかし、業務拡張や仕事分担の見直し等で必ずその他の書類もSheet3と同じような扱いになると思います。 あと、IV1もIV2も私の任意のセルに置き換えても構わないんですよね? (ショムニ)
お返事が遅れました。。。
>業務拡張や仕事分担の見直し等で必ずその他の書類もSheet3と同じような扱いになると思います。 それでしたら、Sheet3のような作業列(IV2)を作っていただければ大丈夫です。
>あと、IV1もIV2も私の任意のセルに置き換えても構わないんですよね? お好きな場所(邪魔にならない場所)に作って頂いて大丈夫ですよ〜 ただし、その場合にはコードも修正してくださいね〜♪ Range("○○") ~~~~~~ ココに該当セル番地を入れれば大丈夫です。
(キリキ)(〃⌒o⌒)b
キリキさんこんばんわ!! 試行錯誤の上、イイ感じに出来上がりつつありました!! ただご親切に組んでいただいた >>※一度印刷を掛けると、IV1 をクリアしています。 というのが引っ掛かって完成までに至りません。 私の作成したファイルでは、メインメニューで「どの書類を何部と何ページ印刷しますか?」 という入力指示セルを設けて、そこに数字を入力(入力規則でリスト選択)させてや ると各SheetのLV1及びLV2へイコールさせています。 最初のテストでは上手くいき、やった〜〜!!と思っていたのですが、実践プレゼンで 全く作動しなかっいたため、確認いたしましたところ、各シートリンク先のイコール 関数までクリアされていました。 すぐに結果とご質問の報告を致したかったのですが、諸般事情によるご無礼をお許し下さい。 そのようなクリアを普通にするには、頂いたマクロ内の「.Range("IV1") = ""」を削除 してしまえば良いものなのでしょうか?(Rangeの前にある「.」から削除?!) あともう一息!!お知恵を拝借して下さい!! (ショムニ)
shotaです よろしく
参考までに私が作ったマクロを掲載させていただきます
Public Sub P(TXT As String)
Sheets(TXT).Select If Val(Range("AK1")) >= "1" Then ActiveSheet.PageSetup.PrintArea = "A1:AH48" ActiveWindow.SelectedSheets.PrintPreview End If Range("A1").Select End Sub Sub 印刷() MsgBox " !! OKボタンを押す前に用紙をA4に変えてからOKボタンをクリックしてください !! プレビューの画面に変わった後、メニューから印刷を選択してクリックしてください !! " P "1ページ" P "2ページ" P "3ページ" P "4ページ" P "5ページ" P "6ページ" Sheets("1ページ").Select Range("A1").Select End Sub セルAK1が1以上だったらそのページの範囲"A1:AH48"を印刷するというものです セルAK1には=COUNTA(A1:AH47)という関数を書いておきます 範囲内に1文字でも文字が書かれると数値となって表示されます。 参考になりましたでしょうか (shota)
>実践プレゼンで 全く作動しなかっいたため それはスイマセンでした。。。(T_T) 関数が入っていましたか〜(>_<) そこまで配慮していませんでした・・・
>「.Range("IV1") = ""」を削除 はい。 > .Range("IV1") = "" ココの部分全部取っ払っちゃってください。
連続で命令(マクロ実行)しちゃうと同じモノが2回印刷されてしまうのを 「防ぐため」と思ったのが、かえって失敗してしまいましたね。。。
(キリキ)(〃⌒o⌒)b
キリキさんこんばんわ♪ 失敗だなんて…そんな キリキさんの配慮には本当に感激しているんですから。 お陰様で素晴らしいファイルが作成できました♪ 不思議なもので、完成に近づけば近づくほど、新しい閃きというか…アイデアが浮かんできて… しかし、己を知る上でここら辺が今のところ限界です〜 shotaさんもお初ですが、本当にありがとうございます!! あのメッセージボックスが現れると「おおぉーーっ!!カッコいい!!」とはしゃいでしまいました。 私はVBAは愚か…関数もうろ覚え状態者なので、おふた方やコチラの先生方には尊敬の一言です♪ 出来れば慣れながら少しづつマスターしていきたいのですが、参考までにオススメの著書 なんてありますか? あればで構いませんから知ってたら教えてくださいね♪ この度は本当にありがとうございました。(なんかヤフオクみたい) (ショムニ)
>参考までにオススメの著書なんてありますか? σ(^o^;)的には、このサイトで勉強させて頂いてます。 っていうか、ここの事例を真似していくとすご〜く身に付きますよ〜♪
shotaさんへ、σ(^o^;)も遊びに行っても良いですか? もう行っちゃいましたが(笑 (キリキ)(〃⌒o⌒)b
Q&Aは毎日更新してます
定期的に取ってくださいね
http://www.realintegrity.net/~yancha/ブリーフケースからファイルを取ってくださいね。
24歳で消防に奉職。
46歳で脳梗塞となり、左視床下部という部位をやられ、
右半身が不自由となりました。
自由には動かないんですが動くことは動くんです。
先生曰く「一番悪いのにかかったね」
常に痛いんです。
心臓の鼓動とともに「ズッキズッキ」と痛みが走るんです。
動かそうものならミトコンドリアとATPが反応して熱を持ちとても耐えられそうも無い痛みと熱を感じるんです。
脳梗塞で右半身不随となった私を職場の人は助けてくれ6年間も勤めさせてくれました。退職してから何か人のためにできないかと考えました。その恩返しに「エクセル初心者の方勉強しませんか。」という部屋を開いています。
それでも部屋にお客さんがくると痛みを忘れて対応してます。
ぜひ皆さん、私の部屋に来てください。
よろしくお願いします。
エクセル初心者の方勉強しませんか。
キリキさん 早速のホームページ来訪まことにありがとうございます。
書き込みまでしてくれてとてもうれしかったです。
(shota)
shotaさん。私も伺わせて頂きます!! 人の温かみに触れ、何かを志す。 とても素敵なことですね!! キリキさん。アドバイスありがとうございました。 (ショムニ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.