Board logo

標題: 可以在function中另兩個陣列中的值相減 [打印本頁]

作者: ldneye    時間: 2013-11-28 09:59     標題: 可以在function中另兩個陣列中的值相減

請問一下各位前輩

我想寫一個function , input中有兩個是arrayA 和 arrayB  , 其中arrayA 是會改變的 ,arrayB是固定的

在function裡我想要讓arrayA - arrayB 成為一個變數 arrayC , 進而對 arrayC 求平均  但不知到哪邊出了錯?

附上我的程式碼請大家幫我看一下  謝謝囉

我寫的function是 module1 裡的 TrkErr  

[attach]16887[/attach]
作者: stillfish00    時間: 2013-11-29 15:22

arrayA - arrayB 成為一個變數 arrayC , 進而對 arrayC 求平均
ldneye 發表於 2013-11-28 09:59

看不懂TrkErr功能

你說 arrayA - arrayB 成為 arrayC
那求arrayC 平均 = arrayA平均 - arrayB平均 就好了啊
作者: ML089    時間: 2013-11-29 16:11

FN = Arr.Count

     For x = 1 To FN
        ReDim Crr(x)
        Crr(x) = Arr(x) - Brr(x)
     Next
作者: ML089    時間: 2013-11-29 17:51

3#不對 REDIM 不能在迴圈裡

    FN = Arr.Count

     ReDim Crr(x)
    For x = 1 To FN
        Crr(x) = Arr(x) - Brr(x)
     Next
作者: ML089    時間: 2013-11-29 17:55

本帖最後由 ML089 於 2013-11-29 17:58 編輯

Function TrkErr(Arr As Range, Brr As Range, FN As Integer) As Double

    Dim avg As Single, SumSq As Single    ', Crr As Range
    Dim i As Range
    'FN 是loop的次數 也是整個資料的rows -1 ;
    '因為我沒有更好的方法可以直接在function裡求 所以改為input
    '如果有更好的方法也請告知  謝謝唷

    FN = Arr.Count
    ReDim Crr(FN)
    For x = 1 To Arr.Count
        Crr(x) = Arr(x) - Brr(x)
    Next


    ' Brr是固定的  Arr是不同的公司

    avg = WorksheetFunction.Average(Crr)


    For Each i In Arr
        SumSq = SumSq + (i - avg) ^ 2
    Next i

    FN = Arr.Count
    TrkErr = Sqr(SumSq / (FN - 1))

End Function
作者: ML089    時間: 2013-11-29 18:05

這是另一種練習寫法,請參考

Function TrkErr(Arr As Range, Brr As Range, FN As Integer) As Double
    Dim avg As Single, SumSq As Single
    FN = Arr.Count
    Crr = Application.Evaluate(Arr.Address & "-" & Brr.Address)
    avg = WorksheetFunction.Average(Crr)

    For Each i In Arr
        SumSq = SumSq + (i - avg) ^ 2
    Next i
    TrkErr = Sqr(SumSq / (FN - 1))
End Function
作者: ldneye    時間: 2013-12-2 04:41

回復 2# stillfish00


    謝謝,這個方法我一時沒有想到  以後會記住的啦  感謝唷
作者: ldneye    時間: 2013-12-2 04:51

回復 6# ML089


    謝謝ML大  我試了你的兩個方法  都沒辦法跑  根據我檢查的結果  程式總是在 Set AP = Range(Cells(k, 3), Cells(k, 14))  這行跑不過去  不知道這樣的寫法是有什麼問題嗎??
作者: ML089    時間: 2013-12-2 08:56

回復 8# ldneye


    語法沒有錯誤
應該是 k 沒有值或為0所致,請設中斷點及按F8逐條查看 k 的變化
作者: ldneye    時間: 2013-12-2 19:50

回復 9# ML089


  謝謝你的回覆  我檢查了一下  是我有個cells 從零開始了  @@   不好意思阿




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)