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

本記事では、VBAの文法や内部アルゴリズムの詳細には踏み込まず、“どの処理が何の目的で存在しているか” に絞って説明します。(各汎用プロシージャの詳細は、別記事へのリンクで補足します)
変換実行機能のゴール
この機能がやっていることを一言でまとめると、次の通りです。
DXF(テキスト)を読み込み → 指定ルールで文字列を置換 → 置換後DXFを新規出力する
CADを開いて手作業で書き換えるのではなく、“DXFの中身はテキストである” という性質を利用して、Excel VBAで一括処理できるようにしています。
全体の処理フロー(入力→読込→置換→出力)
変換実行の流れは、大きく4段階です。
情報取得(入力)
シート上から「置換前/置換後」一覧
変換対象DXFファイルパス
変換後のファイル名を取得します。
DXFファイル読込(テキストとして読込)
DXFを “テキストファイル” として読み込み、内部データを扱える形にします。
文字列置換(複数ルールを順番に適用)
「置換前→置換後」を1件ずつ順に適用し、DXF内部の文字列だけを置換します。
図形や位置は触らず、文字列だけが変わるようにします。
出力(新DXFとして保存)
出力先フォルダを決めて、置換後のデータを 新しいDXF として保存します。
この構造にしておくことで、“1件の置換”だけでなく、将来的に「複数DXFの一括生成」「条件分岐付きの置換」などにも発展させやすくなります。
プロシージャの階層構造(全体像)
まずは今回の「変換実行」に関わる構造です。
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoText
① S_変換実行:変換処理の司令塔
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoTextこのプロシージャは、変換機能全体の「メイン処理」です。役割は次の4つに集約されます。
シートから必要な情報を取得する
DXFをテキストとして読み込む
置換ルールを順番に適用してデータを作る
置換後データを新しいDXFとして出力する
つまり、各汎用処理を呼び出して 入力→処理→出力 をつなぐ「司令塔」です。
② Get__置換文字設定:置換ルール一覧をシートから取り出す
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoTextシート上の「置換前」「置換後」の表から、置換ルールをまとめて取得する処理です。
表の範囲を自動的に判定して
2列のデータ(置換前/置換後)を
二次元配列として返す
という役割を持ちます。
この部分を関数化しておくことで、UI(表の位置や行数)が多少変わっても、メイン処理を崩さず対応できます。
(※範囲取得の詳しいロジックは GetCellArea 系の汎用記事で解説)
③ InputText:DXFを「テキストデータ」として読み込む
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoTextDXFファイルを読み込み、後続の置換処理ができる形に整える役割です。
ファイルを読み込む
改行単位などで扱える形にして
二次元配列として返す
という流れになります。
DXFはCADデータですが、内部はテキストなのでこの読み込みを行うだけで“CADを開かずに編集できる土台”が整います。
(※文字コード別の読込など詳細は InputText の汎用記事へ)
④ ReplaceValue2D:二次元配列内の文字列置換を実行する
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoText読込んだDXFデータ(2次元配列)に対して、指定された文字列の置換を実行します。
「置換前→置換後」を1件ずつ適用
必要に応じて部分一致置換にも対応
配列チェック(入力の正しさ確認)も含めて安全に処理
という役割です。
この仕組みにより、図面の形状や座標は一切触らず、“文字列だけが確実に置き換わる” という変換が可能になります。
(※ReplaceValue2D の詳細は汎用記事へリンク)
⑤ GetFolderPath:出力先フォルダを決める
変換後ファイルは、基本的に「元DXFと同じフォルダ」に出すと運用が簡単です。そのため、変換対象ファイルのフルパスから 親フォルダパス を取り出します。
出力先をユーザーが迷わない
元ファイルと変換後ファイルが同じ場所で管理できる
という運用面のメリットがあります。
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoText⑥ OutputText:置換後データを新DXFとして出力する
S_変換実行
├─ Get__置換文字設定
│ └─ GetCellArea
│ ├─ GetEndCol
│ └─ GetEndRow
├─ InputText
│ ├─ InputTextUTF
│ └─ InputTextShiftJIS
├─ ReplaceValue2D
│ ├─ IsArray2D
│ └─ IsArray2DStart1
├─ GetFolderPath
└─ OutputText
├─ OutputTextUTF
│ └─ ConvArray2DtoText
└─ OutputTextShiftJIS
└─ ConvArray2DtoText置換後の二次元配列を、テキストファイルとして書き出す役割です。
文字コード(UTF/ShiftJISなど)に応じて出力方法を切り替える
配列をテキストに変換して保存する
という処理をまとめています。
結果として、Excel VBA側で作った置換後データが“DXFファイルとして成立する形” で出力されます。
(※出力処理の詳細は OutputText の汎用記事へ)
まとめ:DXF変換は「読込→置換→出力」の定型化が肝
今回の変換実行機能は、
シートからルールを取る
DXFをテキストとして読む
文字列だけ置換する
新しいDXFとして出す
という、非常に明快なパイプラインで構成されています。
このパターンにしておくと、将来的に
複数DXFの一括変換
置換ルールの条件分岐
テンプレートから大量生成
といった“実務でよくある拡張”にもつなげやすくなります。


