【Excel VBA】セル内の改行を除去してXML要素を作成する方法

Excelのセルに入力されたデータをVBAでXMLファイルに出力する際、セル内に含まれる改行コードが原因で、意図しないXMLが生成されてしまうことがあります。

この記事では、セルから取得した値の改行コードをReplace関数で除去し、クリーンなデータにしてからXMLの要素(ノード)を作成する、実用的な方法を解説します。


目次

なぜ改行コードの除去が必要か?

XMLにおいて改行やスペースは「意味を持つ文字」として扱われるため、セル内の改行がそのままXMLに出力されると、データの構造が崩れたり、連携先のシステムでエラーが発生したりする原因となります。

データをXML化する前には、不要な改行コードなどの制御文字をあらかじめ取り除いておくことが、安定した動作のための重要なステップです。


完成したVBAコード

以下が、指定したセルの値から改行コードを削除し、その値をテキストとして持つXML要素を作成してファイルに保存するコードです。

Sub CreateXmlElementFromCell()

    ' 変数を宣言します
    Dim xmlDoc As Object
    Dim rootElement As Object
    Dim textNode As Object
    Dim sourceCell As Range
    Dim cellValue As String
    Dim outputXmlPath As String
    
    ' --- 設定箇所 ---
    ' データが入力されているセルを指定します
    Set sourceCell = ThisWorkbook.Worksheets("Sheet1").Range("B2")
    ' --- 設定ここまで ---

    ' 書き出すXMLファイルのパスを指定します
    outputXmlPath = ThisWorkbook.Path & "\ElementData.xml"

    ' 1. セルから値を取得し、改行コードを削除します
    '    vbLf (LF) と vbCrLf (CRLF) の両方に対応します
    cellValue = Replace(sourceCell.Value, vbLf, "")
    cellValue = Replace(cellValue, vbCrLf, "")

    ' XMLドキュメントオブジェクトを生成します
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    
    ' --- XMLの組み立て ---
    With xmlDoc
        ' XML宣言を作成して追加します
        .AppendChild .CreateProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
        
        ' 2. 要素ノードを作成します (例: <item>)
        Set rootElement = .CreateElement("item")
        
        ' 3. テキストノードを作成します (改行除去済みの値を使用)
        Set textNode = .CreateTextNode(cellValue)
        
        ' 4. テキストノードを要素ノードの子として追加します
        rootElement.AppendChild textNode
        
        ' 5. 要素ノードをドキュメントのルート要素として追加します
        .AppendChild rootElement
        
        ' 6. ファイルとして保存します
        .Save outputXmlPath
    End With
    
    ' オブジェクトを解放します
    Set textNode = Nothing
    Set rootElement = Nothing
    Set xmlDoc = Nothing

    MsgBox "XMLファイルの作成が完了しました。"

End Sub

コードのポイント解説

① セル値の取得と改行コードの除去

cellValue = Replace(sourceCell.Value, vbLf, "")
cellValue = Replace(cellValue, vbCrLf, "")

このコードの最初の重要なステップです。指定されたセル(sourceCell)から値を取得し、Replace関数を使って改行コードを空の文字列("")に置換しています。

Excelのセル内改行には、vbLf (LF) と vbCrLf (CRLF) の2種類が主に使われるため、両方に対応することで、より確実に改行を除去できます。

② 要素ノードの作成 (.CreateElement)

Set rootElement = .CreateElement("item")

CreateElementメソッドを使い、<item>という名前の要素ノードを生成します。この時点では、まだ中身は空っぽのタグだけが作られたイメージです。

③ テキストノードの作成 (.CreateTextNode)

Set textNode = .CreateTextNode(cellValue)

CreateTextNodeメソッドを使い、要素の「中身」となるテキストノードを生成します。引数には、①で改行コードを除去したクリーンな文字列cellValueを渡します。

④ 親子関係の構築 (.AppendChild)

rootElement.AppendChild textNode
.AppendChild rootElement

XMLの構造は、.AppendChildメソッドでノード同士を親子として繋ぎ合わせることで構築します。

  1. rootElement.AppendChild textNode まず、テキストノード(textNode)を要素ノード(rootElement)の子として追加します。これにより、<item>セルの値</item> という構造がメモリ上で完成します。
  2. .AppendChild rootElement 次に、完成した要素ノード(rootElement)を、ドキュメント全体(xmlDoc)の子として追加します。

この2段階の追加処理が、XML構造を組み立てる際の基本となります。


まとめ

VBAでセルデータをXMLに出力する際は、CreateElementCreateTextNodeでXMLの部品を作るだけでなく、その元となるデータ自体を事前にクリーンアップすることが非常に重要です。

特に、Replace関数を使って予期せぬ改行コードをあらかじめ除去しておくことは、安定したXMLを生成するための必須のテクニックと言えます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次