Excelで報告書を印刷するマクロの条件付き設定方法

このQ&Aのポイント
  • Excelの「入力」シート上に配置したボタンをクリックすると、報告書を印刷するマクロが実行されます。さらに、もし「入力」シートのセルA1に何らかの文字が入力されている場合には、「報告書2」シートも印刷されるように、条件付きの構文を追加したいと考えています。
  • 現在、Excelには「入力」、「報告書」、「報告書2」という3つのシートがあります。ボタンをクリックすると、マクロが実行され、報告書が印刷されます。
  • 質問者はマクロを作成する際に、ボタンのクリックに加えて、セルA1が空白でない場合には、「報告書2」も印刷されるような条件を追加したいと考えています。
回答を見る
  • ベストアンサー

EXCELについての質問です。

お世話になります。 現在エクセルに「入力」,「報告書」,「報告書2」の3枚のシートを置き,「入力」シート上のボタンに以下のマクロを登録しています。 Sub 報告書印刷() Application.ScreenUpdating = False Msg = MsgBox("報告書を印刷します。", vbOKCancel) If Msg = vbCancel Then Exit Sub End If Worksheets("報告書").Visible = True Worksheets("報告書").Select Worksheets("報告書").Range("J10").Value = 1 Application.Calculate Worksheets("報告書").PrintOut Worksheets("報告書").Visible = False Worksheets("入力").Select End Sub ボタンをクリックすることにより,報告書は印刷できますが,それに加えて, もし,「入力」シートのセルA1が空白ではない場合(※何らかの文字が入力されている場合)には,「報告書2」シートも印刷される・・ というような条件を付加した構文にしたいと考えております。 知識不足のためかなり背伸びをした質問をしていますが,どなたかご教示いただければ幸いです。 どうかよろしくお願いいたします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

次のようにすることで良いでしょう。 Sub 報告書印刷() Msg = MsgBox("報告書を印刷します。", vbOKCancel) If Msg = vbCancel Then Exit Sub End If Worksheets("報告書").Select Range("J10").Value = 1 Application.Calculate Worksheets("報告書").PrintOut If Worksheets("入力").Range("A1") <> "" Then Worksheets("報告書2").PrintOut End If End Sub

88558855_1979
質問者

お礼

早速のご回答ありがとうございました。 見事に出来ました。 大変参考になりました。

