• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAのPageSetupについて!)

エクセルVBAのPageSetupについて!

このQ&Aのポイント
  • 現在のシートの印刷設定を行うときに、PageSetupを使いますが、値を取得する時は瞬時に処理が終わるのに、設定は時間がかかります。(大体、0.2秒程度)
  • PageSetupには、メンバーが27ぐらいあるので、全部で3~4秒程度かかります。シートの表示の更新を停止させても速度は変わりません。
  • 印刷設定の更新を一時的に止める方法、もしくは、瞬時に設定する方法が在りましたらご指導願えませんでしょうか?素人的には、カンマで区切った文字列で一気に配列を更新し、表示の更新を一気にできれば?ってなことを空想してしまいます。(多分、的外れの考えだと思いますが・・・?)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。Wendy02です。 PageSetup は、どうにもならないですね。値取得は瞬時とお書きになっていますが、そちらも、ままなりません。 >PageSetupには、メンバーが27ぐらいあるので プロパティの設定をしようとする意味でしょうか? コード上の変更ない部分は、何も書かないほうがよいですね。スクリプトですから。変更する部分のみのプロパティにしてください。 それで速度は大幅に変るかというと、それは約束できません。印刷は、別のプリンタ・ドライバとの間で、直接、Excel内の問題ではありませんから、VBA自体が厳しいと言えます。 ただし、私は値の取得のみで、設定は試したことはありませんが、印刷マクロの高速化に、Excel4マクロ関数を使う、という裏技があります。(関数名 PAGE.SETUP)たぶん、その速度の差は、C言語とVBの違いなのだと思います。 もしかしたら、Microsoft サポートに残されているかもしれません。私は、VBAのキャリアが浅いので、マクロ関数の機能辞典(マニュアル)は持っているのですが、あまり、こういうものを良く使いこなせません。

vba_minarai
質問者

補足

いつも、いつも有難うございます。 ご指摘のとおり、単純に全てをゲット、プットしていました。ゲットが瞬時(私の感覚ですが!)ならば、比較して、プットすべきでした。PaseSetupを扱う以上どうにもならいならば、デバイスドライバーに直接書き込む方法?(正しい表現か?どうかは不明ですが?)を考えて見ます。(あくまでも、PageSetupがデバイスドライバーにパラメータを渡すだけとの機能しかないとすれば、ならば、設定の更新を必ずするPageSetupを介する必要はないとの単純な発想ですが?実現の可能性は不明です) それと、エクセルが旧バージョンの上位互換性を維持しているという点を逆に突く!なるほど!旧バージョンほど、ウィンドウのシステムに近い存在(アルゴリズム的に??)であることを考えれば、隠し技と言えるものと思いました。(もしかして、常識?)本当にいつも、いつも有難うございます。単純に独学で進めるよりも、何十倍も効率的に習得させて頂いています。本当に有難うございます。今後ともよろしくお願いいたします。

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

