Excel VBA 逆引き集 | XML書き込み

Excel VBA
スポンサーリンク

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形式に変換して保存し、外部システムや設定ファイルに活用できる ようになります。

タイトルとURLをコピーしました