• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Exsel2000ページ設定(VBA)について)

Exsel2000ページ設定(VBA)での余白設定について

このQ&Aのポイント
  • Exsel2000ページ設定(VBA)での余白設定について解説します。
  • ワークシートを何ページに収めて印刷するか設定できるが、余白設定は無視されるのか疑問。
  • VBAのPageSetupでは余白設定が無視されるため、横がはみ出した場合のページ設定についても考慮する必要がある。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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/HP010475331041.aspx 全部英語なんです。 なんとか、私は解決に結び付けたいと思います。

asuka546
質問者

お礼

度々のご回答。ありがとうございます。 GET.DOCUMENT(65)の参考URLを見てみましたが「Excel 2000 Help File: Running Excel 4.0 Macros」のことですよね? 確かに英語サイトのようでどこを見てよいやらわかりませんでした。 あとで、もう少しちゃんと見てみます。 「物理的左余白」の問題ですが、実際下にも書きましたが「0」を入力すると、5mmほどの余白が空きます。私は印刷機の設定なのではないかと思うのですが下の余白を「0」にすると本気でぎりぎり「0mm」まで印刷されるのでどういう設定になっているかは良くわかりません。(下は下でまた左右とは別の設定が入ってるのかもしれないし) >65536行の一番下から、End(XlUp) ではないのですか? 最終列の最終行にデータが入ってるかはデータが来てみないとわからないことなので、これを使うのはちょっと賭けみたいなことになってしまいます。 データの行の終点はデータが入っている列の全てから見た一番下の行でしょうか?(10行程度のこともあれば100行近くまでデータがあることもあるので) これはエクセルがどこを認知するかに任せてしまってます。縦が途中で切れて次のページになるのは大丈夫なので。 ながながとお付き合いありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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

asuka546
質問者

お礼

ご回答ありがとうござます。 左については、「デフォルトの余白」でいいかなと思っていたのですが、全部設定したほうが良いのかもしれないと思い「55」ポイントで設定しようと思います。 右の余白は出来る限りいっぱいまでというつもりで「0」にしたのですが、実際「10」ぐらいにしても変わらないくらいの余白が空くので(5mmぐらい)、「0」としておくよりは「10」にしておいたほうが良いのかもしれません。 問題の自動改行ですが、 サンプルコードを使用してみた結果、 自動改行されたシートはどうもエクセルのなかでは1枚のつもりらしくちゃんと機能してくれません(印刷すると2枚なのに)、印刷範囲の設定をするとやっと「幅が1枚に~」のメッセージボックスが出てきました。 印刷範囲はデータの行の終点が毎回違うため(たまにノーデータがあるためendも使えない)、設定しにくくなっています。(列数は固定です) もうちょっと良い手を考えてみます。 ありがとうございました。 ちなみに”DOCUMENT(65)”とは何を意味しているのでしょうか?ネットで調べたのですがGET.DOCUMENT関数というのがあるのはわかったのですが使い方まで書いていませんでした(泣) お手数おかけします。よろしくお願いいたします。

asuka546
質問者

補足

