Skip to content

DeleteSameValue

Summary

配列内の重複した値を削除するための関数です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Function DeleteSameValue(arr As Variant) As Variant
'配列内の重複を削除する。
'
'Parameters
'------
'- arr:Variant
'対象となる配列

Dim dic As Object                      '重複を除いた値を格納する
Dim i, j                                       'ループカウンタ
Dim iLen                                     '配列要素数
Dim arrEdit() As Variant             '編集後の配列

'__init__
    Set dic = CreateObject("Scripting.Dictionary")
    ReDim arrEdit(0)
    iLen = UBound(arr)

'__main__
    For i = 0 To iLen
        '配列に未登録の場合
        If (dic.Exists(arr(i)) = False) Then
            Call dic.Add(arr(i), arr(i))      '追加

            '重複がない値のみ編集後の配列に格納する
            arrEdit(UBound(arrEdit)) = arr(i)
            ReDim Preserve arrEdit(UBound(arrEdit) + 1)
        Else
        End If
    Next

    '配列に格納済みの場合
    If IsEmpty(arrEdit(0)) = False Then
       '余分な領域を削除
       ReDim Preserve arrEdit(UBound(arrEdit) - 1)
    End If

    DeleteSameValue = arrEdit
End Function

説明

この関数は、渡された配列 arr 内の重複した値を削除するために使用されます。 関数は、Scripting.Dictionary オブジェクトを使用して、重複を除いた値を格納します。
配列の要素を順番に走査し、配列に未登録の場合は辞書に値を追加し、編集後の配列 arrEdit に格納します。 重複した値はスキップされます。
最後に、arrEdit の要素数を調整し、重複を削除した配列が戻り値として返されます。

引数

  • arr (Variant型): 対象となる配列

戻り値

  • 戻り値の型: Variant型 (重複を削除した配列)

Examples

列内の重複した値を削除する方法が示されています。
元の配列 originalArray に対して DeleteSameValue 関数を適用し、重複を削除した配列 uniqueArray を取得します

1
2
3
4
5
6
' 配列内の重複した値を削除する
Dim originalArray() As Variant
    originalArray = Array(1, 2, 3, 2, 4, 5, 1, 3)

Dim uniqueArray() As Variant
    uniqueArray = DeleteSameValue(originalArray)