dポイントプレゼントキャンペーン実施中!

エクセル2010を使用しています。
毎日配送表を印刷しているのですが、印刷範囲を一定のルールに基づいて変えているのですが、マクロなどにより自動化できないかと思い質問させていただきました。

条件は下記の通りです。
(1)印刷範囲はA列からQ列まで
(2)行は日によって変化する
(3)B列には1~5999までの数字が打ち込まれており、日によって「3999」まで「4999」までと変動あり
(4)変動する最後の数字の行まで、A~Q列全てに情報が打ち込まれているが、それ以降の行、列ともに空白の状態

個人的にはB列の数字を基準として「B列が<5999」までの範囲を「A~Q列まで」選択
といったようにできればイメージに近いものになるのかなぁと思っていますが、力不足でどうすればよいのか分かりません。
どなたか助けていただけないでしょうか??

A 回答 (2件)

こんばんは!



http://oshiete.goo.ne.jp/qa/8869869.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
    • good
    • 0

表を印刷するということで、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で印刷プレビューを見られるので、ショートカットを活用することで作業効率が上がるでしょう。
「エクセルの印刷範囲について」の回答画像2
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!