|
▼亜矢 さん:
こんにちは。
neptune さん ご紹介の【dictionary】については
前回のスレッド《【66193】変数内の同じデータ》
のなかで ひとつの利用方法を紹介しましたが、ご理解
されましたでしょうか?
>▼亜矢 さん:
>こんにちは
>
>りんさんの紹介されているDictionaryですが、これは
>便利ですよ♪
>ぜひ習得されることをおすすめします。
>文章中の単語の出現回数とか、
>グループ別の数量カウントなどもできますので。
>
>Sub Try1()
> Dim dic As Object
> Dim MM() As String
> ReDim MM(1 To 8) ' ------- 少ないデータで実験
> MM(1) = "りんご"
> MM(2) = "みかん"
> MM(3) = "めろん"
> MM(4) = "りんご"
> MM(5) = "かき"
> MM(6) = "もも"
> MM(7) = "りんご"
> MM(8) = "みかん"
>
> Dim i As Long
>
> Set dic = CreateObject("Scripting.Dictionary")
> For i = 1 To UBound(MM)
> dic(MM(i)) = Empty 'どんどん配列要素を登録する(重複していれば上書きされる)
> Next
>
>' 結果を元の配列に入れる
> ReDim MM(1 To dic.Count)
> For i = 0 To dic.Count - 1
> MM(i + 1) = dic.Keys()(i)
> Next
>
> Set dic = Nothing
>End Sub
>ありがとうございました。上記の通り行って結果解決しました。
とのお返事でしたが、
上記を理解していれば、下も分かりますよね?
Sub Try2()
'↓ほんとは 変数には すでに 値が入っているのですが...
' ここでは ひとつづ 代入しています。
Dim AA(1 To 5) As String
Dim BB(1 To 5) As String
AA(1) = "りんご": BB(1) = "すいか"
AA(2) = "みかん": BB(2) = "とまと"
AA(3) = "すいか": BB(3) = "みかん"
AA(4) = "すもも": BB(4) = "なし"
AA(5) = "かき": BB(5) = "くり"
Dim i As Long
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
'配列AA() をdicに重複カットして登録
For i = 1 To UBound(AA)
dic(AA(i)) = Empty
Next
'このなかに 配列BB()のメンバがいるか? ひとつづつ調べる
'結果を入れる3番目の配列 CC()を用意する(要素数はAAと同じ要素数)
ReDim CC(1 To UBound(AA)) As String
Dim k As Long
For i = 1 To UBound(BB)
If dic.Exists(BB(i)) Then
k = k + 1
CC(k) = BB(i)
End If
Next
'結果の配列CC()を実際に利用された要素数kにリサイズする
ReDim Preserve CC(1 To k)
'確認
For i = 1 To k
Debug.Print CC(i)
Next
End Sub
もっとも、
Excelでは いきなり「配列」があるのではなく、
シートのデータを配列に格納して...処理をする...
ということが多いので、
(シートにデータがなければ、配列内容をシートにコピーして、)
「データ」-[フィルタ]-[フィルタオプションの設定]
で抽出剃る方法もあります。
Dictionaryでやっていることがわからないときは、
こちらのほうが、理解しやすいかも?
|
|