- ベストアンサー
Exsel2000ページ設定(VBA)での余白設定について
- Exsel2000ページ設定(VBA)での余白設定について解説します。
- ワークシートを何ページに収めて印刷するか設定できるが、余白設定は無視されるのか疑問。
- VBAのPageSetupでは余白設定が無視されるため、横がはみ出した場合のページ設定についても考慮する必要がある。
- みんなの回答 (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/HP010475331041.aspx 全部英語なんです。 なんとか、私は解決に結び付けたいと思います。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 まず最初に、 .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
お礼
ご回答ありがとうござます。 左については、「デフォルトの余白」でいいかなと思っていたのですが、全部設定したほうが良いのかもしれないと思い「55」ポイントで設定しようと思います。 右の余白は出来る限りいっぱいまでというつもりで「0」にしたのですが、実際「10」ぐらいにしても変わらないくらいの余白が空くので(5mmぐらい)、「0」としておくよりは「10」にしておいたほうが良いのかもしれません。 問題の自動改行ですが、 サンプルコードを使用してみた結果、 自動改行されたシートはどうもエクセルのなかでは1枚のつもりらしくちゃんと機能してくれません(印刷すると2枚なのに)、印刷範囲の設定をするとやっと「幅が1枚に~」のメッセージボックスが出てきました。 印刷範囲はデータの行の終点が毎回違うため(たまにノーデータがあるためendも使えない)、設定しにくくなっています。(列数は固定です) もうちょっと良い手を考えてみます。 ありがとうございました。 ちなみに”DOCUMENT(65)”とは何を意味しているのでしょうか?ネットで調べたのですがGET.DOCUMENT関数というのがあるのはわかったのですが使い方まで書いていませんでした(泣) お手数おかけします。よろしくお願いいたします。
補足
<お礼に対する補足> 結局、列数は変わらないのに一定のセル幅の増減があるため横が入りきらなくなることを考え、 ぎりぎり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
お礼
度々のご回答。ありがとうございます。 GET.DOCUMENT(65)の参考URLを見てみましたが「Excel 2000 Help File: Running Excel 4.0 Macros」のことですよね? 確かに英語サイトのようでどこを見てよいやらわかりませんでした。 あとで、もう少しちゃんと見てみます。 「物理的左余白」の問題ですが、実際下にも書きましたが「0」を入力すると、5mmほどの余白が空きます。私は印刷機の設定なのではないかと思うのですが下の余白を「0」にすると本気でぎりぎり「0mm」まで印刷されるのでどういう設定になっているかは良くわかりません。(下は下でまた左右とは別の設定が入ってるのかもしれないし) >65536行の一番下から、End(XlUp) ではないのですか? 最終列の最終行にデータが入ってるかはデータが来てみないとわからないことなので、これを使うのはちょっと賭けみたいなことになってしまいます。 データの行の終点はデータが入っている列の全てから見た一番下の行でしょうか?(10行程度のこともあれば100行近くまでデータがあることもあるので) これはエクセルがどこを認知するかに任せてしまってます。縦が途中で切れて次のページになるのは大丈夫なので。 ながながとお付き合いありがとうございました。