クリップボード情報を、特定の列に並べ直す ~別解①~

昨日は、コピーなどの操作で一旦クリップボードに置かれた文字列(3行)を、選択セルの並びにある特定列に配置してみた。
infoment.hatenablog.com
今日は、昨日の内容を少しアレンジしてみる。
f:id:Infoment:20190308224650p:plain
今回アレンジするのは、各価を配置する列番号の取得方法。
昨日の記事について、ExcelVBAerさんから「Typeステートメント」を使用する方法が紹介されていたので、これを用いた別解を検討してみる。

昨日のコードでは、「管理番号」「住所」「氏名」の三つの列について、それぞれのラベルをFindで検索し、その列番号を取得することで対応していた。
そこで別解として、セルに名前を付ける方法を採用してみる。
f:id:Infoment:20190308225106p:plain

これなら行列の増減にも追従し、且つ、万が一ラベルの文字列が変更されたとしても、目的の列を問題なく探し出すことが出来る。

これにTypeステートメントを加えた結果が↓こちら。

Enum PasteIndex
    管理番号 = 0
    住所
    氏名
End Enum
Type TP_Col
    管理番号 As Long
    住所 As Long
    氏名 As Long
End Type
Sub Sample()
    ' Microsoft Forms 2.0 Object Library 参照済み。
    Dim CB As DataObject
    Set CB = New DataObject
        CB.GetFromClipboard
    Dim str As String
        On Error Resume Next
        str = CB.GetText
        If str = vbNullString Then
            MsgBox "クリップボードは空です。"
            Exit Sub
        End If
        On Error GoTo 0
        
    ' クリップボードの情報分割用。
    Dim seq As Variant
        seq = Split(str, vbCrLf)
        If UBound(seq) < 3 Then
            MsgBox "クリップボード情報は、目的のデータではありません。"
            Exit Sub
        End If
        
    Dim i As Long
        i = Selection(1).Row
    Dim myCol As TP_Col
        myCol.管理番号 = Range("管理番号").Column
        myCol.住所 = Range("住所").Column
        myCol.氏名 = Range("氏名").Column

        Cells(i, myCol.管理番号) = seq(PasteIndex.管理番号)
        Cells(i, myCol.住所) = seq(PasteIndex.住所)
        Cells(i, myCol.氏名) = seq(PasteIndex.氏名)
End Sub

昨日のProperty Get三連星が無くなった分だけ、少しすっきりしました。

参考まで。