PR

QSLカードのラベル印刷をおこなうVBA

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欄は割愛しています。ただ、これらを入れようとするとスペース的に厳しいのでフォントの大きさを変える必要があると思います。

コメント

PAGE TOP
タイトルとURLをコピーしました