數字進位或級距產生相關問題

匿名
2024-04-21T10:07:08+00:00

你好:

    想請問如何根據數字自動辨別百位數時進位成我想要的數字,例如:

     原始數字(數字會應為計算金額而變化)-> 希望變成的數字

       1100-1299  -> 顯示1000

       1300-1799  -> 顯示1500 

       1800-1999  -> 顯示 2000
Microsoft 365 與 Office | Excel | 家用版 | Windows

鎖定的問題。 此問題已從 Microsoft 支援服務社群移轉。 您可以對其是否有幫助進行投票,但無法對問題新增註解或回覆,或進行追蹤。

0 則留言 沒有留言
由問題作者接受的回答
匿名
2024-04-26T12:06:18+00:00

立捷 陳您好,在收到您的回復之後,我們進行了一些研究。

我已經向您的私信分享了這個文檔,您可以進行參考。

首先,我們嘗試通過現有的公式幫助您解決這個問題:

=IF(OR(MOD(D2,1000)>=800,MOD(D2,1000)<200),CEILING(D2,1000),MROUND(D2,500))

稍後您也可以查看文檔中的F列。

這個公式是通過計算百位的數值,並根據它是0或1,2至7以及8和9來進位。

但這個公式處理115282這個數值的時候遇到了問題,它無法轉換為您想要呈現的115000,而是會進位成116000。因此,我們的技術人員在這個思路的基礎上,通過VBA代碼的方式實現了這個功能。

使用VBA(Visual Basic for Applications)編寫一個宏能夠讓您自動地應用這樣的進位邏輯到整個列或範圍的單元格。下面是一個宏示例,您可以按照這個邏輯自行調整和運用:

Function CustomRounding(value As Double) As Double

    Dim hundreds As Integer

    Dim result As Double

    hundreds = (value Mod 1000) \ 100 '取得百位数字

    If hundreds <= 1 Then

        ' 如果百位数字是0或1,保持不变

        result = Int(value / 1000) * 1000

    ElseIf hundreds >= 8 Then

        ' 如果百位数字是8或9,進位到下一个千的倍数

        result = (Int(value / 1000) + 1) * 1000

    Else

        ' 如果百位数字在2到7之间,進位到当前千的倍数+500

        result = (Int(value / 1000) * 1000) + 500

    End If

    CustomRounding = result

End Function

這是一個自定義的函數CustomRounding,您可以在Excel的VBA編輯器中插入這段代碼:

  1. 按下Alt + F11以開啟VBA編輯器。
  2. 在“插入”菜單中選擇“模塊”來創建一個新的模塊。
  3. 將上述代碼粘貼到這個模塊窗口中。
  4. 按下Ctrl + S來保存您的工作,然後關閉VBA編輯器。
  5. 在Excel中,您現在可以像使用其他函數一樣使用CustomRounding函數。例如,在C2單元格輸入**=CustomRounding(B2)**來得到B2單元格的進位值。

在我們爲您提供的示例文檔中,您可以在G列查看宏的效果。要查看當前的代碼,您可以在底部工作表名稱的位置右擊(也就是這個文檔裏面的Sheet1),選擇 檢視程式碼 ,在窗口左側找到 模組 ,並點擊它旁邊的加號,就可以看到這段代碼了。

記得在使用宏之前要保存您的工作,並確保您的Excel設置允許運行宏。如果您對這個過程有任何疑問,或者需要進一步的幫助來實現這個功能,請隨時聯繫我。

祝好

Eliac | 微軟社區支持專員

此回答有幫助嗎?

有 1 人認為此回答有所幫助。
0 則留言 沒有留言

4 個其他答案