関連するQ&A

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセルのマクロで・・・

    初心者のためどうして良いのかわかりません。 教えてください。 設定したい内容は、 ◇ sheet名"入力"にあるボタンキーをクリックすると、非表示のsheet名"出力"を呼び出し印刷する。 ◇ 印刷条件として、sheet"出力"は3枚のページ(範囲A1-Q37,A38-Q74,A75-Q111)があるが、 2ページ目は"D41"、3ページ目は、"D78"がブランクなら印刷しない。 とりあえず、下記コードで印刷だけはできるようにはなったのですが、"出力"が、「visible=false」だとエラーが起きます。 Sub 出力へ() Dim vbyesno As Integer vbyesno = MsgBox("印刷します", _ vbOKCancel, "明細表") If vbyesno = vbOK Then Worksheets("出力").PrintOut Else Worksheets("入力").Select End If End Sub ここからどうアレンジしていけばいいのでしょうか? アドバイスだけでも結構ですので宜しくお願い致します。

  • VBAで印刷する前にプリンターの設定を変更する方法

    ○シート1の印刷ボタンで印刷するとシート1及びシート2が印刷されます。  シート2だけを印刷するには、どうしたらよいのですか。   ○現状  ・シート2は非表示  ・シート1に印刷ボタン(下記のVBAをマクロ登録済) ---------------------------------------------------------------------- Sub printappointedrange() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) Application.Dialogs(xlDialogPrint).Show 'プリンタ設定 Application.ScreenUpdating = False '画面更新ストップ For Each ws In Worksheets '全てのシートを調べる With ws Select Case .Name Case "シート2" .PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = "" '印刷範囲クリア End Select End With Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintOut ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub --------------------------------------------------------------------

  • エクセルで・・・

    ※マクロ初心者です。 メインシートから非表示にしている入力シートを呼び出したいのですが、EXCEL2000だと下記のマクロで対応できました。 ところがEXCEL97だと”実行時エラー'424' オブジェクトが必要です”と表示されます。 Sub メインから入力() With Worksheets("入力") .Visible = True End With  With Worksheets("入力")   .Select  End With End Sub やっぱり"WITH"を2回繰り返すのは間違いでしょうか?

  • エクセル:チェックボックスで他シート複数図形を操作

    現在、エクセルにて sheet1に帳簿内容入力画面 sheet2に入力画面の項目を反映した印刷用帳簿 というものを作成しています。 その中で、sheet1にチェックボックスを1つ設置し、チェックONでsheet2任意の場所に 4個のオートシェイプの楕円を一括表示、チェックOFFで4つの楕円を一括消去、 とさせたいのですが、うまくいきません。 sheet1上にチェックボックス1個・楕円を1個設置し、 ------------------------------------------- Sub test01() With ActiveSheet If .CheckBoxes(Application.Caller).Value = xlOn Then worksheets("sheet2").Shapes("楕円1").Visible = True Else worksheets("sheet2").worksheets.Shapes("楕円1").Visible = False End If End With End Sub ------------------------------------------- とイベント設定をしたところ、チェックON/OFFで楕円1個の表示/非表示はできるように なりました。 残りの楕円2、3、4を構文内に色々当てはめてみましたが、エラーが出てしまいます。 どのように記述すれば一括表示できるでしょうか。 連投申し訳ないですが、詳しい方アドバイスを宜しくお願いします。

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • エクセルVBAで別シートにコピー貼り付け

    VBA初心者です。下記のようにプログラムしましたがうまくいかなくて困ってます。どなたかお力をお貸しください。内容としましては輸入Partsのシートからコピーして商品内容確認のシートのセルB17に貼り付けたいです。輸入Partsシートで3列目の空白を探し同じ行の1列目をコピーします。商品内容確認のシートのセルB17にはカーソルは動いているようですが貼りつきません。 Private Sub 商品内容確認2_Click() If MsgBox("商品内容確認へ移動しますか?", 33, "移動の確認") = 2 Then MsgBox "処理を中止します。" Range("A2").Select Exit Sub End If Dim Line As String Dim Maxrow As String Worksheets("輸入Parts").Select Line = 2 Do Until Cells(Line, 1).Value = "" On Error Resume Next If Cells(Line, 3).Value = "" Then Cells(Line, 1).Copy 'コピーする Maxrow = Worksheets("商品内容確認").Range("B17").End(xlDown).Row + 1 Worksheets("商品内容確認").Range("B" & Maxrow).PasteSpecial Paste:=xlPasteValues '値を貼り付け End If On Error GoTo 0 '次の行に移り最後の行まで検索 Line = Line + 1 Loop Worksheets("商品内容確認").Visible = True Worksheets("商品内容確認").Select Worksheets("商品内容確認").Range("B6").Select Worksheets("商品内容確認").輸入Partsシート2.Visible = True Worksheets("商品内容確認").輸出Partsシート2.Visible = False Worksheets("輸入Parts").Visible = False End Sub

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • エクセルで質問です。

    エクセルで質問です。 現在マクロを使って簡単な計算表を作っているのですが、エクセルを終了する時にフォームコントロールボタンを使って終了というカタチにしています。(下記参照) Sub 終了処理() Application.DisplayFullScreen = False With ActiveWindow .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True .DisplayWorkbookTabs = True .DisplayGridlines = True .DisplayHeadings = True End With Toolbars(1).Visible = True Toolbars(2).Visible = True Toolbars(5).Visible = True Toolbars(7).Visible = True Toolbars(9).Visible = True Application.DisplayFormulaBar = True Application.DisplayStatusBar = True Application.DisplayAlerts = False Application.Quit End Sub ここまではうまく出来たのですが、終わるときに右上にある×ボタンを使って終わる事が出来ないようにしたい!っていうのが今回の質問です。 皆様のお力をお借りしたいと思いますので宜しくお願い致します。 ちなみに、エクセルを開いた時はフルスクリーンになるようにしています。 trueのところがfalseにしています。

専門家に質問してみよう