アプリ版:「スタンプのみでお礼する」機能のリリースについて

A1・・・・・GR1 までに項目と日にちが入っています。
この下、つまり2行目以下にはところどころデータが入っています。
例えば
2行目以下にデータのある一番右の列がAW列目
2行目以下にデータのある一番下の行が7行目

である場合、印刷範囲をA1:AW7という範囲で印刷設定したいのですが、
まったくわかりません。今まで、サイトを参考にCurrentRegionで印刷
設定を自動でしていたのですが、それでは対応できないようで質問に
参りました。教えてください、よろしくお願いします。

A 回答 (4件)

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
となる。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/05 17:35

こんにちは。



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/05 17:37

>今まで、サイトを参考にCurrentRegionで印刷設定を自動でしていたのですが、


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

UsedRangeを使うとか。。。
    • good
    • 0

例えば


Cells(Rows.Count, "AW").End(xlUp)
で、AW列の最終データセルを取得できます。

最終データセルが発生する列を特定できない場合は
各列の最終データセルを取得して比較することになると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/05 17:32

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