• ベストアンサー

エクセルVBAで、ある範囲を印刷範囲に自動設定する方法

A1・・・・・GR1 までに項目と日にちが入っています。 この下、つまり2行目以下にはところどころデータが入っています。 例えば 2行目以下にデータのある一番右の列がAW列目 2行目以下にデータのある一番下の行が7行目 である場合、印刷範囲をA1:AW7という範囲で印刷設定したいのですが、 まったくわかりません。今まで、サイトを参考にCurrentRegionで印刷 設定を自動でしていたのですが、それでは対応できないようで質問に 参りました。教えてください、よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

VBAでやるなら、まどろっこしいが、各行各列について、最下、最右の最大値を行や列で、総当りで探す。 Sub test01() retu = 26 'Z列まで Gyou = 100 '100行まで c = 1 r = 1 For i = 1 To Gyou For j = 1 To retu ri = Cells(Gyou, j).End(xlUp).Row r = WorksheetFunction.Max(r, ri) Next j cj = Cells(i, retu).End(xlToLeft).Column c = WorksheetFunction.Max(c, cj) Next i Range(Cells(1, 1), Cells(r, c)).Select End Sub というロジックになるのかな。 ーー データの入りそうな最大限を適当に見繕って、それに修正してください。 上記コードは範囲指定だけのコード。 印刷範囲にするなら Range(Cells(1, 1), Cells(r, c)).Select がRange(Cells(1, 1), Cells(r, c)).PrintOut となる。

wait4u
質問者

お礼

ありがとうこざいました。教えていただいたコードを修正して目的のように動かすことができました。 ありがとうこざいました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。 CurrentRegion では 1行目まで拾ってしまうし、UsedRange では値のない セル書式のみのセルまで拾ってしまう、SpecialCells(xlCellTypeLastCell) も同様....ということでしょうか? Find メソッドを利用して最後のセルを探すとか。 Sub Sample()   Dim r As Range   With Worksheets("Sheet1")     ' // 2~シート最終行の範囲で最後のセルを探す     Set r = FindLastCell(Range(.Rows(2), .Rows(.Rows.Count)))     If r Is Nothing Then       MsgBox "2行目以降にデータがない"     Else       .PageSetup.PrintArea = "$A$1:" & r.Address     End If   End With   Set r = Nothing End Sub ' // 指定範囲の値のある最後のセルを返す Public Function FindLastCell(ByVal rSearch As Range) As Range   Dim r As Long, c As Long   On Error GoTo Err_   r = rSearch.Find(What:="*", LookIn:=xlValues, _            SearchDirection:=xlPrevious, _            SearchOrder:=xlByRows).Row   c = rSearch.Find(What:="*", _            SearchDirection:=xlPrevious, _            SearchOrder:=xlByColumns).Column   Set FindLastCell = rSearch.Parent.Cells(r, c) Bye_:   Exit Function Err_:   Set FindLastCell = Nothing   Resume Bye_ End Function

wait4u
質問者

お礼

ありがとうこざいました。大雑把な質問にもかかわらず、 酌んでいただいてご提示いただき助かりました。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>今まで、サイトを参考にCurrentRegionで印刷設定を自動でしていたのですが、 >それでは対応できないようで質問に参りました。 この部分を”どのようにしていたけどダメだった”のか、元のコードと状況を提示してみるとか? 憶測ですけど、空白列と空白行がどこかにあるのかな? UsedRangeを使うとか。。。

すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

例えば Cells(Rows.Count, "AW").End(xlUp) で、AW列の最終データセルを取得できます。 最終データセルが発生する列を特定できない場合は 各列の最終データセルを取得して比較することになると思います。

wait4u
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A