
No.4ベストアンサー
- 回答日時:
こんにちは。
>・ドキュメントは単ページで、改ページがありません
>・ユーザーが「印刷範囲の設定」を行わない状態で
>・A4用紙等のサイズで印刷する際の、最下行、最右列を知りたい
>
>というのが趣旨でした。
なかなか難しい内容でした。私などは、かろうじて記憶にあるかないかぐらいの所なのです。安直に考える人は、もう少し簡単なコードにするはずです。だいたい、それで納まってしまうものなのですが。
それで、40代の回答者を求むというわけですね。でも、これは、Excelレガシーのたぐいだから、もうちょっと上の年齢ですね。(^^;
たぶん、ここらは散々、ベテランの人たちが研究し尽くした後だと思います。私は、このあたりは、昔、徹底して調べたつもりだったのですが、その結果は得られませんでした。
本来、#2のコードを直せば、使えるのですが、それとは別に、まったく空のシートに対しても可能なように、印刷範囲をインクリメントしていく方法で、作ってみました。ただし、必ず、起点は、A1になります。
'//
Sub PrintArea_P_Type()
'ペーバーのサイズによる1ページの印刷範囲
Dim i As Integer
Dim j As Integer
Dim Prlen
Dim orgParea As String
Dim PRarea As String
Dim pRw, Cl, oldCl
Application.ScreenUpdating = True
With ActiveSheet
orgParea = .PageSetup.PrintArea
.ResetAllPageBreaks
.PageSetup.PrintArea = ""
On Error Resume Next
Prlen = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(46),1,6)")
Application.ScreenUpdating = False
Do
Err.Clear
i = i + 1
.PageSetup.PrintArea = .Cells(1, 1).Resize(Prlen, i).Address
oldCl = Cl
DoEvents
Cl = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(65),1,1)")
Loop Until oldCl = Cl
On Error GoTo 0
Application.ScreenUpdating = True
On Error GoTo ErrHandler
pRw = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1,1)")
PRarea = Range(Cells(1, 1), Cells(pRw - 1, Cl - 1)).Address
MsgBox PRarea
.PageSetup.PrintArea = orgParea
.DisplayPageBreaks = True
End With
Exit Sub
ErrHandler:
If Err.Number Then
MsgBox Err.Number & ": " & Err.Description
End If
End Sub
時間を割いてご回答くださりありがとうございました。
無事、最下行、最右列を取ることができましたm(__)m
ちなみに
Prlen = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(46),1,6)")
の部分ですが、より下方の行数が得られるようで、ググってみましたがはっきりした
内容がわかりませんでした。もう少し調べてみます。
No.5
- 回答日時:
こんにちは。
>Prlen = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(46),1,6)")
>の部分ですが、より下方の行数が得られるようで、ググってみましたがはっきり>した
>内容がわかりませんでした。もう少し調べてみます。
私も分かりません(^^;
出てきた数字は、「66」と出ているはずです。この数字は、たぶん、物理的行数のような気がしています。
そのコマンド(GET.DOCUMENT)のヘルプを見ると、次のように出てきます。
マニュアルは、Microsoft のVer.4 マクロ関数です。
Microsoft が関数を増やしたので、新しいマニュアルを出してくれるとよいのですが、昔のままです。(それに、日本語版はどこに行ったのでしょうか?)
https://support.microsoft.com/ja-jp/kb/128185
Microsoft Excel 4.0 マクロ関数のヘルプ トピックを表示するには、最初に、完全なマクロ関数のヘルプ ファイル (Macrofun.hlp) をインストールする必要があります。
(ダウンロードファイルの中身) 英語版です。
Macrofun.cnt 182 CNTファイル 1995/08/18
Macrofun.hlp 936,351 ヘルプファイル 1997/12/02
Readme.txt 794 テキストドキュメント 1997/12/02
以下は日本語版ヘルプから。
(私は、Excelの古い日本語ヘルプが、HDに入れてあります)
----------
書式
GET.DOCUMENT(検査の種類, ファイル名)
46 LINE.PRINT 関数で設定された次の 7 つの印刷設定の内容を、水平方向の配列として返します。
- 制御文字列
- 左余白
- 右余白
- 上余白
- 下余白
- ページの長さ
- 印刷の設定どおりに出力するときは TRUE 、そうでなければ FALSE
---------
作業中のワークシートに対する印刷設定
LINE.PRINT(コマンド, 制御文字列, 左余白, 右余白, 上余白, 下余白, 頁行数, 指定通り)
---------
マクロ関数というのは、IDEのインターフェースを通してではなく、直接アプリ等から、設定値を取得する所がミソなのです。ですから、おそらくは、同じ数字を取得するのでも、マクロ関数のほうが、かなり速いはずです。
なお、この翻訳を作ったのは、Microsoft なのか、Ascii なのか、なんとなく文体が違うような気がしています。なお、Excelレガシー問題も、そろそろ幕引きのような気がします。私のVBAマクロの劣化も激しいようです。
いろいろと詳しい情報、ありがとうございました。
ExecuteExcel4Macro というメソッドは初めて知りましたが、こちらの方が
処理速度も早い場合があるようですね。
大変、有用な情報ありがとうございました。
No.3
- 回答日時:
>用紙サイズにあわせて自動で薄いグレーの点線(青の点線ではなく)
>が出てきますが、これは「ページ境界線」というのでしょうか、
'印刷範囲のクリア
ActiveSheet.PageSetup.PrintArea = ""
'すべての改ページを解除
ActiveSheet.ResetAllPageBreaks
'ページ境界線を表示する
ActiveSheet.DisplayPageBreaks = True
私の書いたものに、あえてこれを入れてもよいのですが、#2のマクロでは取れていないということでしょうか。[自動改ページ]は、設定に対して、一定の出力はするはずなのです。
>この行を取得できますでしょうか?
取得とは何を意味しているのか、何かを目的にしてご質問をされているのだろうか、とは思うものの、二度目の内容で否定されてしまうと、よく、分からなくなってしまいました。
私は、Excel 2000時代に読んだ覚えがあったので、今、検索してみましたが、このことを言っていらっしゃるのではないでしょうか?
もう、このようなコード自体、もう、かれこれ7~8年ぶりですから、すぐには思い出せません。
[XL2002] 印刷されるページの総数を調べる方法
注意
「このプロシージャを実行する前に、改ページ位置のセルを画面に表示して、改ページ位置を認識させる必要があります。次のいずれかの操作を 1 度実行します。
• 改ページされているセルを画面に表示
• ZOOM で縮小したあと元に戻す
• 印刷プレビューを実行する
既に改ページが挿入されている状態で最後のページのデータを削除すると、正しいページ数が取得できません。データの加工によりページ数が減少する場合には、手動で改ページを設定し直す必要があります。」
https://support.microsoft.com/ja-jp/kb/408042
マクロで簡単にやれるのは、「• ZOOM で縮小したあと元に戻す 」ぐらいでしょうか。もしかしたら、再描画コマンドの代わりに、Application.ScreenUpdating =True とか入れるとかも、有効かもしれません。
VBAコードに切り替えても、この問題は、解決していないように思いますが、もしかしたら、直っているかもしれません。
以下は、ダミーのリストです。

再度のご回答ありがとうございます。
すみません、理解ができていなくてうまく質問すらできていませんでした。
下記まとめてみました・・・
・ドキュメントは単ページで、改ページがありません
・ユーザーが「印刷範囲の設定」を行わない状態で
・A4用紙等のサイズで印刷する際の、最下行、最右列を知りたい
というのが趣旨でした。
改めて、お願いいたします。m(__;)m
No.2
- 回答日時:
>印刷範囲の設定をせずに印刷プレビューした後に、薄いグレーの点線がでてきますが、この点線の位置は取得できますでしょうか?
> If ActiveSheet.PageSetup.PrintArea = "" Then
> End If
正直な話、それが、邪魔なら、取っていただいて結構です。そうすれば、印刷の範囲を設定しなくても、カウントすることは可能です。ただ、そうした保護が不要でなければ、多少の注意が必要です。
位置?とは、行数の意味ですか?
'//-
Sub PrintPagesLocation()
Dim i As Integer
Dim j As Integer
Dim k As String, p As Variant
On Error GoTo ErrHandler
j = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))")
For i = 1 To j
p = p & "," & Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1," & i & ")") - 1
Next i
ErrHandler:
If Err.Number Then
MsgBox Err.Number & ": " & Err.Description
End If
MsgBox "水平自動改ページ位置、'" & Mid(p, 2) & "'行目です。"
End Sub
'//
ありがとうございます。
すみません、私の方が十分知識がなくて、質問がうまくできていませんでした。
'印刷範囲のクリア
ActiveSheet.PageSetup.PrintArea = ""
'すべての改ページを解除
ActiveSheet.ResetAllPageBreaks
'ページ境界線を表示する
ActiveSheet.DisplayPageBreaks = True
としますと、用紙サイズにあわせて自動で薄いグレーの点線(青の点線ではなく)
が出てきますが、これは「ページ境界線」というのでしょうか、
この行を取得できますでしょうか?
No.1
- 回答日時:
その名称を[自動改ページ]と言ったと思います。
自分で入れた改ページが、[手動改ページ]ですね。
とりあえず、[自動改ページ]の水平側だけにしておきます。
詳しいことは知らないけれども、この取得には、VBAではバグがあるとかいう噂があって、Microsoft 側も長く以下のようなVer.4マクロ関数の処理を残していました。どのバージョンでも取れるはずです。
'//
Sub CountPrintPages()
Dim pb As Variant
Dim j As Integer
If ActiveSheet.PageSetup.PrintArea = "" Then
MsgBox "このマクロは、印刷範囲を設定していないと、実行できません。", 48
Exit Sub
End If
On Error GoTo ErrHandler
j = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))")
ErrHandler:
If Err.Number Then
MsgBox Err.Number & ": " & Err.Description
End If
MsgBox "水平自動改ページ数は、'" & j & "' です。"
End Sub
ありがとうございます。「印刷範囲の設定」をした後に、改ページ数を取ることができました。
印刷範囲の設定をせずに印刷プレビューした後に、薄いグレーの点線がでてきますが、この点線の位置は取得できますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】エクセルの1シートが2枚に分割されてしまうので印刷プレビューを押して閉 4 2022/12/13 13:12
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Excel(エクセル) エクセルVBAで複数のシート印刷設定 1 2022/09/07 12:03
- Excel(エクセル) エクセルシートのPDFでの保存 2 2022/09/06 13:05
- Visual Basic(VBA) 改ページ 2 2023/03/10 21:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) セルによって印刷するシートを変える方法 EXCEL-VBA 2 2022/08/01 20:48
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelVBA 改ページの横破線を消す方法
Excel(エクセル)
-
EXCEL、マクロ-改ページ行番号の取得方法を教えてください
Visual Basic(VBA)
-
Excel 改ページのVBAうまくいかないです
Excel(エクセル)
-
-
4
VBAでの改ページ位置の変更
Excel(エクセル)
-
5
ExcelVBA Range クラスの PageBreak プロパティを設定できません。
Visual Basic(VBA)
-
6
エクセル VBA 水平改ページ位置の変更方法について教えてください。
Excel(エクセル)
-
7
エクセル VBA 印刷改ページ 行数設定
Excel(エクセル)
-
8
エクセルのマクロで複数シートを両面印刷するには?
Excel(エクセル)
-
9
ExcelVBAで印刷設定の拡大率を取得する方法
Excel(エクセル)
-
10
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
11
VBA CommandButtonの文字ずれ
Visual Basic(VBA)
-
12
EXCEL-VBAで印刷時のページ番号を取得したい
Excel(エクセル)
-
13
VBによる改頁行の罫線変更
Visual Basic(VBA)
-
14
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
15
ぴったり印刷するエクセルVBAをつくるには
Excel(エクセル)
-
16
VBA 写真の挿入 回転
その他(Microsoft Office)
-
17
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
18
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
19
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
20
エクセルで、ヘッダーに特定セル内容を指定して印刷したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのグレーの部分を戻したい
-
EXCEL改ページプレビューのペー...
-
YMM4 で MOV ファイルが読み込...
-
Thunderbirdで印刷およびページ...
-
ページが増える
-
エクセルの縦の幅だけ拡大したい。
-
EXCELで1行の内容を1枚の紙に印...
-
エクセルのマクロで印刷プレビ...
-
【Excel】エクセルの1シートが...
-
ExcelVBA 改ページの横破線を消...
-
Excelで縦を拡大、横を縮小する...
-
Excel ~プリンターがない時で...
-
Excelの「改ページプレビュー」...
-
Excel 複数印刷範囲設定と、印...
-
エクセルでA4 2枚をA3 1枚で印...
-
Excelの改ページ印刷についての...
-
エクセルで点線を引き、印刷す...
-
エクセルのA3横一枚のデータをA...
-
エクセルで印刷範囲以外を灰色...
-
Excelで全ての行単位で改...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL改ページプレビューのペー...
-
Excelのグレーの部分を戻したい
-
エクセルの縦の幅だけ拡大したい。
-
YMM4 で MOV ファイルが読み込...
-
ページが増える
-
エクセルでA4 2枚をA3 1枚で印...
-
Excelの改ページ印刷についての...
-
エクセルで点線を引き、印刷す...
-
エクセルのマクロで印刷プレビ...
-
EXCELで1行の内容を1枚の紙に印...
-
Excelで特定の文字・記号のとこ...
-
エクセルのA3横一枚のデータをA...
-
エクセルで印刷、0.5が1になる。
-
ExcelVBA 改ページの横破線を消...
-
エクセルで、大きく灰色に書か...
-
改ページの2ページ目の作り方
-
Excelで縦を拡大、横を縮小する...
-
【Excel】エクセルの1シートが...
-
エクセル上に貼り付けた画像が...
-
Thunderbirdで印刷およびページ...
おすすめ情報