Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6350 / 13644 ツリー ←次へ | 前へ→

【45712】Scripting.Dictionaryの使い方 迷える子羊 07/1/12(金) 11:58 質問[未読]
【45717】Re:Scripting.Dictionaryの使い方 neptune 07/1/12(金) 13:36 回答[未読]
【45718】Re:Scripting.Dictionaryの使い方 迷える子羊 07/1/12(金) 13:54 質問[未読]
【45719】Re:Scripting.Dictionaryの使い方 neptune 07/1/12(金) 14:28 回答[未読]

【45712】Scripting.Dictionaryの使い方
質問  迷える子羊  - 07/1/12(金) 11:58 -

引用なし
パスワード
   あちこち調べてみましたが、Scripting.Dictionaryの使い方がどうも理しきれていません(-_-;)下記のコードについて質問させてください。Dictionaryがキーとitemをもてるオブジェクトということは理解しているつもりなのですが…。

Set myDic = CreateObject("Scripting.Dictionary")
'A列とC列の1〜最終行を選択
With Worksheets(strDataSheet)
   Set myRng = Intersect(Union(.Columns("A"), .Columns("C")), .UsedRange)
End With

i = 0
'2行目〜最終行までのループ
For idxRow = 2 To myRng.Rows.Count
'A列+C列をDictionaryのKeyにする
  myKey = myRng(idxRow, 1) & vbTab & myRng(idxRow, 2)
'Keyが存在しなかったら
  If Not myDic.exists(myKey) Then
    i = i + 1
    myDic(myKey) = i        ←この意味は? 
    myRng(i, 1) = myRng(idxRow, 1) ←この意味は?
    myRng(i, 2) = myRng(idxRow, 2) ←この意味は?
    myRng(i, 3) = 1        ←この意味は?  
'Keyが存在したら
  Else
    myRng(myDic(myKey), 3) = myRng(myDic(myKey), 3) + 1
  End If
Next

i = 0
'集計結果の出力 ※これでは結果が出ませんでしたのでどこか間違っていそうです
With Worksheets(strOutputSheet)
  idxRow = idxMaxRow
  For lngIdx = 2 To myRng.Rows.Count
    i = i + 1
    .Cells(idxRow, 1) = myRng(i, 1) ←これが間違い?
    .Cells(idxRow, 2) = myRng(i, 2) ←これが間違い?
    .Cells(idxRow, 3) = myDic(myKey) ←これが間違い?
  Next
End With

【45717】Re:Scripting.Dictionaryの使い方
回答  neptune  - 07/1/12(金) 13:36 -

引用なし
パスワード
   ▼迷える子羊 さん:
こんにちは

'Keyが存在しなかったら
ですが、Dictionaryオブジェクトが存在するだけで中身がないので
無意味です。

1.自分が何がしたいかを整理しましょう。
2.自分が使いたい物は先ずHelpで調べましょう。
3.それから用意されたプロパティ、メソッドでどう実現するかを考えましょう。
ht tp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsobjdictionary.asp

【45718】Re:Scripting.Dictionaryの使い方
質問  迷える子羊  - 07/1/12(金) 13:54 -

引用なし
パスワード
   HELPなどはかなり調べましたが、Scripting.Dictionaryの概念の捉え方が間違っているようで・・・

キーが存在した→すでにあるDicのアイテムのカウントを+1
キーが存在しなかった→Dicに新しいアイテム追加

という処理にして集計を行いたいのですが、Key、アイテム、の他に
指定範囲内のアイテム数をカウントする場合にどこにそのカウントを
もつのかがわかりません・・・

【45719】Re:Scripting.Dictionaryの使い方
回答  neptune  - 07/1/12(金) 14:28 -

引用なし
パスワード
   ▼迷える子羊 さん:
>HELPなどはかなり調べましたが、Scripting.Dictionaryの概念の捉え方が間違っているようで・・・
>
ん〜・・・
>キーが存在した→すでにあるDicのアイテムのカウントを+1
>キーが存在しなかった→Dicに新しいアイテム追加
>
>という処理にして集計を行いたいのですが、Key、アイテム、の他に
>指定範囲内のアイテム数をカウントする場合にどこにそのカウントを
>もつのかがわかりません・・・
先ず、Itemの追加処理を書いてませんね。これを先ず書きましょう。
カウントはその後です。

Dictionaryはその名の通り辞書です。質問のソースでは辞書に中身がありません。
辞書の中身は自分で設定してやる必要があります。
その為にAddメソッドがあります。

6350 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free