人に聞けない痔の悩み、これでスッキリ >>

いつもお世話になっております
以前 頂戴致しました、コードを
書き方を変えてやったところ
正しい答えになりませんです。
画像も添付致しました。
正がめぐみん様から頂戴したコード

誤がわくしが書いたコードです。

おしえてくれませんでしょうか

下記コードは教えて頂いたコード
var = Range("A2", Cells(Rows.Count, "A").End(xlUp)).Resize(, 4).Value
For i = LBound(var, 1) To UBound(var, 1)

If Not myDic.Exists(var(i, 1)) Then
myDic.Add var(i, 1), Array(var(i, 2) , 1)
Else
v = myDic(var(i, 1))
v(0) = v(0) + var(i, 2)
v(2) = v(2) + 1
myDic(var(i, 1)) = v
End If

Next
i = 2
For Each key In myDic.keys
Cells(i, "F").Value = key
Cells(i, "G").Resize(, 3).Value = myDic(key)
i = i + 1
Next
---------------------------------------------------------------
下記コードは少し変更したコード
For Each R In Range("A2", Cells(Rows.Count, "A").End(xlUp))  '変更した箇所
If Not Dic.Exists(R.Value) Then _
Dic.Add R.Value, Array(R.Range("B1"), 1) '変更した箇所

v = Dic(R.Value)
v(0) = v(0) + R.Offset(, 1)
v(1) = v(1) + 1
Dic(R.Value) = v
Next


'変更した箇所
Set rr = Range("F2")
For Each key In Dic.keys
rr.Value = key
rr.Offset(, 1).Resize(, 2).Value = _
Dic(key)
Set rr = rr.Offset(1)
Next

「Dictionary のやりかた」の質問画像

質問者からの補足コメント

  • ExcelVBAですか?
    はい
    アルゴリズム変更で、
    もっと 高速で、
    効率的な 書き方が、
    あると 思いますよ?

    ご興味は 持たれませんか?
    どのようなコードでしょぅか
    おしえてくれませんでしょうか

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/06/11 10:43

A 回答 (1件)

補足して 頂きたいのですが。




あの、

ExcelVBAですか?

変数宣言は 省力しない方が、
スピードも 上がりますし、
第1 解り易く、
なりますよね?


ほうほう、

配列Rの 添え字からの、
制御を 変更し、

レンジ範囲巡回(?)に 変えたのですね。


あの、

此の 書き方以外は、
受け付けては 折られないのですか?


元より、

此は、
確かに ディクショナリーを、
用いては いますが、

何方かと 言えば、
VB的で、
VBA的では ない、
コードですね。


詰まりは、

此の やり方では、
オブジェクトタッチ数が、
飛躍的に 多くて、

故、
遅いコードと なってますよね?


ですので、

アルゴリズム変更で、
もっと 高速で、
効率的な 書き方が、
あると 思いますよ?

ご興味は 持たれませんか?


但し、

ワーク領域を お借りしますがね。
この回答への補足あり
    • good
    • 0
この回答へのお礼

おしえてくれませんでしょうか

お礼日時:2020/06/11 11:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング