 |
@左図のように選択したセル範囲のデータから、一意のものを取り出すマクロを作成します
|
 |
A適当なモジュールを開いて、左図のようなマクロのコードを入力します
|
Sub CopyUniqueDataToClipboard()
Dim selectedRange As Range
Dim uniqueValues As Variant
Dim uniqueIndex As Long
Dim data As Variant
Dim clipboardText As String
|
selectedRange
Rangeオブジェクト型の変数で、選択されたセル範囲を格納します。
uniqueValues
ユニークな値を格納する配列です。
uniqueIndex
ユニークな値の配列内のインデックスを示す変数です。
data
選択されているセル範囲のデータを格納するための配列です。
clipboardText
クリップボードにコピーするテキストを格納する変数です。 |
' 選択されたセル範囲を取得
Set selectedRange = Selection
|
Selection関数を使用して、現在選択されているセル範囲を取得し、selectedRange変数に格納します。 |
' 選択範囲のデータを配列に取得
data = selectedRange.Value
|
selectedRange.Valueを使用して、選択範囲のデータをdata配列に格納します。 |
' ユニークな値を取得
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(data, 1)
For j = 1 To UBound(data, 2)
If Not IsEmpty(data(i, j)) And Not dict.Exists(data(i, j)) Then
dict.Add data(i, j), Nothing
End If
Next j
Next i
|
Scripting.Dictionaryオブジェクトを使用して、ユニークな値を保持する辞書(dict)を作成します。
ネストされたループを使用して、data配列内の各要素をチェックし、重複していない場合に辞書に追加します。 |
' ユニークな値を配列に格納
ReDim uniqueValues(1 To dict.count, 1 To 1)
uniqueIndex = 1
For Each Key In dict.Keys
uniqueValues(uniqueIndex, 1) = Key
uniqueIndex = uniqueIndex + 1
Next Key
|
dict.Keysを使用して、辞書内のユニークな値を取得し、それらを配列uniqueValuesに格納します。 |
' 配列を文字列に変換
For i = LBound(uniqueValues, 1) To UBound(uniqueValues, 1)
clipboardText = clipboardText & uniqueValues(i, 1) & vbCrLf
Next i
|
uniqueValues配列内の各要素をループして、clipboardTextに文字列として追加します。
各値の後には改行が挿入されます。 |
' クリップボードにデータを格納
With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '
MSForms.DataObject
|
.SetText clipboardText
.PutInClipboard
End With
End Sub
|
MSForms.DataObjectを使用して、クリップボードにテキストをコピーします。
SetTextメソッドでテキストを設定し、PutInClipboardメソッドでクリップボードにデータを格納します。 |
 |
Bこのマクロは、対象となるセル範囲を選択してから実行することになります
|
 |
Cマクロ実行後、結果はクリップボードにコピーされるので、見た目にはなんの変化もありません
適当なシートとセルを選択して貼り付けると、抽出された一意のデータ一覧が表示されます。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
●選択中のセル範囲のデータを、1列にまとめるマクロを作る動画です
|