iT邦幫忙

0

EXCEL VBA 程式 ,讀取原資料列,經過兩種方式的標準化計算,生成新數列

再度請各位高手幫忙,感謝:

一支VBA程式,讀取原資料列,按鈕選擇"正向標準化"或"負向標準化"兩種方式的標準化計算,生成新數列A或B

新數列A =(原數列− 原數列最小值)/(原數列最大值− 原數列最小值)

新數列B =(原數列最大值− 原數列)/(原數列最大值− 原數列最小值)

https://ithelp.ithome.com.tw/upload/images/20200506/201267013yD1RPuOPf.png

看更多先前的討論...收起先前的討論...
這好像不需要用到vba就可以做到了吧?
petercbc iT邦新手 5 級 ‧ 2020-05-06 11:16:25 檢舉
問題是,手邊有幾十個時間長度不同的數列.......
petercbc iT邦新手 5 級 ‧ 2020-05-06 12:27:56 檢舉
已解決,此篇作廢吧
罐頭 iT邦新手 2 級 ‧ 2020-05-06 15:35:43 檢舉
解決了大概說一下怎解決的阿,問題都問出來了,說不定有人之後也會碰到跟你一樣的問題?

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-06 15:58:39
最佳解答

https://ithelp.ithome.com.tw/upload/images/20200506/20001787XvV4iWEIRT.png

'在起點位置的右邊第一欄放 A 數列
'在起點位置的右邊第二欄放 B 數列
Sub CalcStdDev()
    Dim nMax, nMin, nDiff, nI
    
    Range("A1").Select  '起點位置
       
    '設定初始值
    nMax = Application.WorksheetFunction.Max(ActiveCell.EntireColumn)
    nMin = Application.WorksheetFunction.Min(ActiveCell.EntireColumn)
    nDiff = nMax - nMin
    
    nI = 0
    While Not IsEmpty(ActiveCell.Offset(nI, 0))
        
        ActiveCell.Offset(nI, 1).Value = (ActiveCell.Offset(nI, 0).Value - nMin) / nDiff    'A 數列
        ActiveCell.Offset(nI, 2).Value = (nMax - ActiveCell.Offset(nI, 0).Value) / nDiff    'B 數列
        
        nI = nI + 1
    Wend
End Sub
0
peter001199
iT邦見習生 ‧ 2020-05-06 20:28:36

謝謝您的熱心幫忙!

我要發表回答

立即登入回答