VBA

ACCESS VBAでEXCEL出力時の速度アップ

投稿日:

はじめに

ACCESSからEXCELへVBAを利用して出力する際にデータ量が多くなるとすごく遅くなります。

これがちょっとした修正で劇的に改善されます。

 

修正方法

名簿テンプレート.xlsxを読み込んで新しいEXCELファイル(20180901_名簿.xlsx等)を作成し、データを貼り付ける処理です。

元のソース

  • SELECT文でデータを読み込んでデータの終わりまで繰り返しデータをEXCELのセルに直接貼り付けます。
  • 貼り付け完了後、書式を設定しオートフィルタをかけて保存します。
  • 保存時には、読み出しや書き出し時のパスワードを設定できるようになっています。

 

修正後のソース

  • SELECT文でデータを読み込んでデータの終わりまで繰り返しデータを cellData配列に格納します。
  • すべてのデータが格納されたcellDataをRangeを使ってまとめてEXCELに貼り付けます。

 

名簿テンプレート

テンプレートはこのようなものです。

データの1件目には罫線を引いて書式を整えて(センタリング等も)おきます。

 

保存時のパスワード

ACCESSのフォームに以下の様な項目を用意して対応します。

読み取り専用を推奨する

チェックが付いている場合は、ReadOnlyRecommended をTrueをセットします。

If Me.readOnly.Value = -1 Then
.workbooks(1).ReadOnlyRecommended = True
Else
.workbooks(1).ReadOnlyRecommended = False
End If

書き込みパスワード

フォームの書き込みパスワードに文字が入力されている場合は、WritePassword にその文字をセットします。

.workbooks(1).WritePassword = IIf(IsNull(Me.writePass.Value), "", Me.writePass)

読み取りパスワード

フォームの読み取りパスワードに文字が入力されている場合は、保存時のPasswordオプションでその文字を設定します。

.workbooks(1).saveas fileName:=newFileName, Password:=IIf(IsNull(Me.readPass.Value), "", Me.readPass.Value)

 

最後に

ACCESSで用意されているエクスポート操作は非常に簡単にEXCEL出力できますが、綺麗に出力したい場合は予めテンプレートを用意しておき、そこにデータを出力してあげると良いと思います。

 

スポンサードリンク

スポンサードリンク

-VBA
-, ,

Copyright© あきらちんの技術メモ , 2023 All Rights Reserved Powered by STINGER.