CATIA V5と言うよりVBAです。
タイトルが分かりにくいのですが、重複した値を持つ配列があります。
そこから重複を除去した配列を取得しつつ、重複した値が何か? も
取得したいので、わがままな関数を作りました。
'vba 配列の重複削除のわがまま仕様 Option Explicit Sub CATMain() Dim ary As Variant ary = Array(3, 1, 2, 4, 4, 3, 2, 2, "A", "B", "A") Dim resultArray As Variant resultArray = get_remove_duplicates_array(ary) dump_array resultArray(0) dump_array resultArray(1) End Sub ' 配列の重複削除 ' return array(array,array) - 0:重複無し配列, 1:重複した配列 Private Function get_remove_duplicates_array( _ ByVal ary As Variant) _ As Variant Dim dict_unique As Object Set dict_unique = CreateObject("Scripting.Dictionary") Dim dict_duplicates As Object Set dict_duplicates = CreateObject("Scripting.Dictionary") Dim i As Long Dim value As Variant For i = 0 To UBound(ary) value = ary(i) If Not dict_unique.exists(value) Then dict_unique.Add value, 0 GoTo continue End If If Not dict_duplicates.exists(value) Then dict_duplicates.Add value, 0 GoTo continue End If continue: Next get_remove_duplicates_array = Array( _ dict_unique.keys(), _ dict_duplicates.keys() _ ) End Function Private Sub dump_array( _ ByVal ary As Variant) Debug.Print "*****" Dim i As Long For i = 0 To UBound(ary) Debug.Print ary(i) Next End Sub
実行結果はこんな感じです。
***** 3 1 2 4 A B ***** 4 3 2 A
先の出力が重複無しで、後が重複していた値です。
・・・えぇ分かってます。本来であれば
重複除去の関数と重複している値のみを返す関数の二つ作るべきだと。