前回、VBAによるKMLファイルの読み込みを記事にしました。
今回は、読み込んだKMLファイルのデータを用いてCSVファイルへ変換するコードを紹介します。
KML→CSV変換コード
Sub Convert_KML_To_CSV()
'KMLファイルをcsvファイルに変換する
Dim strTgTfldNM As String 'ターゲットフォルダを格納する
Dim strTgTfleNM As String 'ターゲットファイルを格納する
'アクセスのあるフォルダのパスを取得
strTgTfldNM = Application.CurrentProject.Path
'読み込むKMLファイル名を設定
strTgTfleNM = "須磨駅から神戸須磨シーワールドまでのルート.kml"
Dim Objkml As Object 'xml操作用オブジェクト
'要素格納用変数
Dim youso_LineString As Object
Dim youso_coordinates As Object
'CSVファイル出力用のデータを格納する変数
Dim strCSV As String
Dim obj_AdoSt As Object 'ADOファイルストリームを使用してテキストを出力する
'変数をリセット
strCSV = ""
Set Objkml = CreateObject("MSXML2.DOMDocument")
With Objkml
'KMLファイル読み込み
.Load strTgTfldNM & "\" & strTgTfleNM
Set youso_LineString = .getElementsByTagName("LineString").Item(0)
For Each youso_coordinates In youso_LineString.getElementsByTagName("coordinates")
'CSVファイル出力用の変数に格納
strCSV = strCSV & Replace(youso_coordinates.Text, " ", "")
Next youso_coordinates
End With
'CSVファイル出力
strTgTfldNM = CurrentProject.Path '出力先はこのAccessファイルのあるフォルダ
strTgTfleNM = "waq3.CSV"
'ターゲットフォルダ内のCSVファイルの有無をチェック
If Dir(strTgTfldNM & "\" & strTgTfleNM) <> "" Then
MsgBox "同名のファイルがあります", vbCritical
'出力先のフォルダを開く
Application.FollowHyperlink strTgTfldNM
Exit Sub
End If
'CSVファイル出力
'上書きモードでファイルをオープン
Set obj_AdoSt = CreateObject("ADODB.Stream")
' 文字コードを指定(UTF-8で出力)
obj_AdoSt.Charset = "UTF-8"
' 改行コードを指定(-1はCRLF)
obj_AdoSt.LineSeparator = -1
' オープン
obj_AdoSt.Open
obj_AdoSt.WriteText strCSV, 1
'CSVファイルの保存
obj_AdoSt.SaveToFile strTgTfldNM & "\" & strTgTfleNM, 2
obj_AdoSt.Close
MsgBox "処理終了", vbInformation
End Sub
上記のVBAコードを実行すると、アクセスが置いてあるフォルダ内に「waq3.CSV」というCSVファイルを作成します。


コメントをどうぞ!