プロが教える店舗&オフィスのセキュリティ対策術

エクセルにて「印刷範囲 クリア」して「印刷プレビュー」してから戻りますと、
ページ区切り(点線)が自動で設定され表示されます。
その位置(行)をマクロで取得するのは可能でしょうか?

バージョンは2000~2013です。

A 回答 (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マクロの劣化も激しいようです。
    • good
    • 0
この回答へのお礼

いろいろと詳しい情報、ありがとうございました。

ExecuteExcel4Macro というメソッドは初めて知りましたが、こちらの方が
処理速度も早い場合があるようですね。
大変、有用な情報ありがとうございました。

お礼日時:2016/05/19 16:18

こんにちは。



>・ドキュメントは単ページで、改ページがありません
>・ユーザーが「印刷範囲の設定」を行わない状態で
>・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
    • good
    • 0
この回答へのお礼

時間を割いてご回答くださりありがとうございました。
無事、最下行、最右列を取ることができましたm(__)m
ちなみに
Prlen = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(46),1,6)")
の部分ですが、より下方の行数が得られるようで、ググってみましたがはっきりした
内容がわかりませんでした。もう少し調べてみます。

お礼日時:2016/05/19 11:10

>用紙サイズにあわせて自動で薄いグレーの点線(青の点線ではなく)


>が出てきますが、これは「ページ境界線」というのでしょうか、

'印刷範囲のクリア
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コードに切り替えても、この問題は、解決していないように思いますが、もしかしたら、直っているかもしれません。

以下は、ダミーのリストです。
「エクセルのページ区切り(点線)の位置をマ」の回答画像3
    • good
    • 0
この回答へのお礼

再度のご回答ありがとうございます。
すみません、理解ができていなくてうまく質問すらできていませんでした。
下記まとめてみました・・・

・ドキュメントは単ページで、改ページがありません
・ユーザーが「印刷範囲の設定」を行わない状態で
・A4用紙等のサイズで印刷する際の、最下行、最右列を知りたい

というのが趣旨でした。
改めて、お願いいたします。m(__;)m

お礼日時:2016/05/18 10:55

>印刷範囲の設定をせずに印刷プレビューした後に、薄いグレーの点線がでてきますが、この点線の位置は取得できますでしょうか?



>  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

'//
    • good
    • 0
この回答へのお礼

ありがとうございます。
すみません、私の方が十分知識がなくて、質問がうまくできていませんでした。

'印刷範囲のクリア
ActiveSheet.PageSetup.PrintArea = ""
'すべての改ページを解除
ActiveSheet.ResetAllPageBreaks
'ページ境界線を表示する
ActiveSheet.DisplayPageBreaks = True

としますと、用紙サイズにあわせて自動で薄いグレーの点線(青の点線ではなく)
が出てきますが、これは「ページ境界線」というのでしょうか、
この行を取得できますでしょうか?

お礼日時:2016/05/17 21:06

その名称を[自動改ページ]と言ったと思います。


自分で入れた改ページが、[手動改ページ]ですね。

とりあえず、[自動改ページ]の水平側だけにしておきます。

詳しいことは知らないけれども、この取得には、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
    • good
    • 0
この回答へのお礼

ありがとうございます。「印刷範囲の設定」をした後に、改ページ数を取ることができました。

印刷範囲の設定をせずに印刷プレビューした後に、薄いグレーの点線がでてきますが、この点線の位置は取得できますでしょうか?

お礼日時:2016/05/17 16:18

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A