
システム開発では、構造化プログラミングができるようになると、可読性も高まり、不具合リスクを低減することができます。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「ワークブックの外部保存を一箇所にまとめる」をテーマに、解説をしたいと思います。
マクロの改修・整理
保存処理があちこちに散らばったマクロ、直せずにいませんか?
- 保存先を変えるだけで、複数のモジュールを探して直す羽目になる
- SaveAsの修正漏れで、一部のボタンだけ古い場所に保存される
- 前任者のマクロが複雑で、どこを触れば安全か分からない
そのお悩み、マクロの構造整理と改修で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、保存・印刷・ファイル操作など重複した処理を共通モジュールに集約できます。保存先やファイル形式の変更にも、少ない修正で対応できる形に作り直します。前任者が作ったマクロの引き継ぎもお任せください。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
◆同じ処理は1つのModuleに集約する
保存(SaveAs)や、印刷設定(print)、ファイル操作(Open)、メール送信など、同じ処理なら1Moduleに集約しましょう。
複数のモジュールに分散し書いてしまうと、改修の際、修正箇所も増えるので、「改修漏れリスク」が高まります。
システム規模が大きいケースでは、数十個から100を超えるプロシージャ数も現実味を帯びてきます。
【Point】同じ処理は1つのModule内に集約する。
例えば、「ファイルを指定先に出力する」といった処理であれば、ファイル形式が異なる場合でも、基本的な考え方は同じです。
何故なら、パラメーター受け渡しに必要な情報は、シンプルに、以下の3つだからです。
場所はどこに、何ていう名前で、どんな形式で出力するか。
1、出力場所(フォルダ名)
2、出力名称(保存名)
3、出力形式(ファイル種類)
xls、xlsx、xlsm、PDF、txtなど
1Module内に、同様の処理や記述を集約するメリットは、メンテナンス性や改修面でとても大きく、修正が容易になります。
これは物理的に、1箇所のみで済むためです。
【Point】ソース記述の量をいかに低減できるか
と簡単そうにか書きましたが、実は全体把握力と変数命名に標準化ルールがないと難しいのです。
その為には、各プロシージャ毎に変数宣言を行なう書き方ではなく、「Public型」変数を上手に活用するスキルが必要になります。
【ファイル出力~保存を1モジュールに集約した例】
Public PO_TmpBK01 As Workbook
Public PO_TmpSt01 As Worksheet
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Sub M_外部ブック保存(P_出力PH名, S_保存区分 As String, P_出力BK名)
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
On Error GoTo L_SaveErr: ’エラーの場合は、システムMsgを表示
Dim S_Fin行 As Long
Select Case S_保存区分
Case "xlsx"
UF01.Caption = "[STATUS] 外部ブック保存"
UF01.txt経過時間.Value = "( " & Format(Int(Timer - P_Time始), "0000") & " 秒)"
UF01.txtステータス.Value = "[" & P_出力BK名 & ".xlsx]"
UF01.Repaint
DoEvents
ActiveSheet.Copy
Set PO_TmpBK01 = ActiveWorkbook
Set PO_TmpSt01 = ActiveSheet
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
'◆ ここは *.xlsx 形式の出力
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
PO_TmpBK01.SaveAs FileName:=P_出力PH名 & "\" & P_出力BK名 & ".xlsx", FileFormat:=xlOpenXMLWorkbook
PO_TmpBK01.Activate
Set PO_TmpBK01 = Nothing
Set PO_TmpSt01 = Nothing
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
'◆ ここは、PDF形式
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
Case "PDF"
UF01.Caption = "[STATUS] PDF保存" & P_Cnt請PDF件数 & "件目"
UF01.txt経過時間.Value = "( " & Format(Int(Timer - P_Time始), "0000") & " 秒)"
UF01.txtステータス.Value = P_出力BK名 & ".pdf"
UF01.Repaint
DoEvents
PO_読BK01.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
P_出力PH名 & "\" & P_出力BK名 & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
'◆ ここは csv形式
'◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
Case "csv"
PO_TmpBK01.SaveAs FileName:=P_出力PH名 & "\" & P_出力BK名 & ".csv", FileFormat:=xlCSV
O_00.Activate
PO_TmpSt01.Activate
Set PO_TmpBK01 = Nothing
Set PO_TmpSt01 = Nothing
End Select
Exit Sub
‘///////////////////////////////////////////////////////////////////////////////
L_SaveErr:
On Error GoTo 0
MsgBox "" & vbCrLf & vbCrLf & _
"--------------------------------------" & vbCrLf & _
"■S_保存区分: [" & S_保存区分 & "]" & vbCrLf & _
"■ActiveWorkbook.Name: [" & ActiveWorkbook.Name & "]" & vbCrLf & _
"--------------------------------------" & vbCrLf & _
"■Err.Number : " & Err.Number & vbCrLf & _
"■Err.Description: " & vbCrLf & _
" " & Err.Description & vbCrLf & vbCrLf & _
"※[Saveエラー]", , "[★★Save処理失敗★★]"
End
End Sub
Excel業務の効率化を目的としたツール開発で、複数人プロジェクトという開発体制はまずありません。
このため、「標準化ガイドライン」、「変数の命名規約」、「Module呼び出し方」など、安全な運用ルールさえ適用できれば、Public型を有効に使うことができ、大幅なStep短縮になります。
複数のModuleに、同じ処理を何度も書かない、分散させない、まとめられる処理はまとめる。これがシンプル記述の基本です。
今回のテーマは、「ワークブックの外部保存を一箇所にまとめる」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。
相見積もり歓迎
既存マクロの改修は、時間単価で無駄なくお見積もりします
- 基本料金50,000円+開発の時間単価10,000円(税別)です
- 改修範囲を確認し、作業時間の見込みを先にお伝えします
- 作り直すより改修が得策かどうかも、正直にお伝えします
セルネッツでは相見積もりを歓迎しています。既存マクロの改修は、基本料金に要件定義・設計・開発の時間単価を加えてお見積もりします(税別)。全面的な作り直しが本当に必要かどうかも、正直にご説明します。システム導入相談やセカンド・オピニオンも、60分無料で承ります。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料