top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(27)

開発事例(20)

シート・セル操作(18)

コード自動生成(10)

ユーザーフォーム(9)

文字列操作(8)

図形操作(7)

設計思想(7)

開発効率化(6)

GAS(5)

アニメーション(5)

技術解説(4)

講座実施報告(5)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

イベントプロシージャ(2)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

数学(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

ステータスバー(1)

コード解析(1)

OneDrive(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

Excel VBAでDXF変換ツールの「ファイル選択機能」を分解して解説

はじめに

本記事では、開発事例として紹介した 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
└─ SelectFile

OneDriveを利用している環境では、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の文法や実装上の細かい工夫については、コード全文を見ながら別途解説できる内容のため、本記事の最後に 全コードをまとめて掲載します。


まとめ

ファイル選択処理は一見地味ですが、

  • ツールの第一印象を決める

  • 操作ストレスを左右する

  • 実務環境への適応力が問われる


重要な要素です。

今回の構成は、「とりあえず動く」ではなく「現場で使い続けられる」ことを前提に設計しています。

Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page