返回列表 上一主題 發帖

vba 累加問題

vba 累加問題

請教各位高手, 這個該怎麼寫, 想不出來:( 活頁簿2.rar (649.04 KB)
如附件, 想把同一秒的數量累加, 及最後一個價格和與第一個價格相減
時間               價格                                          數量
8450100        b14-b2=-2                          sum(c2:c14)=38

時間               價格       量
8450100        7232        4
8450100        7229        2
8450100        7229        2
8450100        7228        4
8450100        7228        2
8450100        7228        2
8450100        7227        2
8450100        7227        2
8450100        7226        2
8450100        7226        2
8450100        7228        6
8450100        7231        4
8450100        7230        4
初學者color

本帖最後由 Hsieh 於 2011-10-24 23:10 編輯
  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary")  '紀錄B、C欄的值
  3. Set d1 = CreateObject("Scripting.Dictionary")  '記錄每秒第一個出現的的價格

  4. For Each a In Range([A2], [A2].End(xlDown))  '在A欄位做迴圈
  5.    If d.exists(a.Value) = False Then  '如果A的值沒被記錄在d字典內
  6.       d(a.Value) = Array(a.Offset(, 1).Value, a.Offset(, 2).Value)  '將B、C欄的值記錄到d字典內
  7.       d1(a.Value) = a.Offset(, 1).Value  '記住每秒第一個出現的的價格
  8.       Else
  9.       ar = d(a.Value)  '取出d字典對應的內容
  10.       ar(0) = a.Offset(, 1).Value - d1(a.Value)  '把B欄的值減掉對應A欄的值(第一次出現的值)  
  11.       ar(1) = ar(1) + a.Offset(, 2).Value  'C欄位加上前加總的值
  12.       d(a.Value) = ar  '把陣列回存到字典中
  13.     End If
  14. Next
  15. [F2].Resize(d.Count, 1) = Application.Transpose(d.keys)  '把每秒的字串(字典索引值)寫入
  16. [G2].Resize(d.Count, 2) = Application.Transpose(Application.Transpose(d.items))  '把字典內容寫入
  17. End Sub
複製代碼
回復 1# color790
學海無涯_不恥下問

TOP

本帖最後由 color790 於 2011-10-24 23:03 編輯

感謝超級版主的協助, 感恩再感恩.....  
中間價格的計算好像有點錯誤, 如時間在8450300, 8451500, 8452700....
但小弟只會比較基本的語法, 這個比較不懂, 可否麻煩版主幫我註解一下, 讓我多學一點, 謝謝~
初學者color

TOP

回復 3# color790


    你A欄的資料沒有完全群組到
重新排序過你就會發現
學海無涯_不恥下問

TOP

回復  color790




    你A欄的資料沒有完全群組到
重新排序過你就會發現
Hsieh 發表於 2011-10-24 23:36




版主,我不太懂群組到的意思? 重新排序後, 結果好像是一樣......
初學者color

TOP

回復 5# color790


    原本A26:A44是8450300共19筆資料
排序後變成A30:A50是8450300共21筆資料
學海無涯_不恥下問

TOP

回復  color790


    原本A26:A44是8450300共19筆資料
排序後變成A30:A50是8450300共21筆資料
Hsieh 發表於 2011-10-25 00:08


嗯........我懂了, 原來是資料我有整理, 所以有這個問題
另外再問一下, 例如8451500 這個時間, 由於它只有一筆資料, 所以它只會顯示相對的價格, 這個有解嗎?
初學者color

TOP

回復 7# color790


只有一筆資料, 所以它只會顯示相對的價格, 這個有解嗎?

要解甚麼?
學海無涯_不恥下問

TOP

就是讓它自己減自己或是直接顯示為0, 謝謝版主的回答
初學者color

TOP

回復 9# color790
  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary")  '紀錄B、C欄的值
  3. Set d1 = CreateObject("Scripting.Dictionary")  '記錄每秒第一個出現的的價格

  4. For Each a In Range([A2], [A2].End(xlDown))  '在A欄位做迴圈
  5.    If d.exists(a.Value) = False Then  '如果A的值沒被記錄在d字典內
  6.       d1(a.Value) = a.Offset(, 1).Value  '記住每秒第一個出現的的價格
  7.       d(a.Value) = Array(d1(a.Value) - a.Offset(, 1).Value, a.Offset(, 2).Value) '將B、C欄的值記錄到d字典內
  8.       Else
  9.       ar = d(a.Value)  '取出d字典對應的內容
  10.       ar(0) = a.Offset(, 1).Value - d1(a.Value)  '把B欄的值減掉對應A欄的值(第一次出現的值)
  11.       ar(1) = ar(1) + a.Offset(, 2).Value  'C欄位加上前加總的值
  12.       d(a.Value) = ar  '把陣列回存到字典中
  13.     End If
  14. Next
  15. [F2].Resize(d.Count, 1) = Application.Transpose(d.keys)  '把每秒的字串(字典索引值)寫入
  16. [G2].Resize(d.Count, 2) = Application.Transpose(Application.Transpose(d.items))  '把字典內容寫入
  17. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 靜坐常恩己過、閒談莫論人非。
返回列表 上一主題