排序依據: 最實用
  1. 匿名
    2024-04-24T16:12:51+00:00

    立捷 陳您好,很高興我的方法爲您提供了幫助。

    您指的是您的數據來源是動態的,是嗎?爲了更好地爲您提供解決方案,可以請您將您的問題描述得更加詳細一些嗎?

    您也試試可以在我之前提出的方案上面進行修改,比如,在IFS()裏面添加更多的AND語句,設定一個範圍,並爲它添加您想要轉換到的數值。

    影像

    在您舉的例子裏面,數值範圍的跨度比較大,如果這種方式無法很好地滿足您的需求,那麽請簡單描述一下您的想法,比如,您想將哪些範圍之内的數值轉換成什麽樣的數字?

    我們會根據您的實際問題爲你提供進一步的幫助。

    期待您的回復。

    祝好

    Eliac | 微軟社區支持專員

    品項 數量 金額 總金額 希望呈現
    A 3 2300 6900 7000
    B 7 5380 37660 37500
    C 9 12798 115182 115000
    D 18 10500 189000 189000
    E 11 13600 149600 149500
    總金額=數量*金額

    你好,這是我遇到的問題,因為每格的商品跟數量不同,到至數字變化較大,但仍希望可以呈現以數字中的百位數去做進位,例如
    11001-11229-->11000

    11300-11799-->11500

    11800-11999-->12000

    此回答有幫助嗎?

    0 則留言 沒有留言
  2. 匿名
    2024-04-22T06:28:31+00:00

    立捷 陳您好,很高興我的方法爲您提供了幫助。

    您指的是您的數據來源是動態的,是嗎?爲了更好地爲您提供解決方案,可以請您將您的問題描述得更加詳細一些嗎?

    您也試試可以在我之前提出的方案上面進行修改,比如,在IFS()裏面添加更多的AND語句,設定一個範圍,並爲它添加您想要轉換到的數值。

    在您舉的例子裏面,數值範圍的跨度比較大,如果這種方式無法很好地滿足您的需求,那麽請簡單描述一下您的想法,比如,您想將哪些範圍之内的數值轉換成什麽樣的數字?

    我們會根據您的實際問題爲你提供進一步的幫助。

    期待您的回復。

    祝好

    Eliac | 微軟社區支持專員

    此回答有幫助嗎?

    0 則留言 沒有留言
  3. 匿名
    2024-04-21T16:24:11+00:00

    你好:

          很感謝你的回覆,讓我學到了這個用法,想請問如果當我的數字會隨意變動,比如可能會是4837也可能是22987或5798,我想要讓他依照這個規律顯示,是有辦法可以做到的嗎?
    

    此回答有幫助嗎?

    0 則留言 沒有留言
  4. 匿名
    2024-04-21T13:24:25+00:00

    立捷 陳您好,歡迎訪問微軟社區。

    我瞭解到您想要根據自己輸入的數值來定義進位的效果。經過我們的測試,您可以通過以下語句來實現這一功能:

    =IFERROR(IFS(AND(A1>=1100,A1<=1299),"1000",AND(A1>=1300,A1<=1799),"1500",AND(A1>=1800,A1<=1999),"2000"),"out of range")

    該語句可以簡單拆分成兩個部分。

    • IFERROR(IFS(),"out of range")

    最外面的IFERROR用於在您的數值超出您設定的範圍的時候,生成一個提示信息。最後面的”out of range“就是錯誤提示,您可以把引號裏面的内容換成您想要的。也就是説,如果格子裏面的數值不符合前面的設定,就會顯示爲”out of range“。

    • IFS(AND(A6>=1100,A6<=1299),"1000",AND(A6>=1300,A6<=1799),"1500",AND(A6>=1800,A6<=1999),"2000")

    語句的核心部分,就是IFS括號裏面的内容。裏面的每一個AND都對應著一組換算規則。

    比如,AND(A1>=1100,A1<=1299),"1000",它的意思是,如果A1格子裏面的數值大於或者等於1100,而且小於或者等於1299,那麽就顯示為1000。

    因此,如果您想要在後面添加新的換算規則,只需要在IFS()裏面的末尾加上一條同樣的AND語句,并且把裏面的數值改成新的規則就可以了,像這樣:

    =IFERROR(IFS(AND(A11>=1100,A11<=1299),"1000",AND(A11>=1300,A11<=1799),"1500",AND(A11>=1800,A11<=1999),"2000",AND(A11>=2000,A11<=2500),"2200"),"out of range")

    請注意,上述語句中使用到的所有符號都是英文模式下的。

    用語言描述可能不會很好理解,我會通過私信向您發送一個測試文檔,您可以在裏面嘗試一下,看這是不是您想要的效果。

    您可以這樣來查看私信:

    希望這些信息對您有幫助。

    祝好,

    Eliac | 微軟社區支持專員

    此回答有幫助嗎?

    0 則留言 沒有留言