Hamlog(正式には「Turbo HAMLOG/Win」)で交信記録を取っていますが、eQSLやhQSL等の電子QSL以外のQSLカードは手書きで発行しています。
この手書きも結構手間がかかるので、ついつい溜まってしまいどうかすると半年分ぐらいまとめて書かなければならない羽目に陥ります。そこで、ExcelのVBAを利用してラベル印刷することを考えてみました。
Sub ラベル印刷()
Dim ws As Worksheet
Dim rng As Range
Dim rowIndex As Integer
Dim colIndex As Integer
Dim labelIndex As Integer
Dim lastRow As Integer
' データが入っているシートを指定
Set ws = ThisWorkbook.Sheets("Hamlogデータ") ' HamlogからCSVで落としたシート名を指定
' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' ラベル用のシートを作成
Dim lblSheet As Worksheet
On Error Resume Next
Set lblSheet = ThisWorkbook.Sheets("ラベル印刷")
If lblSheet Is Nothing Then
Set lblSheet = ThisWorkbook.Sheets.Add
lblSheet.Name = "ラベル印刷"
End If
On Error GoTo 0
' A-one 28916 用のフォーマット設定
Dim startRow As Integer: startRow = 2 ' ラベル開始位置
Dim startCol As Integer: startCol = 1
Dim rowSpacing As Integer: rowSpacing = 2 ' 行の間隔
Dim colSpacing As Integer: colSpacing = 1 ' 列の間隔
' ループ用変数
labelIndex = 2 ' データ開始行
' ラベル配置ループ(2列 × 6行)
For rowIndex = 0 To 5
For colIndex = 0 To 1
If labelIndex > lastRow Then Exit Sub ' データが無くなったら終了
' セルの位置計算
Dim cellRow As Integer
Dim cellCol As Integer
cellRow = startRow + (rowIndex * rowSpacing)
cellCol = startCol + (colIndex * colSpacing)
' ラベルデータ取得
Dim callSign As String: callSign = ws.Cells(labelIndex, 1).Value ' Call
Dim qsoDate As String: qsoDate = ws.Cells(labelIndex, 2).Value ' QSO Date
Dim time As String: time = ws.Cells(labelIndex, 3).Value ' Time
Dim rst As String: rst = ws.Cells(labelIndex, 4).Value ' RST Sent
Dim mhz As String: mhz = ws.Cells(labelIndex, 5).Value ' MHz
Dim mode As String: mode = ws.Cells(labelIndex, 6).Value ' Mode
' ラベルに印刷する内容
Dim labelText As String
labelText = "Confirming our QSO" & vbCrLf & "To Radio: " & callSign & vbCrLf & _
"Date: " & qsoDate & " Time: " & time & vbCrLf & " RST: " & rst & " Band: " & mhz & " MHz" & vbCrLf & _
"Mode: " & mode
' ラベルにデータを入力
lblSheet.Cells(cellRow, cellCol).Value = labelText
lblSheet.Cells(cellRow, cellCol).Font.Size = 12
lblSheet.Cells(cellRow, cellCol).Font.Bold = True
lblSheet.Cells(cellRow, cellCol).HorizontalAlignment = xlCenter
lblSheet.Cells(cellRow, cellCol).VerticalAlignment = xlCenter
lblSheet.Cells(cellRow, cellCol).RowHeight = 104
lblSheet.Cells(cellRow, cellCol).ColumnWidth = 39
' 次のデータへ
labelIndex = labelIndex + 1
Next colIndex
Next rowIndex
' 印刷プレビュー
lblSheet.PrintPreview
End Sub
↑ Excel VBAのコードです。下準備としてExcelのシートタブの名前を「Hamlogデータ」にしておきます。任意の名前でいいのですがVBAもそれに合わせて書き換える必要があります。そして、「ALT+F11」 → 挿入 → 標準モジュールの画面でコードを貼りつけます。

↑ 「Hamlogデータ」シートにはHamlogのQSOデータをCSVにしたものを貼りつけます。そして、
開発 → マクロ → ラベル印刷 → 実行、と進むと

↑ ラベル印刷シートが自動で生成されるのであとはこれを印刷すればOKです。なお、今回使用したラベルはエーワンの28915(ラベルサイズ83.8mm×42.3mm、2列×6段)で、これに合わせて設定していますのでこれ以外のラベルを使う時には微調整が必要になると思います。今回はテスト的に作成したのでRig欄やRemarks欄は割愛しています。ただ、これらを入れようとするとスペース的に厳しいのでフォントの大きさを変える必要があると思います。
コメント