関連するQ&A

  • エクセルの印刷について教えてください。

    1つのシートで複数の印刷設定を行おうっと考えています。(例えば、あるセル範囲は、A4縦、ある範囲は、A3横印刷) .PageSetupのプロパティをそのつど保存、設定すればいいと思うのですが、沢山あるプロパティを一気に保存、設定(作業用のセルに)する方法ってあるのですか?Eachは使えそうにないし???で、悩んでいます。 初歩的なことですみませんが、どなたか?詳しいかたいらっしゃいませんでしょうか? よろしくお願いいたします。

  • エクセルVBA印刷範囲指定とヘッダーフッター

    1か月のうちの前期と後期のシートがそれぞれあり、前期シートを範囲指定して領収書の一部を印刷したいのですがなぜか、前に作ったヘッダーとフッターが前期だけ印刷されてしまいます。 どこに隠れているのか謎なのです。前に悩みながら作ったシートがどこかに隠れているのでしょうか? また、同じ様式のシートなのですが前期は80%にしなくてもなぜか一枚に収まります。 不思議でなりません・・・全部消したはずなのですが Sub 印刷範囲設定領収書前期() With Worksheets("領収前期") .PageSetup.PrintArea = "G1:BB91" .PrintPreview End With End Sub Sub 印刷範囲設定領収書後期() With Worksheets("領収後期") .PageSetup.Zoom = 80 .PageSetup.PrintArea = "G1:BB91" .PrintPreview End With End Sub

  • ExcelのVBAで得た結果を転記したい

    Excelで,ひとつのブックの余白や印刷倍率,印刷品質を表示するのに,次のようなVBAを用いています. '上余白を表示する ActiveSheet.PageSetup.PrintArea = "" With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.TopMargin / _ Application.CentimetersToPoints(1) MsgBox "現在の上余白は " & marginInches & " センチです。" End With '下余白を表示する With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.BottomMargin / _ Application.CentimetersToPoints(1) MsgBox "現在の下余白は " & marginInches & " センチです。" End With '左余白を表示する With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.LeftMargin / _ Application.CentimetersToPoints(1) MsgBox "現在の左余白は " & marginInches & " センチです。" End With '右余白を表示する With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.RightMargin / _ Application.CentimetersToPoints(1) MsgBox "現在の右余白は " & marginInches & " センチです。" End With 'ヘッダー余白を表示する With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.HeaderMargin / _ Application.CentimetersToPoints(1) MsgBox "現在のヘッダーは " & marginInches & " センチです。" End With 'フッター余白を表示する With ActiveSheet.PageSetup marginInches = ActiveSheet.PageSetup.FooterMargin / _ Application.CentimetersToPoints(1) MsgBox "現在のフッダーは " & marginInches & " センチです。" End With '印刷倍率を表示する With ActiveSheet.PageSetup Zoom = ActiveSheet.PageSetup.Zoom MsgBox "現在の印刷倍率は " & Zoom & " パーセントです。 " End With '印刷品質を表示する Dim PrintQuality As Variant With ActiveSheet.PageSetup PrintQuality = .PrintQuality(1) MsgBox "現在の印刷品質は" & PrintQuality & "dpiです。" End With 現在,ツールバーのボタンをおして起動させているのですが, シート数が多い時は手間になり,困っています. (ボタンのコードは以下) Private Sub Workbook_AddinInstall() Dim myBar As CommandBar Dim CKB1 As CommandBarButton Dim Exist As Boolean For Each myBar In Application.CommandBars '名前が"余白"であるならばフラグを立てる If myBar.Name <> "余白" Then Exist = False Else Exist = True If Exist = True Then Exit For Next myBar '既に作成されていなければ新規作成 If Exist = False Then _ Set myBar = Application.CommandBars.Add(Name:="余白", Position:=msoBarTop) With myBar Set CKB1 = .Controls.Add(Type:=msoControlButton) CKB1.Caption = "余白" With CKB1 .Style = msoButtonCaption .FaceId = 266 .Parameter = "余白" .OnAction = "余白" End With .Visible = True End With Set myBar = Nothing Set CKB1 = Nothing End If End Sub そこで, シートごとに上記の余白等の結果を, テキストファイルなどに転記できるようにしたいのですが, VBAで可能でしょうか? (以下のような感じです) sheet1 上:40 下:20 左:30 右:10 倍率:98 品質:600

  • VBAでの印刷書式の記述について

    EXCEL2002を使用しております。 マクロで、通常のページ番号から3を引いた数でページ設定したいのです。 たとえば、以下のシート構成の時、 1シート目:表紙 2シート目:目次 3シート目:本文 1シート目から3シート目範囲選択し、印刷する。 このとき、3シート目から1ページとしたいのです。 マクロで、フッターを設定しております。 With ActiveSheet.PageSetup   .CenterFooter = "&P-3" End With このようにすると、印刷される文字列が「33」となってしまいます。 「1」と表示するには、上記CenterFooterの設定はどのようにすればよろしいでしょうか?

  • 複数シートをVBAで印刷

    エクセル2010VBAを使って仕事の効率化を勉強中です。 歳入日計表のシート31日分を作り、歳入月計表として合計をまとめていますが 日々印刷範囲を決めて一日分のシート印刷するのをVBA処理したいのですが できません。 1日分はこんな感じでできるのですが・・・ 31日分をどのように処理すれば日々印刷可能になるのでしょうか? お願いいたします! Sub 日計表印刷設定() With Worksheets("1") .PageSetup.PrintArea = "A2:G71" .PageSetup.LeftMargin = 55 .PageSetup.TopMargin = 40 .PageSetup.Zoom = 80 .PrintPreview End With End Sub

  • VBAの範囲印刷設定を修正したいのですが

    VBAの初心者です。詳しく教えてください。 1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub printappointedrange() Worksheets("シート1").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

  • VBAで印刷する前にプリンターの設定を変更する方法

    ○シート1の印刷ボタンで印刷するとシート1及びシート2が印刷されます。  シート2だけを印刷するには、どうしたらよいのですか。   ○現状  ・シート2は非表示  ・シート1に印刷ボタン(下記のVBAをマクロ登録済) ---------------------------------------------------------------------- Sub printappointedrange() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) Application.Dialogs(xlDialogPrint).Show 'プリンタ設定 Application.ScreenUpdating = False '画面更新ストップ For Each ws In Worksheets '全てのシートを調べる With ws Select Case .Name Case "シート2" .PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = "" '印刷範囲クリア End Select End With Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintOut ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub --------------------------------------------------------------------

  • エクセル上のVBA

    当方、VBAまるっきり初心者です(触りはじめて3日くらい)。 エクセルはある程度理解しているつもりですが… バージョンはエクセル2000です。 他シートのセルのひとつに入力すれば、 別シートのセルがそれを参照したうえで 値として表示出来るようにならないでしょうか。  今のところ、以下のような状況です。 step01 sheet1のセルA1に任意の数値(整数限定です)を入力。 step02 sheet2のセルA1に、sheet1のセルA1の数値を用いて     MOD関数で余りを出す。 step03 sheet2のセルB2に以下のVBAによって     step02の余りを値として表示。      Private Sub Worksheet_Change(ByVal Target As Range)        Range("b2").Value = Range("a1")      End Sub  これだとsheet1の数字を変えても、 sheetの切替後sheet2のセルB2に 表示される値が変わってくれません。  最初の入力(step01の入力)をおこなえば sheet2のセルB2まで値が変わってくれるような方法を 教えていただけないでしょうか。  拙い説明で申し訳ありませんが、よろしくお願いします。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

  • Excelの入力規則のリストにカンマを表示したい

    Excelの「データの入力規則」でリストにカンマ(,)を表示したいです。 手順としてはメニューの「データ」-「入力規則」を選択し、 表示された画面で「設定」タブを選択し「入力値の種類」で「リスト」を 選択します。 その後、「元の値」でカンマ(,)が含まれたシートのセル範囲を選択すれば 表示されますが、直に値を「元の値」に指定する場合にカンマ(,)をエスケープする方法が分かりません。 お分かりの方は教えてください。

専門家に質問してみよう