3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Excel】XMLからタグ名と値を取り出す

Posted at

未だXMLは使われ続けています。

「データのやりとりはJSONでやれ」「XMLなど悪魔に拐われろ」ですって? きっとそうなのでしょう。ですがXMLを使ったシステムをメンテナンスする機会があるかもしれません。出力したXMLのデータが正しいか、つまり、電話番号がハイフン区切りか、IDが8桁かどうか、そういったことのチェックをしなければならぬ日もあることでしょう。その仕様書はおそらくExcelでしょう。

ExcelでXMLが捌けたら!
タグの中のデータだけ取り出せたら!

そんな夢を、Excelの関数だけで実現します。

完成品

  • XML
    unnamed.jpg

  • タグ名

=MID(LEFT(A3,FIND(">",A3)),2,LEN(LEFT(A3,FIND(">",A3)))-2)
=MID(A3,FIND(">",A3)+1,FIND("<",A3,2)-FIND(">",A3)-1)

完成に至るまで

※お暇な方だけお付き合いくださいませ。

タグ名

  1. まずはタグ(例として<id>)を抜き出そう。<id>が4文字だから、先頭から4文字抜き出そう。

    =LEFT(A3,4)
    
  2. でも<Name>だと6文字になる。開始タグの文字数を調べよう。

    =FIND(">",A3)
    
  3. これで開始タグは取り出せた。

    =LEFT(A3,FIND(">",A3))
    
  4. <>を除去したい。2文字目 (I)から2文字抜き出そう。

    =MID(A3,2,2)
    
  5. でも<Name>だと4文字抜きださないと。タグの文字数-2(<>の2文字分)でいいはず。

    =LEN(LEFT(A3,FIND(">",A3)))-2
    
  6. 完成

    =MID(LEFT(A3,FIND(">",A3)),2,LEN(LEFT(A3,FIND(">",A3)))-2)
    

  1. Mid関数が使えそう。

    =MID(A3,5,7)
    
  2. Mid()の開始位置は開始タグの文字数+1でよさそう。

    =FIND(">",A3)+1
    
  3. データ部の文字数は、閉じタグの<の位置 -(開始タグの文字数-1)
    Mid関数の開始位置に1(先頭)を指定すると開始タグの<がヒットするので、2以降を。

    =FIND("<",A3,2)-FIND(">",A3)-1
    
  4. 完成

    =MID(A3,FIND(">",A3)+1,FIND("<",A3,2)-FIND(">",A3)-1)
    
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?