<お礼に対する補足> 結局、列数は変わらないのに一定のセル幅の増減があるため横が入りきらなくなることを考え、 ぎりぎり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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelのマクロで印刷設定をすると遅くなる

    Excelのマクロについて 久しぶりに質問させていただきます。 マクロで印刷の設定をすると 遅くなるのでしょうか? Range("A1:Z10").Select With ActiveSheet.PageSetup  .Orientation = xlLandscape  .Zoom = False  .FitToPagesWide = 1  .FitToPagesTall = 1  .TopMargin = Application.CentimetersToPoints(1)  .BottomMargin = Application.CentimetersToPoints(1)  .LeftMargin = Application.CentimetersToPoints(1)  .RightMargin = Application.CentimetersToPoints(1) End With Selection.PrintPreview というようなマクロを作って実行すると プレビュー画面が出るまでに かなり時間がかかるのです。 職場のパソコンであるため パソコンそのものがかなり古いのですが マクロを使わずに直接、印刷の設定をすれば すぐにプレビューが表示されます。 ただ、同じシートをいろいろな方法で印刷する必要があるため マクロを組んでみたわけです。 ちょっと我慢すればいいだけで 仕事そのものに大きく影響するわけではありませんが 皆様のご助言をよろしくお願いいたします。

  • EXCEL VBAでシートの余白を統一したい。

    こんばんは。 EXCEL VBAでひとつのファイルの中のすべてのシートの余白とA4横サイズに統一したいのです。 マクロの記録をとると With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.393700787401575) .RightMargin = Application.InchesToPoints(0.393700787401575) .TopMargin = Application.InchesToPoints(0.393700787401575) .BottomMargin = Application.InchesToPoints(0.393700787401575) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 100 .PrintErrors = xlPrintErrorsDisplayed End With End Sub このように記述されますが、どのように加工したらよろしいでしょうか? 教えてください。

  • ExcelVBAの改ページの区切り位置が変更不可

    下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。 3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。 HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか? どうしたら、任意の位置で改ページできるでしょうか?お願いいたします。 Sub 印刷プレビュー設定() Dim s As Worksheet Set s = ThisWorkbook.ActiveSheet With s '列非表示 .Columns("I:I").Select Selection.EntireColumn.Hidden = True 'ワークシートを選択、印刷範囲指定する .Select ActiveSheet.PageSetup.PrintArea = "$B$1:$O$54" '余白設定 .PageSetup.TopMargin = 0 .PageSetup.BottomMargin = 0 .PageSetup.LeftMargin = 0 .PageSetup.RightMargin = 0 '水平位置の中央へ .PageSetup.CenterHorizontally = True '垂直位置の中央へ .PageSetup.CenterVertically = True '用紙を横向きに設定 .PageSetup.Orientation = xlLandscape '用紙サイズを設定 .PageSetup.PaperSize = xlPaperA4 '印刷範囲を指定ページに収めて印刷プレビューを表示する .PageSetup.Zoom = False '拡大縮小倍率をFitToPagesの設定に収める .PageSetup.FitToPagesTall = 3 '縦の枚数 .PageSetup.FitToPagesWide = 1 '横の枚数 ActiveSheet.HPageBreaks.Add Before:=Range("A19") ActiveSheet.HPageBreaks.Add Before:=Range("A37") .PrintPreview End With End Sub

  • エクセルVBAで複数ページのページ設定

    SheetAAAA,SheeetBBBB,SheetCCC,SheetDDDDの4枚(すべてのシートです)を選択し、ページ設定をしてマクロの記録をとりました。 Sub Macro6() Sheets(Array("AAAAA", "BBBBB", "CCCCC", "DDDDD")).Select Sheets("AAAAA").Activate With ActiveSheet.PageSetup .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With End Sub (不必要部分はカットしました) 自分で4枚を同時選択しページすると4枚すべてに反映するのですが、マクロの記録でつくったMacro6だと、1枚のシートにしか設定が反映されません。 どう直せばいいのでしょうか?よろしくお願いします。

  • Excel2003VBA 印刷設定

    お世話になります。 下記、手入力による(?)印刷設定のコードなのですが不要な行をご教示いただきたく投稿致しました。 ・設定した内容は上下左右の余白を「0」にした。 ・用紙サイズと向きを選択した。 ・「1ページにあわせる」ように設定をした。 だけなのですが、恐らく単なる「マクロ記録」を利用したので余計な記述も含まれていると思います。 すでに削除してありますが 上から4行ほど何かを「""」という設定があったので 「勘」で削除し 動作確認ではOKでした。 でも見れば見るほど迷いが生じ どなたか ご存知の方にご教示いただこうと投稿致しました。 不要な行をご教示ください。 宜しくお願い致します。 Sub 印刷設定_A3横() ' ' 印刷設定_A3横 Macro ' マクロ記録日 : 2009/5/14 ' ' With ActiveSheet.PageSetup .LeftMargin = Application.InchesToPoints(1) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0.511811023622047) .FooterMargin = Application.InchesToPoints(0.511811023622047) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA3 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=True, Collate:= _ True End Sub

  • ExcelVBAで印刷設定の拡大率を取得する方法

    お世話になります。 ExcelVBAで、横の幅をいっぱいにとったときの拡大率を取得しようとしていますが、うまくいかず困っております。 With Worksheets(1).PageSetup .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1000 End With で横1ページに合わせて印刷できる設定になりますが、このときの拡大率(Zoom)を変数に代入することができません。どなたか、お助けいただけないでしょうか。 どうか、よろしくお願いいたします。

  • エクセル記録したマクロを実行するとエラーがでます

    マクロを記録させ、実行しようとするとエラーがでます。 エラーメッセージは、 「コンパイルエラー 印数は省略できません。」 で、エラー箇所は下記の☆と☆の間です。 End With With ActiveSheet.PageSetup .LeftMargin = Application.InchesToPoints(0.31) .RightMargin = Application.☆InchesToPoints☆() .TopMargin = Application.InchesToPoints() .BottomMargin = Application.InchesToPoints() .HeaderMargin = Application.InchesToPoints() .FooterMargin = Application.InchesToPoints() .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = 1620 End With 当方マクロの知識がないもので なぜそうなったのか、どうすれば解決するのかわかりません。 お力を貸して下さい。

  • エクセルのマクロについて

    エクセルの印刷マクロを作りましたが、動作が非常に遅いのです。 スタッフ用と管理者用のマクロを作り、スタッフ用が遅いのです。 余計なものが含まれているのでしょうか? お願いします。 Sub スタッフ() ' スタッフ Macro   ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$55" With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$55" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 76 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$60" With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$A$1:$AJ$60" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 70 .PrintErrors = xlPrintErrorsDisplayed End With Range("A1").Select End Sub

  • EXCELの複数のシートに同じページ設定をしたいです

    いつもお世話になっております。 マクロに初挑戦です。 すでに作成してあるブックに、同じページ設定をしたいです。 「マクロの記録」で、以下のマクロを作成しました。 Excel2003です。 Sub PageSetting() ' Keyboard Shortcut: Ctrl+Shift+F With ActiveSheet.PageSetup .RightHeader = "&A" '右上にシート名 .CenterFooter = "- &P -" '下中央にページ番号 .RightMargin = Application.InchesToPoints(0.393700787401575) '右余白1cm .TopMargin = Application.InchesToPoints(0.78740157480315) '上余白2cm .BottomMargin = Application.InchesToPoints(0.393700787401575) '下余白1cm .HeaderMargin = Application.InchesToPoints(0.590551181102362) 'ヘッダー1.5cm .FooterMargin = Application.InchesToPoints(0.196850393700787) 'フッター0.5cm End With End Sub ブック内のすべてのシートに適用するわけではないので、 複数シートを選択しておいて(作業グループ)、 まとめて適用したいのですが、どうすればよいのでしょうか? 今現在は、設定したいシートを1つずつ選択して、 Ctrl+Shift+F を押しています。 よろしくご指導お願い致します。

  • EXCEL97で印刷がB4になってしまう!

    エクセルで横長の表を作成しました。 多少大き目なので印刷範囲を指定し、ページ設定で「拡大縮小印刷」で横1×縦1ページを選択しました。用紙サイズもA4を指定しました。(その結果縮小率は91%となります。) ところが印刷をかけると自動的にB4になってしまうのです。プリンターにはB4用紙を入れていませんので毎回印刷エラーになってしまいます。(B4用紙を入れればOK) そこでVBAでやってみようと、下記のようにしてみました。 Sub 表印刷() With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.590551181102362) .RightMargin = Application.InchesToPoints(0.590551181102362) .TopMargin = Application.InchesToPoints(0.118110236220472) .BottomMargin = Application.InchesToPoints(0.118110236220472) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = False .PrintGridlines = False .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub しかしこれでやっても同じ結果でした。 なお、同ブックの他のページの表は正常に縮小印刷ができます。 原因と対策がまったくわからず困っています。 お助けください。

専門家に質問してみよう