- ベストアンサー
VB6.0 一つの分類に対して複数の項目を紐付ける方法
VB6.0 アルゴリズムで悩んでいます。 分類A,A_2 分類B,B_1 分類A,A_1 ~ 上記のようなCSVを読み込みます。 その後、以下のように画面に展開したいのです。 分類A → A_2,A_1 分類B → B_1 ~ 分類は同じ値が存在した場合一つにまとめます。 項目は同じものが存在することはありません。 CreateObject("Scripting.Dictionary")を使用して何とかできないものかと思ったのですが、正直完全にお手上げ状態です。 少々説明が分かりにくいかもしれませんが、ご回答よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コレクションを要素に持つケースだと柔軟に対応できるかも。 Dim dic As Object Dim col As Collection Dim i As Long Dim csvLine(2) As String Dim word As Variant Dim key As Variant Set dic = CreateObject("Scripting.Dictionary") csvLine(0) = "分類A,A_2" csvLine(1) = "分類B,B_1" csvLine(2) = "分類A,A_1" For i = LBound(csvLine) To UBound(csvLine) word = Split(csvLine(i), ",") If Not dic.Exists(word(0)) Then Set col = New Collection col.Add word(1) dic.Add word(0), col Else dic(word(0)).Add word(1) End If Next For Each key In dic.keys Set col = dic(key) Debug.Print "●" & key For i = 1 To col.Count Debug.Print "(" & i & ")"; col.Item(i) Next Next dic.RemoveAll Set dic = Nothing
その他の回答 (2)
- bluecampus
- ベストアンサー率66% (138/209)
>Dictionaryと違って Dictionaryでも別に明示的に破棄しなくてもよかったはず。 まぁ、Dictionaryのほうに、Nothingを入れている以上どっちもやっておいたほうがBestそうですね。 (もしかしたら、DictionaryのRemoveAll(もしくはNothingを代入時)に、要素の参照カウンタもデクリメントされるかも。) For Each key In dic.keys Set dic(key) = Nothing Next dic.RemoveAll Set dic = Nothing
お礼
ありがとうございます。 どう実現すればよいか皆目見当もつかなかったためかなり苦労していました。 ですので本当に助かりました。 Collectionを破棄する構文と合わせて利用させていただきます。 本当にありがとうございました。
- n-jun
- ベストアンサー率33% (959/2873)
画面に展開というのがわかりませんでしたが、 Dim myDic As Object Dim myKey As Variant Dim i As Integer Dim v(3) As Variant Dim w As Variant Set myDic = CreateObject("Scripting.Dictionary") v(0) = "分類A,A_2" v(1) = "分類B,B_1" v(2) = "分類A,A_1" v(3) = "分類B,B_2" For i = 0 To 3 w = Split(v(i), ",") If Not myDic.Exists(w(0)) Then myDic(w(0)) = w(1) Else myDic(w(0)) = myDic(w(0)) & "," & w(1) End If Next For Each myKey In myDic.Keys Debug.Print myKey, myDic(myKey) Next Set myDic = Nothing こんな感じの事でしょうか?
お礼
回答ありがとうございます。 ご教授していただいた処理で解決しました。 本当にありがとうございます。 しかしこの処理のことでもう一点質問させていただきたいのですが。 >myDic(w(0)) = myDic(w(0)) & "," & w(1) と記述して分類ごとの項目を紐付けることは可能なのですが、 >myDic(w(0)) & "," & w(1) この部分を配列やCollectionなどにすることはできないでしょうか。 Array(0) = w(1) Array(1) = w(1) objCollection.Add(count,w(1)) 分類の数が不定ですので可能かどうか分かりませんが、よろしければご回答よろしく願いします。
お礼
回答ありがとうございます。 これです、これがやりたかったんです。 本当にありがとうございます。 しかし一点気になった点があります。 If Not dic.Exists(word(0)) Then Set col = New Collection ~ と動的にコレクションを増やしているのですが、これらはDictionaryと違って明示的に破棄する必要はないのでしょうか。