• ベストアンサー

エクセルのマクロ(Arrayの使い方)について困っています

複数のシートを印刷する場合、現状は以下でおこなっているが  For S = 1 To Range("N5") SheetName$ = Range("N5").Offset(S, 0) Worksheets(SheetName$).PrintOut Next これを印刷コマンドを1回で複数枚のシートを指定して実行したい:その理由はプリンターの機能で1枚のシートに2枚分を縮小印刷するなど である。  Sheets(Array("Sheet1", "Sheet2", "")).Select SelectedSheets.PrintOut みたいにしたいが、シート名を変数として指定、枚数も変数扱いで実行させるための方法がわからない。 Arrayの()内を変数にして""(ダブルクォーテーションマーク)で括った文字列をカンマ区切りして1つの変数とするにはどのようにすればマクロが成立するのか誰か教えてください

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 試してないけど、、、 For S = 1 To Range("N5")  SheetName$ = Range("N5").Offset(S, 0)  Worksheets(SheetName$).Select False Next SelectedSheets.PrintOut

kazu828
質問者

お礼

早速の回答、有難うございました。 Select Falseとは知りませんでした。 確かに必要なシートを全て選んだ後の印刷命令で出来るんですよね。 また何かあったらお願いします。 最後のSelectedSheetsには頭にWindows(**).を入れないとエラーになってしまった。

