ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの任意のシートのみを印刷したいのですができますでしょうか?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
どうもこんにちは。

現在顧客の出納帳を作成しています。
ブックにはシートごとに顧客の出納帳を作っています。
コレを印刷したいのですが、今までは個別に印刷をしていたのですが顧客数が増えてきて出来れば一括で印刷したいのですが顧客の中には印刷しない顧客もいまして、できれば任意に顧客を選択し、選択された顧客のシートを一括で印刷したいと思っています。(説明が下手ですいません

例えば、Wordの差し込み印刷の宛名選択のように現在ブックに存在するシートをチェック形式で選択し、選択したシートのみを印刷することはできますか??

できるならどのような作業をすればいいのでしょうか??

宜しくお願いします。

XP 2003 です

コメント(13)

以前同じ質問をしてマクロを書いて頂いたことがあります。

複数シート 印刷

あたりで検索したら出てきたりしないかなぁ。なかったらまた言って下さい。
単純なのは、Ctrlキーを押しながら、印刷したいシートのタブをクリックして複数シートを選択した状態にしておいてから、普通に印刷する方法です。

そうじゃないなら、ループさせてシート毎に印刷可否を判定させて印刷するマクロを組むのが手っ取り早いかと思います。
みなさんありがとうございます。
すいませんあせあせ(飛び散る汗)説明が全然足りてませんでしたあせあせ(飛び散る汗)

シート数自体は10〜30程度の枚数なのですが私の作っている出納帳は普通に印刷するのではなく帳簿データの最終行から3行ほど下に署名を入れるため、印刷マクロを組んでいます。
≪印刷マクロ概要≫---------------------------------
シート最終行を取得
シート最終行までを罫線で囲む
セル(最終行+3,1)に署名1("文字列1")を代入
セル(最終行+4,2)に署名2("文字列2")を代入
印刷プレビュー
印刷
---------------------------------------------------
ってなかんじです。
これを複数シートを選択(作業グループ)で実行するとシートによって最終行が違う為、必要なデータが失われてしまうのです。

なので、私が今考えている作業はまずユーザーフォームに一括ボタンを配置し、一括ボタンを押すと以下の動作をさせたいのです。
?シート一覧(ユーザーフォーム?)から印刷するシートを選択
?選択されたシートを表示(普段は作業の操作性のため入力しているシート以外は非表示になっている)
?表示されたシートごとに上記の印刷マクロを実行

多分こんな感じなんですが。。。

本当はブックを公開できれば分かっていただけるのですが。。いかんせんもろに個人情報が記載されているので公開できません。。。すいません。
とすると、こんな感じのコードになるかと思います。

  Dim shtA As Worksheet
  For Each shtA In ThisWorkbook.Worksheets
    If [shtAが印刷条件を満たす] Then
      シート最終行を取得
      シート最終行までを罫線で囲む
      セル(最終行+3,1)に署名1("文字列1")を代入
      セル(最終行+4,2)に署名2("文字列2")を代入
      shtA.PrintOut
    End If
  Next shtA
ありがとうございました。

色々調べて解決できました。
後の人の為に、どうやって解決したのかも書いていただけませんか?

#009のやり方?
遅くなってすいません。
解決方法ですが、私の場合ユーザーフォーム4(写真1)を作りコマンドボタン1(印刷ボタン)をつけて以下のように記述いたしました。
<ユーザーフォーム4>
Private Sub UserForm_Initialize()’ユーザーフォーム4表示初期値
Application.ScreenUpdating = False '画面固定
Dim arNameList() As String 'リスト項目を格納する動的配列
ReDim arNameList(5 To Worksheets.Count) '動的配列の再定義
For i = 5 To Worksheets.Count 'すべてのワークシート名を配列に格納
arNameList(i) = Worksheets(i).Name
Next i
ListBox1.List = arNameList
ListBox1.MultiSelect = fmMultiSelectExtended
Application.ScreenUpdating = True '画面固定解除
End Sub
Private Sub CommandButton1_Click() '印刷ボタン押す
Dim 結果 As Long
結果 = MsgBox("印刷時に下記の署名を挿入しますか?, vbYesNo)
If 結果 = 6 Then
Application.ScreenUpdating = False '画面固定
For i = 0 To ListBox1.ListCount - 1
Dim 最終行 As Long
If ListBox1.Selected(i) Then
Worksheets(ListBox1.List(i)).Visible = True
Worksheets(ListBox1.List(i)).Activate
最終行 = Columns(6).Find("*", Cells(Rows.Count, 6), xlValues, , , xlPrevious).Row
印刷範囲設定’別マクロで印刷範囲を指定
Unload UserForm4
罫線’別マクロで罫線を引く
Range(Cells(最終行 + 3, 1), Cells(最終行 + 3, 6)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "署名1"
Range(Cells(最終行 + 4, 2), Cells(最終行 + 4, 6)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "署名2"
Range(Cells(最終行 + 5, 2), Cells(最終行 + 5, 6)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = "署名3"
ActiveSheet.PrintOut’印刷
Range(Cells(最終行 + 3, 1), Cells(最終行 + 5, 6)).Select’署名を入れた範囲を指定
Selection.ClearContents’選択セル範囲をクリア
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range(Cells(最終行 + 3, 1), Cells(最終行 + 5, 6)).Select
Selection.UnMerge’選択セルの結合を解除
Range("A1").Select
Range(Cells(最終行 + 1, 6), Cells(最終行 + 2, 6)).Select
Selection.AutoFill Destination:=Range(Cells(最終行 + 1, 6), Cells(最終行 + 6, 6)), Type:=xlFillDefault
Range(Cells(最終行 + 3, 6), Cells(最終行 + 5, 6)).Select
Range("A1").Select
End If
ActiveSheet.PageSetup.PrintArea = ""
Worksheets(ListBox1.List(i)).Visible = False
Next
Application.ScreenUpdating = True '画面固定解除
Ans = MsgBox("一括印刷が完了しました", vbOKOnly, "印刷の完了")
UserForm1.Show vbModeless
シート非表示
End If
End Sub

としました。いろんなサイトで拾ってきたコードを記述していったので必要のない記述も見られるかもしれませんがそこは御愛嬌ってことでお願いします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。