Sub dicdic()
Dim d(1) As New Scripting.Dictionary
Dim c As Long
Dim s As String
For c = 2 To Range("D" & Rows.Count).End(xlUp).Row
s = Range("D" & c).Value
If Not d(0).Exists(s) Then
d(0).Add s, Range("E" & c).Value
d(1).Add s, Range("F" & c).Value
Else
d(0).Item(s) = d(0).Item(s) + Range("E" & c).Value
d(1).Item(s) = d(1).Item(s) + Range("F" & c).Value
End If
Next
For c = 0 To d(0).Count - 1
Range("H" & c + 2).Value = d(0).Keys(c)
Range("I" & c + 2).Value = d(0).Items(c)
Range("J" & c + 2).Value = d(1).Items(c)
Next
End Sub
Sub dicdic()
> Dim d(1) As New Scripting.Dictionary
> Dim c As Long
> Dim s As String
> For c = 2 To Range("D" & Rows.Count).End(xlUp).Row
> s = Range("D" & c).Value
> If Not d(0).Exists(s) Then
> d(0).Add s, Range("E" & c).Value
> d(1).Add s, Range("F" & c).Value
> Else
> d(0).Item(s) = d(0).Item(s) + Range("E" & c).Value
> d(1).Item(s) = d(1).Item(s) + Range("F" & c).Value
> End If
> Next
> For c = 0 To d(0).Count - 1
> Range("H" & c + 2).Value = d(0).Keys(c)
> Range("I" & c + 2).Value = d(0).Items(c)
> Range("J" & c + 2).Value = d(1).Items(c)
> Next
> End Sub
こんちゃんさんの投稿
(投稿ID: 3988)
例えば、取引先金額1と2があるとして、
取引先金額1の合計
取引先金額2の合計を算出したいとき、
値の合計がどうしてもうまくいきません。
文字列であればsplitを使えますが、値だとできないのでしょうか。
おとなしく連想配列を二つ作って、割り振ればいいのでしょうが、
連想配列一つでできないかな~と模索中です。
小川 慶一さんのコメント
(コメントID: 5539)
> 連想配列一つでできないかな~と模索中です。
↑
そうすることのメリットは何でしょうか?
実務上の事情なのか、単なる、技術的追求なのか...。
例えば、以下では、D列に商品名、E列に入荷回数、F列に仕入金額が記入されていたとして、各商品の出荷した回数とその合計額を求めます。
連想配列を2つ使ってはいますが、さらにそれらをひとつの配列に格納しているので、そういう意味では上手にひとまとめにしている、とも言えるかもしれません。
どこまでやるかは程度によります。
「入荷回数と仕入金額」だけだと項目2つなのでそれほどメリットないですが、5個も6個も集計対象があればこういう書き方も有効か?とは思います。
サンプルデータとサンプルコードです↓。
https://www.dropbox.com/s/vxb4s8uggw1mpjf/sampledata.xlsm?dl=0
> 合計する金額が2項目ある場合はSplit関数でも対応できないでしょうか。
> 例えば、取引先金額1と2があるとして、
> 取引先金額1の合計
> 取引先金額2の合計を算出したいとき、
> 値の合計がどうしてもうまくいきません。
> 文字列であればsplitを使えますが、値だとできないのでしょうか。
> おとなしく連想配列を二つ作って、割り振ればいいのでしょうが、
> 連想配列一つでできないかな~と模索中です。
こんちゃんさんのコメント
(コメントID: 5540)
小川慶一さん:
> こんちゃんさん:
>
> > 連想配列一つでできないかな~と模索中です。
> ↑
> そうすることのメリットは何でしょうか?
> 実務上の事情なのか、単なる、技術的追求なのか...。
↑
単なる技術的な追及です!
サンプルデータありがとうございます。
なるほど、
連想配列に要素番号をもたせる発想がありませんでした!
まさにこれで解決しました!!
是非使わせていただきます!!
> 例えば、以下では、D列に商品名、E列に入荷回数、F列に仕入金額が記入されていたとして、各商品の出荷した回数とその合計額を求めます。
> 連想配列を2つ使ってはいますが、さらにそれらをひとつの配列に格納しているので、そういう意味では上手にひとまとめにしている、とも言えるかもしれません。
>
> どこまでやるかは程度によります。
> 「入荷回数と仕入金額」だけだと項目2つなのでそれほどメリットないですが、5個も6個も集計対象があればこういう書き方も有効か?とは思います。
>
>
>
> サンプルデータとサンプルコードです↓。
> https://www.dropbox.com/s/vxb4s8uggw1mpjf/sampledata.xlsm?dl=0
>
>
>
> > 合計する金額が2項目ある場合はSplit関数でも対応できないでしょうか。
> > 例えば、取引先金額1と2があるとして、
> > 取引先金額1の合計
> > 取引先金額2の合計を算出したいとき、
> > 値の合計がどうしてもうまくいきません。
> > 文字列であればsplitを使えますが、値だとできないのでしょうか。
> > おとなしく連想配列を二つ作って、割り振ればいいのでしょうが、
> > 連想配列一つでできないかな~と模索中です。
小川 慶一さんのコメント
(コメントID: 5541)
おはようございます。
> 連想配列に要素番号をもたせる発想がありませんでした!
> まさにこれで解決しました!!
> 是非使わせていただきます!!
というか、連想配列の配列、ですね。
こういうのは、確かに、習いたてですぐに思いつくのは難しいかもですね。
ひきつづきお楽しみください☆
> 小川慶一さん:
>
> > こんちゃんさん:
> >
> > > 連想配列一つでできないかな~と模索中です。
> > ↑
> > そうすることのメリットは何でしょうか?
> > 実務上の事情なのか、単なる、技術的追求なのか...。
>
> ↑
> 単なる技術的な追及です!
>
> サンプルデータありがとうございます。
> なるほど、
> 連想配列に要素番号をもたせる発想がありませんでした!
> まさにこれで解決しました!!
> 是非使わせていただきます!!