クリップボード情報を、特定の列に並べ直す ~別解①~
昨日は、コピーなどの操作で一旦クリップボードに置かれた文字列(3行)を、選択セルの並びにある特定列に配置してみた。
infoment.hatenablog.com
今日は、昨日の内容を少しアレンジしてみる。
今回アレンジするのは、各価を配置する列番号の取得方法。
昨日の記事について、ExcelVBAerさんから「Typeステートメント」を使用する方法が紹介されていたので、これを用いた別解を検討してみる。
昨日のコードでは、「管理番号」「住所」「氏名」の三つの列について、それぞれのラベルをFindで検索し、その列番号を取得することで対応していた。
そこで別解として、セルに名前を付ける方法を採用してみる。
これなら行列の増減にも追従し、且つ、万が一ラベルの文字列が変更されたとしても、目的の列を問題なく探し出すことが出来る。
これに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三連星が無くなった分だけ、少しすっきりしました。
参考まで。