Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6316 / 13644 ツリー ←次へ | 前へ→

【45895】印刷ページの最後のセル yama 07/1/17(水) 13:21 質問[未読]
【45896】Re:印刷ページの最後のセル ぱっせんじゃー 07/1/17(水) 13:31 発言[未読]
【45900】Re:印刷ページの最後のセル yama 07/1/17(水) 18:02 質問[未読]
【45916】Re:印刷ページの最後のセル ぱっせんじゃー 07/1/17(水) 19:46 発言[未読]
【45949】Re:印刷ページの最後のセル yama 07/1/18(木) 16:21 お礼[未読]
【45920】Re:印刷ページの最後のセル ichinose 07/1/17(水) 21:03 発言[未読]
【45951】Re:印刷ページの最後のセル yama 07/1/18(木) 16:25 お礼[未読]

【45895】印刷ページの最後のセル
質問  yama  - 07/1/17(水) 13:21 -

引用なし
パスワード
   印刷する時の1ページ目の一番最後のセル番地を取得することは可能でしょうか?
(印刷プレビューした後に出る点線の右下のセルです)

【45896】Re:印刷ページの最後のセル
発言  ぱっせんじゃー  - 07/1/17(水) 13:31 -

引用なし
パスワード
   HPageBreak オブジェクト



PrintArea プロパティ
の組み合わせかな。

【45900】Re:印刷ページの最後のセル
質問  yama  - 07/1/17(水) 18:02 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
>HPageBreak オブジェクト
>
>と
>
>PrintArea プロパティ
>の組み合わせかな。

ありがとうございます。

調べてみたのですが、
HPageBreaksでページ数を取得することは出来たのですが、
各ページの最終セルは分かりませんでした。
MsgBox ActiveSheet.HPageBreaks.Count

PrintAreaは印刷範囲を設定していないと何も取得できませんでした。
MsgBox ActiveSheet.PageSetup.PrintArea

具体的にどのようにすればよいのかお教えいただけないでしょうか?

【45916】Re:印刷ページの最後のセル
発言  ぱっせんじゃー  - 07/1/17(水) 19:46 -

引用なし
パスワード
   ページの最終行は↓で取得できます。
印刷範囲を設定してないと、一番右
の行番号が取得できないので、
右下のセルの番地を取得する方法は
分かりません。

Sub test()
 With ActiveSheet
 ActiveWindow.View = xlPageBreakPreview
 If .HPageBreaks.Count <> 0 Then
  For i = 1 To .HPageBreaks.Count
   MsgBox .HPageBreaks(i).Location.Row
  Next i
 End If
 ActiveWindow.View = xlNormalView
 End With
End Sub

【45920】Re:印刷ページの最後のセル
発言  ichinose  - 07/1/17(水) 21:03 -

引用なし
パスワード
   こんばんは。
Excel4Macroでの方法です。
'=============================================
Sub test()
 Dim rr As Variant
 Dim cc As Variant
 rr = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64,""sheet1""),1,1)")
 cc = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(65,""sheet1""),1,1)")
 MsgBox Cells(rr - 1, cc - 1).Address
End Sub

試してみてください。

【45949】Re:印刷ページの最後のセル
お礼  yama  - 07/1/18(木) 16:21 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
>ページの最終行は↓で取得できます。
>印刷範囲を設定してないと、一番右
>の行番号が取得できないので、
>右下のセルの番地を取得する方法は
>分かりません。
>
>Sub test()
> With ActiveSheet
> ActiveWindow.View = xlPageBreakPreview
> If .HPageBreaks.Count <> 0 Then
>  For i = 1 To .HPageBreaks.Count
>   MsgBox .HPageBreaks(i).Location.Row
>  Next i
> End If
> ActiveWindow.View = xlNormalView
> End With
>End Sub
ありがとうございます。

調べてみたのですが、
Locationプロパティは改ページの左上になるようです。
なので、

Sub test()
 Dim rw As Long, cl As Long
 With ActiveSheet
  If .HPageBreaks.Count <> 0 Then
    rw = .HPageBreaks(1).Location.Row - 1
  End If
  If .VPageBreaks.Count <> 0 Then
    cl = .VPageBreaks(1).Location.Column - 1
  End If
 End With
 MsgBox "列:" & cl & " 行:" & rw
End Sub

とすることで一応取得は出来るのですが、
ただ、列方向に2枚以上、行方向に2枚以上あることが前提条件になってしまいす。
(I60セルが1枚で印刷できる最後のセルだとすると
J列以降、61行以降にそれぞれ入力がある必要がある)

たとえば、A1セルに文字を入力した時点で、1枚で印刷できる最後のセル(右下)を
知ることは出来ないのでしょうか?

・・・とここまで書いて気付きました!
空セルに仮入力すれば一枚分の行列取得できますね。
お騒がせしました。ありがとうございました。

Sub test()
 Dim rw As Long, cl As Long
 If Range("IV65536").Value = "" Then Range("IV65536").Value = "temp"
 With ActiveSheet
  If .HPageBreaks.Count <> 0 Then
    rw = .HPageBreaks(1).Location.Row - 1
  End If
  If .VPageBreaks.Count <> 0 Then
    cl = .VPageBreaks(1).Location.Column - 1
  End If
 End With
 If Range("IV65536").Value = "temp" Then Range("IV65536").Value = ""
 MsgBox "列:" & cl & " 行:" & rw
End Sub

【45951】Re:印刷ページの最後のセル
お礼  yama  - 07/1/18(木) 16:25 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。
>Excel4Macroでの方法です。
>'=============================================
>Sub test()
> Dim rr As Variant
> Dim cc As Variant
> rr = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64,""sheet1""),1,1)")
> cc = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(65,""sheet1""),1,1)")
> MsgBox Cells(rr - 1, cc - 1).Address
>End Sub
>
>試してみてください。
ありがとうございます。

列方向に2枚以上、行方向に2枚以上あることが前提条件になるのは同じようですね。
Excel4Macroはほとんど使ったことが無いので、折を見て勉強してみたいと思います。

6316 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free