|
▼愛子 さん:
こんにちは
あくまで想像の世界ですから、以下のコードはボツになるかもしれませんが・・・
・aシートに表があるとします。
・1行目がタイトル行で、E列が名前、L列が金額
・aシートの上で、小計機能で、グループの基準がE列、合計列はL列。
・こうした上で、表示は小計レベルに折りたたんであっても、明細レベルまですべて表示してあっても
かまわないのですが、ここから bシートの N列の名前をトリガーにしてO列に、aシートの同名の人の
金額を足しこむ。
こんなコードを書いてみました。
Sub Sample3()
'Dictionary処理案。
Dim c As Range
Dim newV As Variant
Dim i As Long
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("a")
'aシートの小計表から明細行を抽出して格納
For Each c In .Range("E2", .Range("E" & .Rows.Count).End(xlUp))
If c.EntireRow.OutlineLevel = 3 Then
dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value
End If
Next
End With
With Sheets("b")
'bシートの N列、O列の内容(2行目以降)を配列に格納
With .Range("N2", .Range("N" & .Rows.Count).End(xlUp)).Resize(, 2)
.Columns(2).ClearContents 'O列をクリア
newV = .Value
End With
For i = 1 To UBound(newV, 1)
If dic.exists(newV(i, 1)) Then newV(i, 2) = dic(newV(i, 1))
Next
.Range("N2").Resize(UBound(newV, 1), UBound(newV, 2)).Value = newV
.Select
End With
End Sub
|
|