返回列表 上一主題 發帖

『已解決』陣列比較,找出差異的儲存格

回復 5# ko310kmo

大大
Calculate已經會一觸發,就寫入相對的工作表,不會讓其他工作表重複寫入了
但比較尾部的工作表會出現第一個歷史成交價、單量為0的狀況,會造成後面四個價的判斷問題
而且分鐘資料會重複跳出
每一分鐘只會有一筆,但卻會同一分鐘出現二、三筆的問題

我資料顯示的方式是希望像附檔 ok.5.10.rar (74.4 KB) ,也就是只前發問的這樣
每秒紀錄所以接受的值,再每分鐘結算它這一分內的開、高、低、收、成交量
但這檔會出現的問題是,它的Calculate無法得知是哪個儲存格跳動
會所以工作表都寫入一次,會造成資料錯誤的問題

謝謝大大的幫忙!!!!!

1版.over.rar (27.56 KB)

50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 2# Hsieh

大大
我原本的檔有稍做修改,但應該不致於造成太大的問題
但大大的Calculate會在『    If arr(I, 2) & arr(I, 3) <> rng(I, 2) & rng(I, 3) Then』發生黃底『型態不符合』的錯誤?
研究了一下還是發不出原因,希望大大賜教 5.102.2.rar (22.2 KB)
因為一般模組中已有寫了一個陣列ar,所以有將大大的ar 改為arr
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 11# ko310kmo
Worksheet_Calculate 事件 是當工作表的任一個公式所傳回的數值有改變即執行的程式
所以你附檔 ok.5.10 的程式碼會使用迴圈將Range("B2:B" & M)範圍內的工作表一一的寫入資料
請在參考 10樓 的程式碼試試看 但用Worksheet_Calculate來記錄還是會有誤差的
如成交價不變   00:10:01時的成交量是 10  下一次的成交在 00:10:11 時的成交量 還是 10
如此Worksheet_Calculate 是不會執行的 誤差就產生  , 所以建議有 成交價及成交量 的時間欄 來參考.

TOP

本帖最後由 ko310kmo 於 2011-5-14 17:12 編輯

回復 13# GBKEE

大大我了解了
我本來是用即時成交價、單量
我想再用一個成交量來看變動



我自行依你提供的幾個程式,修改後
Calculate已經可以正確寫入了

現在會出現的問題是
分鐘資料是2分鐘更新一次

我是先執行 test1,等它跑完再執行test3
這樣是可以每分更新的

如果我是先執行test1再執行test2,沒有設定test3
這樣分鐘資料只會更新第一遍。

請問這到底是該如何修改才好呢?
懇請大大賜教!!!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 14# ko310kmo
如果我是先執行test1再執行test2,沒有設定test3,這樣分鐘資料只會更新第一遍。
不要用test3了
test2 最後加上
If Time <= #1:30:00 PM# Then Application.OnTime Now + TimeValue("00:01:00"), "test2"
End Sub

TOP

本帖最後由 ko310kmo 於 2011-5-13 10:10 編輯

回復 15# GBKEE

請問大大
        If Minute(Time) = Minute(t) Then
            Do While Minute(Time) = Minute(t)

這二行的意思是
一直做到這一分鐘過完對吧!
而我們後面又寫Application.OnTime Now + TimeValue("00:01:00"), "test2"
所以會不會是因為這樣,才會造成二分鐘記錄一次呢?

我在想是不是,不用加Application.OnTime
而把大大原本的程式最後寫的
Loop Until Time <= #1:30:00 PM#
改成
Loop Until Time >= #1:30:00 PM#


loop until time<=1:30
做到時間小於1點30就跳出,測試的時間一定都是小於1:30的,所以才跳跑一遍而已,就跳出


大大,今日測試結果,只要把<改成>就沒有問題了,謝謝大大的幫忙與耐心講解!!!:)
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 10# GBKEE
大大對於程式碼的寫法,還有幾點想請教


If IsEmpty(B) Then                      '比對陣列為資料
        For Each E In Range("b2", Range("b2").End(xlDown))
            With Sheets(E.Text).Cells(Rows.Count, "j").End(xlUp)
                .Offset(1) = E(1, 2)        '記錄 成交價
                .Offset(1, 1) = E(1, 3)     '記錄 單量
                .Offset(1, 2) = Time        '記錄 成交時間
            End With
        Next
E(1, 2)這寫法是什麼意思?
    Else
        For i = 1 To UBound(A, 2)
            If A(1, i) <> B(1, i) Or A(2, i) <> B(2, i) Or A(3, i) <> B(3, i) Then ' 履約價的(成交價或成單量)有變動
                With Sheets([B2].Cells(i, 1).Text).Cells(Rows.Count, "j").End(xlUp)
                    .Offset(1) = [B2].Cells(i, 2)       '記錄下 即時成交價
                    .Offset(1, 1) = [B2].Cells(i, 3)    '記錄下 單量
                    .Offset(1, 2) = Time
                End With
            End If
        Next
    End If
[B2].Cells(i, 3)
雖然看了大大貼的網址的教學
所以是  range("B2").cells(i,3) 的意思嗎?
看了好久,還是不太了解
請大大解釋一下,謝謝!!!  
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 17# ko310kmo
[B2] = [B2](1, 1) = [B2].Cells(1, 1) = Rrange("B2").cells(1,1) => [B2].Offset( 0 , 0 ) => Rrange("B2")
[B2](2, 3) = [B2].Cells(2, 3) =  Rrange("B2").cells(2,3) => Rrange("B2").Offset( 1, 2 )=>Rrange("D3")

TOP

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題