- ベストアンサー
エクセル印刷範囲の自動化について
- エクセル2010を使用しています。毎日配送表を印刷しているのですが、印刷範囲を一定のルールに基づいて変えているのですが、マクロなどにより自動化できないかと思い質問させていただきました。
- 個人的にはB列の数字を基準として「B列が<5999」までの範囲を「A~Q列まで」選択といったようにできればイメージに近いものになるのかなぁと思っていますが、力不足でどうすればよいのか分かりません。
- どなたか助けていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! http://okwave.jp/qa/q8869869.html の関連質問でしょうか? 質問文を読み返してみると、結局1行目~B列最終行までを印刷範囲としたい! というように読み取れますので、 その場合は↓のコードにしてみてください。(シートモジュールです) Sub Sample2() Dim lastRow As Long With ActiveSheet lastRow = Cells(Rows.Count, "B").End(xlUp).Row .PageSetup.PrintArea = Range(.Cells(1, "A"), .Cells(lastRow, "Q")).Address .PrintPreview '★ .PageSetup.PrintArea = "" End With End Sub ※ 余計なお世話かもしれませんが、 解釈の仕方によってはご自身で番号が○番~○番までを印刷範囲としたい!というコトかもしれませんので その場合は↓のコードにしてみてください。 Sub Sample3() Dim lastRow As Long, myStart As String, myLast As String With ActiveSheet lastRow = Cells(Rows.Count, "B").End(xlUp).Row myStart = InputBox("開始番号を入力") myLast = InputBox("終了番号を入力") If myStart <> "" And myLast <> "" Then .Range("A1").AutoFilter field:=2, Criteria1:=">=" & myStart, Operator:=xlAnd, _ Criteria2:="<=" & myLast .PageSetup.PrintArea = Range(.Cells(2, "A"), .Cells(lastRow, "Q")).SpecialCells(xlCellTypeVisible).Address .PrintPreview '★ .PageSetup.PrintArea = "" .AutoFilterMode = False End If End With End Sub ※ Sample3の方は手作業でオートフィルタ → 数値フィルタ → 指定の範囲内 で対処できます。 ※ どちらのコードも印刷プレビューまでにしています。m(_ _)m
その他の回答 (1)
- mindatg
- ベストアンサー率48% (110/227)
表を印刷するということで、1~数行目まで文字が入っている事を考慮していますが、 そのB列の数字が昇順で並んでいることを前提にしています B列の数字が不規則に並んでいる場合は対応していません(抽出しているわけではない為) 簡単なエラー処理もしているので、エラー発生時は表示された入力値または行番号を見てトレースできるはずです 以下手順 Alt+F8 でマクロウィンドウを表示、マクロ名を 配送表印刷範囲設定 にして、作成ボタンを押す マクロ編集用のウィンドウが表示されるので、以下をコピーして貼り付ける ' ここから Sub 配送表印刷範囲設定() Dim stInput As String Dim iNum As Integer Dim iRow As Integer Dim lcnt As Long ActiveSheet.PageSetup.PrintArea = "" On Error GoTo Err ' 毎回入力するのが面倒臭くないよう、デフォルト値を5999にする stInput = InputBox("hoge", "値を設定する", 5999) iNum = CInt(stInput) ' 環境によっては100万行でもよい ' 数値の入ったB列で万一抜けがあった場合を考慮し、下から上へ見ている For lcnt = 65535 To 1 Step -1 ' 一度セルの値をINT型に変換する(文字ならエラーに飛ぶ) If Len(Cells(lcnt, 2).Value) > 0 Then iValue = CInt(Cells(lcnt, 2).Value) Else GoTo continue End If ' 指定した条件以下が見つかればそこを印刷範囲の最終行にする ' もし行末から最初に条件と一致した場合にするなら、iValue = iNumにすると良い If iValue <= iNum Then iRow = lcnt Exit For End If continue: Next lcnt ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(iRow, 17)).Address Application.StatusBar = "印刷範囲、B " & iNum & " で設定しました" 'ActiveSheet.PrintPreview Exit Sub Err: Call MsgBox("処理を中止しました。エラーかも 入力値:" & stInput & "、ループ:" & iValue & "行目") Application.StatusBar = False End Sub 'ここまで 貼り付けたらマクロ編集ウィンドウを閉じ、再びAlt+F8 「オプション」ボタンが押せるようになるので押す。 好きなショートカットを割り当てる(ここでは大文字のMを割り当て。小文字ならCtrl+という表示になる) 書きたければ説明文を書き、OKボタンでオプションウィンドウを閉じる マクロウィンドウも閉じる ブックを一旦保存する あとはCtrl+Shift+Mでマクロを実行後、印刷する Ctrl+F2で印刷プレビューを見られるので、ショートカットを活用することで作業効率が上がるでしょう。