Turbo Hamlogのオプション(O)ーマスターデータをテキスト出力(O)で出力されたテキストファイル(master.txt)をExcelシートに読み込み、"master.xlsx"として保存するマクロです。
Hamlog自体にもExcelシートへ出力する機能がありますが、変換に時間がかかるので、テキストファイルから変換してみました。
このマクロはマスターデータ(master.txt)と同じディレクトリに置いてください。
ワークブックにはシート”Main"と”Master"をあらかじめ作成しておきます。
シート”Main"はマクロを実行するボタンなどを配置
シート”Master"は”Master.txtを読み込んだ結果が反映されます。
-------------------------------------------------------------------------------
Option Explicit
Sub MasterTextToExcel()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Dim filePath As String
Dim stream As Object
Dim lines() As String
Dim textLine As Variant
Dim row As Long
Dim i As Long, j As Long
' スクリーン更新をオフ
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' ワークシートを設定 ここではシート"Master"を設定
Set ws = ThisWorkbook.Sheets("Master")
ws.Cells.Clear
ws.Cells.NumberFormat = "@" ' 文字列形式に設定
' タイトル行を設定
ws.Range("A1:T1") = Array("No", "Code", "QTH", "Flag", "1.9", "3.5", "7", "10", "14", "18", _
"21", "24", "28", "50", "144", "430", "1200", "2400", "5600", "SAT")
' テキストファイルのパス
filePath = ThisWorkbook.Path & "\master.txt"
' テキストファイル読み込み(Shift-JIS)
Set stream = CreateObject("ADODB.Stream")
With stream
.Type = 2 ' テキスト
.Charset = "Shift-JIS"
.Open
.LoadFromFile filePath
lines = Split(.ReadText, vbCrLf)
.Close
End With
' 各行を処理
row = 1
For Each textLine In lines
If Trim(textLine) <> "" Then
row = row + 1
ws.Cells(row, 1) = row - 1 ' No
ws.Cells(row, 2) = Trim(Mid(textLine, 1, 6)) ' Code
ws.Cells(row, 3) = RTrim(Replace(StrConv(MidB(StrConv(textLine, vbFromUnicode), 7, 34), vbUnicode), " ", "")) ' QTH
ws.Cells(row, 4) = StrConv(MidB(StrConv(textLine, vbFromUnicode), 41, 4), vbUnicode) ' Flag
' バンド別WKD/CFM
j = 5
For i = 45 To 75 Step 2
ws.Cells(row, j) = Trim(StrConv(MidB(StrConv(textLine, vbFromUnicode), i, 2), vbUnicode))
j = j + 1
Next i
End If
Next
' Masterシートを別名保存
ws.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Master.xlsx", xlOpenXMLWorkbook
ActiveWorkbook.Close
' Mainシートに更新情報を記録(この部分は削除可)
With ThisWorkbook.Sheets("Main")
.Cells(2, 10) = "Master.xlsx " & Format(Now, "yyyy/mm/dd hh:nn:ss") & " 更新"
.Activate
End With
ThisWorkbook.Save
' 後処理
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "データ読み込みが完了しました。", vbInformation
Exit Sub
ErrorHandler:
If Not stream Is Nothing Then stream.Close
MsgBox "エラーが発生しました。ファイルパスまたはデータ形式を確認してください。", vbCritical
End Sub