XML書き込みの基本
Excel VBAで「シートのデータをXML形式に保存したい」「フォーム入力をXMLファイルに書き出したい」という場面では XML書き込み処理 を組み込むと便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- XML書き込みとは?
Excelのデータをタグ付きの階層構造で表現し、外部システムや設定ファイルとして利用できるようにする処理。 - 用途:
- データ交換(システム間連携)
- 設定ファイルの保存
- Excelをデータベース的に利用
テンプレ1:単純なXMLを作成して保存
Sub WriteXML_Basic()
Dim xmlText As String
Dim fso As Object, ts As Object
' XML文字列を作成
xmlText = "<user>" & vbCrLf & _
" <name>山田太郎</name>" & vbCrLf & _
" <age>30</age>" & vbCrLf & _
" <address>東京都江東区</address>" & vbCrLf & _
"</user>"
' ファイルに書き出し
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile(Environ("USERPROFILE") & "\Desktop\output.xml", True)
ts.Write xmlText
ts.Close
MsgBox "XMLファイルを書き出しました!"
End Sub
VB- ポイント:
- 文字列をタグ付きで組み立てる。
vbCrLfで改行を入れると見やすい。
テンプレ2:シートのデータをXMLに変換して保存
シート「Data」に以下の表があると仮定:
| 名前 | 年齢 | 住所 |
|---|---|---|
| 山田太郎 | 30 | 東京都江東区 |
| 鈴木花子 | 25 | 千葉県船橋市 |
コード例:
Sub WriteXML_FromSheet()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim lastRow As Long, i As Long
Dim xmlText As String
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
xmlText = "<users>" & vbCrLf
For i = 2 To lastRow
xmlText = xmlText & " <user>" & vbCrLf
xmlText = xmlText & " <name>" & ws.Cells(i, 1).Value & "</name>" & vbCrLf
xmlText = xmlText & " <age>" & ws.Cells(i, 2).Value & "</age>" & vbCrLf
xmlText = xmlText & " <address>" & ws.Cells(i, 3).Value & "</address>" & vbCrLf
xmlText = xmlText & " </user>" & vbCrLf
Next i
xmlText = xmlText & "</users>"
' ファイルに書き出し
Dim fso As Object, ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile(Environ("USERPROFILE") & "\Desktop\users.xml", True)
ts.Write xmlText
ts.Close
MsgBox "シートのデータをXMLに書き出しました!"
End Sub
VB- ポイント:
- 行ごとに
<user>タグを作成。 - 全体を
<users>で囲む。
- 行ごとに
テンプレ3:フォーム入力をXMLに書き出す
UserFormに TextBox1(氏名)、TextBox2(年齢)、TextBox3(住所)、CommandButton1(保存ボタン) を配置。
Private Sub CommandButton1_Click()
Dim xmlText As String
xmlText = "<user>" & vbCrLf & _
" <name>" & TextBox1.Value & "</name>" & vbCrLf & _
" <age>" & TextBox2.Value & "</age>" & vbCrLf & _
" <address>" & TextBox3.Value & "</address>" & vbCrLf & _
"</user>"
Dim fso As Object, ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile(Environ("USERPROFILE") & "\Desktop\form_output.xml", True)
ts.Write xmlText
ts.Close
MsgBox "フォーム入力をXMLに書き出しました!"
End Sub
VB- ポイント:
- フォーム入力をそのままタグ付きで保存。
- 設定ファイルやデータ交換に利用可能。
テンプレ4:属性付きXMLを出力
Sub WriteXML_Attributes()
Dim xmlText As String
xmlText = "<products>" & vbCrLf & _
" <product id=""101"" name=""ノートPC"" price=""120000""/>" & vbCrLf & _
" <product id=""102"" name=""マウス"" price=""2000""/>" & vbCrLf & _
"</products>"
Dim fso As Object, ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile(Environ("USERPROFILE") & "\Desktop\products.xml", True)
ts.Write xmlText
ts.Close
MsgBox "属性付きXMLを書き出しました!"
End Sub
VB- ポイント:
- 属性は
<tag 属性名="値">の形式。 - 商品マスタなどに便利。
- 属性は
例題で練習
'例1:単純なXMLを保存
'例2:シートのデータをXMLに変換して保存
'例3:フォーム入力をXMLに書き出す
'例4:属性付きXMLを出力
VB初心者向けポイント
- XMLは「タグ」で囲んで階層構造を作る →
<user>...</user>のように書く。 - シートやフォームの値をタグに埋め込む →
&で文字列連結。 - 複数データは親タグでまとめる →
<users>の中に<user>を複数。 - 属性を使うとコンパクトに表現できる →
<product id="101" ... />。 - 改行を入れると見やすい →
vbCrLfを活用。
👉 この「XML書き込みテンプレ」を覚えておけば、Excel VBAで シートやフォームのデータをXML形式に変換して保存し、外部システムや設定ファイルに活用できる ようになります。
