iT邦幫忙

1

函數寫成VBA

  • 分享至 

  • xImage

U2儲存格函數如下,I2為動態數字
=IF(I2<=-4000,"1",
IF(I2<=-2000,"2",
IF(I2<=-1000,"3",
IF(I2>=4000,"4",
IF(I2>=2000,"5",
IF(I2>=1000,"6",
IF(AND(I2>=500,I2<=-500),"","000")))))))

我想轉換成VBA方式來完成,可以怎麼寫呢!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
paicheng0111
iT邦大師 5 級 ‧ 2019-03-24 09:51:49

可是試試用select case statement

revised on 2019-03-24 11:36

function udf_myCompare(myNum as double) as variant
    select case myNum
    case is <= -4000
        udf_myCompare = 1
    case is <= -2000
        udf_myCompare = 2
    case is <= -1000
        udf_myCompare = 3
    case is >= 4000
        udf_myCompare = 4
    case is >= 2000
        udf_myCompare = 5
    case is >= 1000
        udf_myCompare = 6
    case else
        udf_myCompare = "'000"
    end select
end function

U2寫下=udf_myCompare(i2)即可。

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-03-24 10:10:58 檢舉

說真的, 這跟if不是差不多....
打的字好像也沒有比較少...
(想一想, 好像少了變數名稱)

在comparison operator(>, < , >=,...)中用 is keyword,可以讓Range("I2")少打很多次。

https://docs.microsoft.com/zh-tw/dotnet/visual-basic/language-reference/statements/select-case-statement

其實這種情況我會在excel試著用Vlookup函數(最後一個參數為True)。

小魚 iT邦大師 1 級 ‧ 2019-03-24 12:07:36 檢舉

少打很多次我覺得還好,
不過我通常會先用變數來接Range("I2"),
這樣子太長了,
另外其實我都是複製貼上的,
所以不會打很多次.
/images/emoticon/emoticon39.gif

goodnight iT邦研究生 2 級 ‧ 2019-03-29 22:26:01 檢舉

寫程式時, 不一定是為了少打字, 而是為了靈活的擴充性以及閱讀性
像你這樣, 我寧可寫程運算式, 未來數值改變或增加, 都不用再改寫程式
以你的巢狀 if , 不如看 case 來得清爽

0
海綿寶寶
iT邦大神 1 級 ‧ 2019-03-24 10:43:26
Sub Macro1()
    If Range("I2") <= -4000 Then
        Range("U2") = "1"
    ElseIf Range("I2") <= -2000 Then
        Range("U2") = "2"
    ElseIf Range("I2") <= -1000 Then
        Range("U2") = "3"
    ElseIf Range("I2") >= 4000 Then
        Range("U2") = "4"
    ElseIf Range("I2") >= 2000 Then
        Range("U2") = "5"
    ElseIf Range("I2") >= 1000 Then
        Range("U2") = "6"
    Else
        Range("U2") = "'000"
    End If
End Sub
erwinho iT邦新手 5 級 ‧ 2019-03-25 14:36:00 檢舉

Excel2016版以後的ifs,用法比if簡潔多了,跟寫select很像。

我要發表回答

立即登入回答