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データ自動変換ツール のうち、 実行サンプルとして使用している 「変換実行」 に焦点を当て、 そのコード構成と役割を整理しながら解説します。



変換実行の実行ボタン

本記事では、VBAの文法や内部アルゴリズムの詳細には踏み込まず、“どの処理が何の目的で存在しているか” に絞って説明します。(各汎用プロシージャの詳細は、別記事へのリンクで補足します)


変換実行機能のゴール

この機能がやっていることを一言でまとめると、次の通りです。

DXF(テキスト)を読み込み → 指定ルールで文字列を置換 → 置換後DXFを新規出力する

CADを開いて手作業で書き換えるのではなく、“DXFの中身はテキストである” という性質を利用して、Excel VBAで一括処理できるようにしています。


全体の処理フロー(入力→読込→置換→出力)

変換実行の流れは、大きく4段階です。

  1. 情報取得(入力)

    • シート上から「置換前/置換後」一覧

    • 変換対象DXFファイルパス

    • 変換後のファイル名を取得します。


  2. DXFファイル読込(テキストとして読込)

    • DXFを “テキストファイル” として読み込み、内部データを扱える形にします。


  3. 文字列置換(複数ルールを順番に適用)

    • 「置換前→置換後」を1件ずつ順に適用し、DXF内部の文字列だけを置換します。

    • 図形や位置は触らず、文字列だけが変わるようにします。


  4. 出力(新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
      └─ ConvArray2DtoText

DXFファイルを読み込み、後続の置換処理ができる形に整える役割です。

  • ファイルを読み込む

  • 改行単位などで扱える形にして

  • 二次元配列として返す


という流れになります。

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の一括変換

  • 置換ルールの条件分岐

  • テンプレートから大量生成


といった“実務でよくある拡張”にもつなげやすくなります。


コード全文


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

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

Softex-Celware

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

  • Facebook
  • Twitter
  • YouTube

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

bottom of page