関連するQ&A

  • エクセルでマクロの実行回数をセル参照するマクロ

    いつもお世話になっております。 A1の数字の分だけ印刷するマクロを以下のように理解しました。 Dim n As Integer n = Application.WorksheetFunction.Sum(Worksheets("Sheet3").Range("A1")) ActiveWindow.SelectedSheets.PrintOut Copies:=n, Collate:=True これとは別に、 B1の数字(値)を参照して、 ”マクロ2”というマクロの実行回数を指定したいのです。 単に一回実行するだけなら Application.Run "マクロ2" ですね。 実行回数を指定する場合、 どのように記述すればよいかご教示ください。 よろしくお願いします。

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

    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を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセル マクロ 印刷指定

    マクロが解りません。色々調べてマクロの記録を使って、下記のマクロを作りました。 1枚目の印刷を2枚目、3枚目印刷として書き足してみました。 しかしエラーが出て2番目のシートからの印刷ができません。 Sub 連絡票印刷() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+p ' Sheets("連絡票").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("連絡票").Range("p1").Value, To:=Sheets("連絡票").Range("q1").Value, Collate:=True, IgnorePrintAreas:=False Sheets("予定表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("予定表").Range("y1").Value, To:=Sheets("予定表").Range("z2").Value, Collate:=True, IgnorePrintAreas:=False Sheets("配車表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("配車表").Range("s1").Value, To:=Sheets("配車表").Range("t2").Value, Collate:=True, IgnorePrintAreas:=False Dim str As String str = Worksheets("連絡票").Range("r1") Worksheets(str).Select End Sub いろいろ解らないなりに書き換えをしてみましたが、やっぱり2番目のシートから印刷ができません。 教えていただけませんでしょうか。

  • 複数のシートをマクロで印刷

    印刷したい複数のシートをアクティブ状態にして以下のマクロを実行すると、余計に印刷されてしまいます。 Sub Test()  Dim ws As Worksheet  For Each ws In ActiveWindow.SelectedSheets   ActiveWindow.SelectedSheets.PrintOut _   Copies:=1, Collate:=True  Next ws End Sub 例えば、Sheet1とSheet2を選択して実行すると、Sheet1とSheet2が二部ずつ印刷されます。また、Sheet1とSheet2とSheet3を選択して実行すると、それぞれが三部ずつ印刷されます。 それぞれを一部ずつ印刷するためには、マクロをどう直せばいいでしょうか?

  • MS-EXCEL VBA (マクロ) の書き方

    エクセルの複数シートのデータを両面印刷可能なプリンターで、両面印刷するためのマクロを書きたいのですが、どうしてもうまく行きません。 シート名は、1,2,3,4 と4シートで、それぞれのシートにA4用紙1枚分のデータがあり、それが印刷範囲に指定されています。それら4枚分の印刷範囲を、1枚のA4用紙に、2ページを1ページに圧縮+両面印刷 で印刷したいのですがどうしてもうまく行きません。(プリンターのプロパティ設定はマクロ実行前にSheet1で行っているのですが。) どなたかお分かりになる方、お手数ですがご教授願えませんでしょうか。 補足:ちなみに、4ページ分を1ページに印刷して、片面での印刷は以下のマクロで出来ています。 Sheets(Array("1", "2","3","4")).Select Sheets("1").Activate 'この時Sheet1で、プリンターのプロパティで、4ページを1ページに印刷を選択してある。 ActiveWindow.SelectedSheets.PrintOut Copies:=1 よろしくお願いします。 ちなみにプリンターは事務所のネットプリンターで、TOSHIBA e-STUDIO4520CSeriesPCL6 です。

  • エクセル VBA arrayについて

    arrayの使い方についてご教授をお願いします。 以下の記述はワークシートが3枚あり、それぞれの最終行を調べ、arrayに読み込んでいます。いつもは変数を3つ設定しシート毎に各変数にセットしているのですが、以下の簡単な記述を知る機会があり勉強をしています。なぜ各シートをループし、その都度ちゃんと最終行を読込んでいるのか教えて頂きたいと思います。 また他のホームページで解説等を見ると、最初からarrayの( )の中に複数の文字等が並んでおり、それを取出す使い方が書いてありますが、このように検索結果をarrayに読込む場合の( )の中は0を入れて置けばよいのでしょうか? 初心者のため、わかりずらい文で申し訳ありません。エクセル2000を使用しています。 Sub kk() Dim lastrow As Variant lastrow = Array(0, 0, 0, 0, 0) For m = 1 To 3 n = 1 Do While Sheets(m).Cells(n, 1) <> "" n = n + 1 Loop MsgBox n - 1 lastrow(m) = n - 1 Next End Sub 最終行の取得方法は他にもある事は理解しています。よろしくお願いします。

  • 再び印刷マクロを

    フィールド行はA列からT列までなのですが、途中のK列からN列までは印刷したくないために、2行のマクロ Range("K1:N1").EntireColumn.Hidden = True Range("A1:S1").PrintOut を挿入したのですが、エラーとなってしまいます。 印刷マクロは下のようになっています。 Sub 最終処理分印刷() '----- 印刷範囲 列指定 --------- Const Sh = "入力シート" '  <----- シート名指定 Const Left_Col = "A" '  <------ 印刷範囲の左端列 Const Right_Col = "S" '  <----- 印刷範囲の右端列 Const Target_Col = "T" ' <----- 印刷データ判定列(日付形式) Const Prev_Mode = 1 '  <----- 0 = 直接印刷 /  1 = プレビュー '------------------------------ Dim TopRw As Long Dim EndRw As Long Dim Target_Date As Date Dim N As Long With Worksheets(Sh)  EndRw = .Range(Target_Col & "65536").End   (xlUp).Row TopRw = EndRw Do While .Range(Target_Col & TopRw).Value = _ .Range(Target_Col & TopRw).Offset(-1).Value TopRw = TopRw - 1 If TopRw = 1 Then Exit Do Loop Range("K1:N1").EntireColumn.Hidden = True Range("A1:S1").PrintOut N = EndRw - TopRw + 1 .PageSetup.PrintArea = Range(Left_Col & TopRw & _ ":" & Right_Col & EndRw).Address If Err.Number > 0 Then Exit Sub End If If Prev_Mode = 1 Then .PrintOut preview:=True Else .PrintOut preview:=False End If .PageSetup.PrintArea = False End With End Sub

  • エクセル マクロの作り方

    はじめまして エクセルのマクロ初心者です。 ツール→マクロ→新しいマクロの記録にて 開いているシートをA1~V68まで(すべての範囲でもOKです)をコピーし、別の貼り付け用シートに貼付、3つのタブを印刷して閉じ、開いているシートを表示する。という内容のマクロを登録しました。 台紙で以上のマクロを登録し、台紙を複製しました。 マクロを実行すると複製されたシートのA1~V68までではなく、台紙のA1~V68までが印刷されて困っています。 どうすれば解決するでしょうか???詳しい方おしえてください。 尚、下記に記録されたものを載せておきますので、訂正部分など教えてもらえたら助かります。 (マクロの記録の上部を訂正すると良いような気はするのですが…。初心者なのもので範囲の指定の仕方がわるいのでしょうか???) よろしくお願いします。 Sub マクロ名() ' ' マクロ名 Macro ' マクロ記録日 : 2007/10/14 ユーザー名 : ??? ' ' Application.Run "hozon1.初期" Range("A1:V68").Select Selection.Copy ChDir "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿" Workbooks.Open Filename:= _ "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿\平日,日曜、祭日点呼簿.xls" Cells.Select ActiveSheet.Buttons.Add(509.25, 1.5, 72.75, 12.75).Select ActiveSheet.Paste Sheets("大型1").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("大型2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("小型1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.Close ActiveWindow.SmallScroll Down:=-51 Range("J3").Select End Sub

  • Excelマクロ/選択したシートを任意の枚数印刷

    sheet1~sheet5のワークシートがあるとします。 その中で印刷したいシート(複数)を選択し、それぞれのシートのA1セルに入力している数字の 枚数を印刷する、ということを考えています。 そのときに印刷したいシートを選択するので、もちろんシートを選択するのは手動で、 その後、マクロを実行するイメージです。 以下のマクロでいけるかと思ったのですが、仮にsheet1、sheet3、sheet5を 選択して、実行すると、それぞれのA1が、5,7,10であったとしても、3つのシートを 5枚ずつ印刷してしまいます。 (やりたいことはsheet1が5枚、sheet3が7枚、sheet5が10枚、です) Sub insatsu() Dim mySheet As Worksheet Dim m As Integer For Each mySheet In ActiveWorkbook.Windows(1).SelectedSheets m = range("A1").Value mySheet.PrintOut Copies:=m Next End Sub なにか良い解決法があればご教授ねがいます。

  • 印刷枚数を指定して印刷(印刷しないシートを含む場合)

    マクロ(VBA)の超超初心者です。 エクセルのブックの全シート(13sheet)の印刷を1つのシートで管理するマクロを作りたいと思っています。 下記のマクロでチェックしたシートのみ印刷することは可能になりました。 Sub チェックしたシートの印刷() Dim rng, shChk, PrtSh For Each rng In Range("IDX") If rng.Offset(0, -1) = 1 Then shChk = shChk & rng.Value & "," End If Next shChk = Left(shChk, Len(shChk) - 1) PrtSh = Split(shChk, ",") Sheets(PrtSh).Select ActiveWindow.SelectedSheets.PrintOut End Sub そこにさらに印刷枚数を指定して印刷したいのですが、下記のマクロだと、0枚(印刷しないときの)の設定ができません、、、 0枚でもマクロを実行できるよにするにはどうしたらよいのでしょうか、、、 さらに、このマクロを簡単に書きたいのです。(ほぼ同じことの繰り返しなので、、、、) Sheets("sheet1").PrintOut Copies:=Range("A1").Value Sheets("sheet2").PrintOut Copies:=Range("A2").Value ・     ・ ・ Sheets("Sheet13").PrintOut Copies:=Range("A13").Value End Sub 超超初心者があつかましい質問ですが、ご教授のほうよろしくおねがいいたします。

専門家に質問してみよう