Excel VBA質問箱 IV

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

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


44927 / 76732 ←次へ | 前へ→

【36813】Re:累積計算を高速で行うには?
発言  Ned  - 06/4/14(金) 15:23 -

引用なし
パスワード
   こんにちは。
 
【36764】のコードを少し修正して流用すると、下記のような感じです。

Sub sample2()
  Dim a, d, di, x
  Dim r As Range
  Dim Dic As Object
  Dim i As Long, j As Long
  Dim n As Long
  Const c As Long = -3
  Set r = Range("d1")
  With r
    n = .End(xlDown).Row
    a = .Offset(, c).Resize(.Offset(, c).End(xlDown).Row, 2).Value
    d = .Resize(n).Value
  End With
  ReDim x(1 To n, 1 To 1)
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a)
    If Dic.exists(a(i, 1)) Then
      Dic(a(i, 1)) = Dic(a(i, 1)) + a(i, 2)
    Else
      Dic(a(i, 1)) = a(i, 2)
    End If
  Next i
  For Each di In d
    j = j + 1
    If Dic.exists(di) Then x(j, 1) = Dic.Item(di)
  Next di
  r.Offset(, 1).Resize(n).Value = x
  Set Dic = Nothing
  Set r = Nothing
End Sub

また、スレッドは違いますが、検索対象列に重複の値がある場合、
【36764】のコードは重複する最下行の値を持ってきますから
重複する最上行の値を持ってくる場合、(【36749】と同じ仕様)
>Dic(a(i, 1)) = a(i, 2)
この箇所を
If Not Dic.exists(a(i, 1)) Then Dic(a(i, 1)) = a(i, 2)
と変更してください。
2 hits

【36798】累積計算を高速で行うには? カド 06/4/14(金) 8:53 質問
【36801】Re:累積計算を高速で行うには? ごんぼほり 06/4/14(金) 10:05 回答
【36802】Re:累積計算を高速で行うには? ごんぼほり 06/4/14(金) 10:16 発言
【36813】Re:累積計算を高速で行うには? Ned 06/4/14(金) 15:23 発言
【36821】Re:累積計算を高速で行うには? カド 06/4/14(金) 17:29 お礼
【36824】Re:累積計算を高速で行うには? Ned 06/4/14(金) 18:09 発言
【36841】Re:累積計算を高速で行うには? Ned 06/4/15(土) 1:16 発言
【36842】Re:累積計算を高速で行うには? カド 06/4/15(土) 8:17 お礼
【36846】Re:累積計算を高速で行うには? Ned 06/4/15(土) 12:50 発言

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