Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


732 / 13645 ツリー ←次へ | 前へ→

【78675】処理速度を上げたい 北風 16/12/15(木) 12:04 質問[未読]
【78676】Re:処理速度を上げたい β 16/12/15(木) 12:53 発言[未読]
【78677】Re:処理速度を上げたい 北風 16/12/15(木) 18:11 お礼[未読]

【78675】処理速度を上げたい
質問  北風  - 16/12/15(木) 12:04 -

引用なし
パスワード
   下記マクロで処理していますがプレヴュー画面へ移行する時時間がかかるような気がします。処理速度を上げる方法はありますか。

Sub セルの値をファイル名にする()
Dim fm As String
Dim fs As Variant
ChDrive "S"
ChDir "S:\1ABT\1612\決定"
Columns("A:B").Select
With ActiveSheet.PageSetup
    .PrintTitleRows = ""
    .PrintTitleColumns = ""
  End With
  ActiveSheet.PageSetup.PrintArea = ""
  With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftMargin = Application.InchesToPoints(0)
    .RightMargin = Application.InchesToPoints(0)
    .TopMargin = Application.InchesToPoints(0.984251968503937)
    .BottomMargin = Application.InchesToPoints(0.984251968503937)
    .HeaderMargin = Application.InchesToPoints(0.511811023622047)
    .FooterMargin = Application.InchesToPoints(0.511811023622047)
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .PrintQuality = 600
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlPortrait
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = 100
    .PrintErrors = xlPrintErrorsDisplayed
  End With


  Columns("A:B").EntireColumn.AutoFit
  Columns("C:E").Select
  Selection.ColumnWidth = 5.5
  Columns("F:F").ColumnWidth = 9.5
  Columns("G:G").ColumnWidth = 8.25
  Columns("G:G").EntireColumn.AutoFit
  ActiveWindow.SelectedSheets.PrintPreview
  ActiveWindow.SelectedSheets.PrintOut Copies:=1
With ThisWorkbook.ActiveSheet
 fm = .Range("A2").Text & "(" & .Range("F2").Text & ")"
End With
fs = Application.GetSaveAsFilename(fm, "MicrosoftExcelブック(*.xls),*.xls", , "ファイルを保存する", "保存")
If fs = False Then End
ThisWorkbook.SaveAs fs

End Sub

【78676】Re:処理速度を上げたい
発言  β  - 16/12/15(木) 12:53 -

引用なし
パスワード
   ▼北風 さん:

とくにコード自体で大きな問題があるとは思えません。
まぁ、処理に必要な時間なんじゃないですか。

最初の Columns("A:B").Select は意味がないから不要とか
With ActiveSheet.PageSetup と End With のブロックが2回あるので
まとめて一度の With で済むとか、  
With ActiveSheet.PageSetup としてセットしている項目が多いのに、
ぽつんと、ActiveSheet.PageSetup.PrintArea = "" と単独でやっているとか
Columns("F:F").ColumnWidth = 9.5 といったコードを書いているのに
  Columns("C:E").Select
  Selection.ColumnWidth = 5.5
こんなように、Select/Selectionベースで無駄な2行にしているところがあるとか

そういうところはありますが、微々たるものですから。

もちろん、PageSetup 領域には様々な設定項目があるわけで、
マクロ記録をすると、規定値も含めてすべての項目の設定コードが生成されますが
規定値については、設定コードをなくし、とくに指定したい項目のみに絞るというのは
やってみられたらいいと思いますが。

ところで、最後の

If fs = False Then End

もちろん、これでもいいのですが、 End ステートメントはできるだけ避けたほうがいいですよ。

ふつうに

If fs = False Then Exit Sub

にしておかれたらいかがですか?

【78677】Re:処理速度を上げたい
お礼  北風  - 16/12/15(木) 18:11 -

引用なし
パスワード
   ▼β さん
何時も有難うざいます。
以下解答理解しました有難うございました。(If分は修正しました)

▼β さん:
>▼北風 さん:
>
>とくにコード自体で大きな問題があるとは思えません。
>まぁ、処理に必要な時間なんじゃないですか。
>
>最初の Columns("A:B").Select は意味がないから不要とか
>With ActiveSheet.PageSetup と End With のブロックが2回あるので
>まとめて一度の With で済むとか、  
>With ActiveSheet.PageSetup としてセットしている項目が多いのに、
>ぽつんと、ActiveSheet.PageSetup.PrintArea = "" と単独でやっているとか
>Columns("F:F").ColumnWidth = 9.5 といったコードを書いているのに
>  Columns("C:E").Select
>  Selection.ColumnWidth = 5.5
>こんなように、Select/Selectionベースで無駄な2行にしているところがあるとか
>
>そういうところはありますが、微々たるものですから。
>
>もちろん、PageSetup 領域には様々な設定項目があるわけで、
>マクロ記録をすると、規定値も含めてすべての項目の設定コードが生成されますが
>規定値については、設定コードをなくし、とくに指定したい項目のみに絞るというのは
>やってみられたらいいと思いますが。
>
>ところで、最後の
>
>If fs = False Then End
>
>もちろん、これでもいいのですが、 End ステートメントはできるだけ避けたほうがいいですよ。
>
>ふつうに
>
>If fs = False Then Exit Sub
>
>にしておかれたらいかがですか?

732 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free