Excel VBAでDXF変換ツールの「ファイル選択機能」を分解して解説
- yuji fukami
- 1月13日
- 読了時間: 6分
はじめに
本記事では、開発事例として紹介した DXF形式のCADデータ自動変換ツール のうち、 実行サンプルとして使用している 「ファイル選択機能」 に焦点を当て、 そのコード構成と役割を整理しながら解説します。

DXF変換ツールにおける「変換対象ファイルの選択処理」は、一見すると単純な機能に見えるかもしれません。しかし実際の業務用ツールとして実装する場合には、
初期フォルダをどこに設定するか
OneDriveなどのクラウド環境でも正しく動作するか
ユーザー操作でキャンセルされた場合にどう振る舞うか
といった点を考慮する必要があります。
本記事で扱うコードは、実際の業務開発案件で使用することを前提とした構成で実装しており、将来的な拡張や保守性、可読性も意識した設計になっています。
そのため、単なるサンプルコードとしてではなく、業務ツールを設計・開発する際の考え方や構成例としても、参考にしていただける内容になっています。
なお、VBAの文法や個々の処理内容に踏み込んだ技術的な解説については、後続の記事で扱う想定とし、本記事では 「各プロシージャが何のために存在しているのか」という点に絞って解説していきます
プロシージャの階層構造(全体像)
まずは、今回のファイル選択機能に関わるプロシージャの構成です。
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFile
このように、
ユーザー操作を起点とするメイン処理
環境依存を吸収する補助処理
汎用的に使い回せる共通処理
を明確に分離した構造になっています。
メイン処理:S_ファイル選択_変換対象DXFファイル
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFileこのプロシージャは、**「DXFファイルを選択して、シートに反映する」**という機能の入口です。
役割は非常にシンプルで、次の3点に集約されています。
ファイル選択ダイアログを表示する
ファイルが選択された場合のみ処理を進める
選択されたファイルのフルパスを、指定セルに出力する
UI側(Excelシート)とロジック側を分離し、このプロシージャ自体は 「制御役」に徹しているのがポイントです。
初期フォルダ決定:GetCurDir_OrBookPath
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFileファイル選択機能を実装する際、「最初にどのフォルダを表示するか」は、操作性に大きく影響します。
VBAで単純に CurDir(カレントディレクトリ)を取得した場合、初期状態だと「ドキュメント」フォルダが初期位置 になることがあります。
この状態では、
毎回ドキュメントフォルダからスタートしてしまう
実際の作業フォルダまで、何階層もフォルダをたどる必要がある
ファイル選択のたびに、無駄な操作が発生する
といった手間が生じやすくなります。
特に業務用ツールでは、この「最初の一手の遠さ」が積み重なることで、使いにくいツールという印象を与えてしまう原因になります。
「ドキュメントを起点にしない」ための仕組み
そこで本ツールでは、カレントディレクトリがドキュメントフォルダであるかどうかを判定し、その場合は起動中のブックンのフォルダを初期位置として使用する仕組みを採用しています。
このようにすることで、
実際に作業しているフォルダを起点にできる
DXFファイルが置かれている場所へ、すぐにアクセスできる
毎回フォルダを探しに行く必要がなくなる
といった、操作性の大幅な改善が実現できます。
環境判定:Judge__CurDirIsDocument
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFileこのプロシージャは、
現在のカレントディレクトリが「ドキュメント(Documents)」かどうか
を判定するためのものです。
Excelの起動環境によっては、意図せずドキュメントフォルダが基準になることがあります。
その場合、毎回フォルダを移動する必要が出てくるため、「ユーザーにとって使いにくい初期状態」を避けるための判定として用意しています。
パスの末尾取得:GetFileName
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFileこのプロシージャは、
フルパスから
最後の要素(フォルダ名やファイル名)を取得する
という、非常に汎用的な役割を持っています。
今回の用途では、
カレントディレクトリの末尾フォルダ名を取得し
それが「ドキュメント」かどうかを判断する
ために使われています。
単機能に切り出しているため、他のツールや処理でもそのまま流用できます。
GetFileNameは下記リンクでも解説しております。
OneDrive対策:ConvOneDrivePath_LocalPath
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFileOneDriveを利用している環境では、Excelが返すパスが http形式 になるケースがあります。
このプロシージャの役割は、
http形式のOneDriveパスを検出し
ローカル環境上の実体パスへ変換する
ことです。
これにより、
ファイル選択ダイアログの初期フォルダ指定
ローカルファイルとしての扱い
が安定して行えるようになります。
クラウド環境を前提とした実務ツールでは、ほぼ必須の対策です。
ConvOneDrivePath_LocalPathは下記リンクでも解説しております。
ファイル選択本体:SelectFile
S_ファイル選択_変換対象DXFファイル
├─ GetCurDir_OrBookPath
│ ├─ Judge__CurDirIsDocument
│ ├─ GetFileName
│ └─ ConvOneDrivePath_LocalPath
└─ SelectFile最後に、実際のファイル選択を行うのがこのプロシージャです。
役割は次の通りです。
指定したフォルダを初期位置としてダイアログを表示
指定した拡張子のみを選択対象にする
ユーザーがキャンセルした場合は空文字を返す
DXFに限らず、
CSV
PDF
画像ファイル
など、さまざまな業務ツールで使い回せるよう、汎用関数として設計されている点が特徴です。
SelectFileは下記リンクでも解説しております。
なぜこの構成にしているのか
このファイル選択機能は、「DXF変換ツールのためだけ」に作られているわけではありません。
環境依存(OneDrive・初期フォルダ)
UI操作(キャンセル・選択)
汎用性(拡張子切り替え)
をそれぞれ分離することで、
他ツールへの流用
将来の機能追加
UI変更への耐性
を高めています。
コード全文について
ここまでで、各プロシージャが 「何を目的として存在しているか」を整理しました。
VBAの文法や実装上の細かい工夫については、コード全文を見ながら別途解説できる内容のため、本記事の最後に 全コードをまとめて掲載します。
まとめ
ファイル選択処理は一見地味ですが、
ツールの第一印象を決める
操作ストレスを左右する
実務環境への適応力が問われる
重要な要素です。
今回の構成は、「とりあえず動く」ではなく「現場で使い続けられる」ことを前提に設計しています。


