このごろ度々お世話になっております。
エクセルでのページ設定で、"ワークシートを何ページに収めて印刷"するか設定できると思うのですがそれを指定してしまうと、他で指定した余白設定とかは無視されてしまうのでしょうか?
VBAで
'ページ設定
Set SENTAKU = Workbooks(3).Sheets(1)
With SENTAKU.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.TopMargin = 55
.BottomMargin = 15
.RightMargin = 0
.PrintTitleRows = "$2:$5"
End With
としたら、見事にMarginが無視されてました。
右の余白「0」は捨てられないのですが、セルの幅が増えても今のデータを横1枚で収めたいと考えてます。
(左の余白は少しぐらい減ってもいいが、どちらかというとZoomを変更して横1枚に収めたい。ちなみに縦は何ページでも可)
PageSetupでそのような設定ができないのなら横がはみ出したら、違うページ設定みないなのをIf文で書くことは可能なのでしょうか?
(横がはみ出したらAの設定(Zoomの縮小率が少し多い)、1枚で収まったらBの設定のような)
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは。
この件は、私は特別の関心を持っていますが、VBAの中で、一番扱いにくい部分だと思います。
>「デフォルトの余白」でいいかなと思っていたのですが、
だから、やはり、「0」という選択肢はあると思います。
ちょっと遠回りの話になりますが、Excelの「物理的左余白」というのが、私は、一体何なのかよく分かりません。実際の物理的左余白なんて、数ミリのはずなのですが、違う数値が存在しているようです。これで、大幅に印刷に影響するようなことはありませんが、最大限ということなら、「0」を入れることが出来ると思います。
>右の余白は出来る限りいっぱいまでというつもりで「0」にしたのですが、
それは、右改行位置が、途中になるかならないかで、列で、切り捨てられてしまうからなんですね。だから、セル幅に依存してしまうわけなのです。つまり、右端のセル幅以内なら、どの数値を入れても同じことになってしまいますね。
>印刷範囲はデータの行の終点が毎回違うため(たまにノーデータがあるためendも使えない)、設定しにくくなっています。(列数は固定です)
65536行の一番下から、End(XlUp) ではないのですか?
それは、状況によって、関数やマクロにして、いろんな方法が出せるように思います。データの行の終点は、どのような考え方ですか?
>ちなみに”DOCUMENT(65)”とは何を意味しているのでしょうか?ネットで調べたのですがGET.DOCUMENT関数というのがあるのはわかったのですが使い方まで書いていませんでした(泣)
これは、元々は、昔、ある達人さんから教わったテクニックです。
GET.DOCUMENT(65)
現在手に入る資料をもとにすれば、以下のように書かれています。
An array of column numbers corresponding to columns that are immediately to the right of a manual or automatic page break.
「手動・自動改行の直右の位置の列番号を配列で出す」
他にも出し方はあるのですが、この方法が一番確実なのです。
http://office.microsoft.com/ja-jp/assistance/HP0 …
全部英語なんです。
なんとか、私は解決に結び付けたいと思います。
度々のご回答。ありがとうございます。
GET.DOCUMENT(65)の参考URLを見てみましたが「Excel 2000 Help File: Running Excel 4.0 Macros」のことですよね?
確かに英語サイトのようでどこを見てよいやらわかりませんでした。
あとで、もう少しちゃんと見てみます。
「物理的左余白」の問題ですが、実際下にも書きましたが「0」を入力すると、5mmほどの余白が空きます。私は印刷機の設定なのではないかと思うのですが下の余白を「0」にすると本気でぎりぎり「0mm」まで印刷されるのでどういう設定になっているかは良くわかりません。(下は下でまた左右とは別の設定が入ってるのかもしれないし)
>65536行の一番下から、End(XlUp) ではないのですか?
最終列の最終行にデータが入ってるかはデータが来てみないとわからないことなので、これを使うのはちょっと賭けみたいなことになってしまいます。
データの行の終点はデータが入っている列の全てから見た一番下の行でしょうか?(10行程度のこともあれば100行近くまでデータがあることもあるので)
これはエクセルがどこを認知するかに任せてしまってます。縦が途中で切れて次のページになるのは大丈夫なので。
ながながとお付き合いありがとうございました。
No.1
- 回答日時:
こんにちは。
まず最初に、
.LeftMargin の設定がないようなのですが、デフォルトでは、Excelとプリンタ・ドライブとの間で決められている、「デフォルト余白」か、予め設定している余白になるはずだと思います。それでは、「0」にすると、どうなるかというと、「物理的余白」になります。。
しかし、反対側の右の余白(.RightMargin)「0」は、物理的にはありえないようになっています。論理値だけです。
それは、つまり、これは別の見方をすると、
左の物理的余白+左の設定余白+
(セルの幅の積み上げ+セルの調整余白)>設定用紙の幅
(あくまでも、この計算の考え方は、私の推測から作られたものです。)
それで、その(論理的)計算で、もしも、設定用紙の幅より超えることがあれば、セルの自動改行が途中で入ります。これは、物理的な計算ではありません。
ただ、いずれにしても、こういうのは、VBA限定の処理では、あまりうまくいかないひとつです。おそらく、Excel内部で設定しているからなのだと思います。
なお、それらの設定値は、ポイントになっていますので、気をつけてください。
幅が収まらないときのサンプルコードです。
MsgBox のところに、実行に必要なコードを入れ替えてください。
Sub testsample()
Dim vc As Variant
vc = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
If Not IsError(vc) Then
If vc > 1 Then
MsgBox "幅が、1枚に収まりません。"
End If
End If
End Sub
この回答への補足
<お礼に対する補足>
結局、列数は変わらないのに一定のセル幅の増減があるため横が入りきらなくなることを考え、
ぎりぎり1枚で収まる幅を確認してそれ以上の列幅であればページ設定を変更するというマクロにしました。
ご迷惑をおかけして申し訳ありませんでした。
'ページ設定
e = Range("B1").Width
Set SENTAKU = Workbooks(3).Sheets(1)
If e < 132 Then
With SENTAKU.PageSetup
.Orientation = xlLandscape
.Zoom = 55
.LeftMargin = 55
.TopMargin = 55
.BottomMargin = 20
.RightMargin = 10
.PrintTitleRows = "$2:$5"
End With
Else
With SENTAKU.PageSetup
.Orientation = xlLandscape
.Zoom = 50
.LeftMargin = 45
.TopMargin = 55
.BottomMargin = 20
.RightMargin = 10
.PrintTitleRows = "$2:$5"
End With
End If
ご回答ありがとうござます。
左については、「デフォルトの余白」でいいかなと思っていたのですが、全部設定したほうが良いのかもしれないと思い「55」ポイントで設定しようと思います。
右の余白は出来る限りいっぱいまでというつもりで「0」にしたのですが、実際「10」ぐらいにしても変わらないくらいの余白が空くので(5mmぐらい)、「0」としておくよりは「10」にしておいたほうが良いのかもしれません。
問題の自動改行ですが、
サンプルコードを使用してみた結果、
自動改行されたシートはどうもエクセルのなかでは1枚のつもりらしくちゃんと機能してくれません(印刷すると2枚なのに)、印刷範囲の設定をするとやっと「幅が1枚に~」のメッセージボックスが出てきました。
印刷範囲はデータの行の終点が毎回違うため(たまにノーデータがあるためendも使えない)、設定しにくくなっています。(列数は固定です)
もうちょっと良い手を考えてみます。
ありがとうございました。
ちなみに”DOCUMENT(65)”とは何を意味しているのでしょうか?ネットで調べたのですがGET.DOCUMENT関数というのがあるのはわかったのですが使い方まで書いていませんでした(泣)
お手数おかけします。よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Visual Basic(VBA) VBAの改ページ設定について 7 2022/06/20 00:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Word(ワード) Wordでの印刷サイズについて A4の原稿をB5サイズで出力したいとき、 印刷から用紙サイズの指定か 4 2022/04/30 09:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで上下に同じ書類を作成す...
-
Wordのページ設定を初期化したい
-
Excelで・・・1ページあたりの...
-
EXCELでA4用紙に余白ナシで印刷...
-
Excel(エクセル)で用紙の中央...
-
ワードパッド 横 切れ
-
LibreOfficeのCalcの印刷に関す...
-
OpenOffice Calc(エクセルの互...
-
アクセスで、レポートの幅がペ...
-
PDFデータに余白を作る
-
見開き2ページのPDFを1ページに...
-
エクセルで作った表(上下2つ...
-
excelの余白はファイルと本体設...
-
アクセスのレポート印刷がうま...
-
文字数や行数を簡単に指定でき...
-
ルーズリーフに印刷したい
-
余白が左右違うのです(canon)
-
エクセルを余白なしでPDF化したい
-
open office org 1ページに収め...
-
Excelチェックボックスの調整
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで上下に同じ書類を作成す...
-
Excelで・・・1ページあたりの...
-
Wordのページ設定を初期化したい
-
EXCELでA4用紙に余白ナシで印刷...
-
見開き2ページのPDFを1ページに...
-
エクセルを余白なしでPDF化したい
-
アクセスで、レポートの幅がペ...
-
ワードパッド 横 切れ
-
Excel(エクセル)で用紙の中央...
-
エクセルで作った表(上下2つ...
-
エクセルの余白のようなもの
-
PDFデータに余白を作る
-
LibreOfficeのCalcの印刷に関す...
-
VisualStudioで、コードを印刷...
-
アクセスのレポート印刷がうま...
-
access2003 レポートを中央に印...
-
エクセルでA3用紙を印刷し、余...
-
エクセルで画像を真ん中に貼り...
-
パワーポイント印刷時の余白設...
-
エクセルで、ページが自動で縮...
おすすめ情報