2011-08-15 38 views
1

我需要將計算出的數字四捨五入爲表中最接近的值。表中的值不是順序的,並且值之間的間隔不相同。 (其實我一直沒能找到值之間的模式。)在Excel中使用非標準間隔進行復雜舍入

下面是表值:

1 
10 
20 
40 
70 
120 
180 
260 
360 
610 
940 
1350 
1780 
2220 
2720 
3490 
4770 
6500 
8070 
10000 

因此,舉例來說,如果我有一個53.36計算數字,公式應返回表格值40。如果該值高於55,那麼它將返回70

+0

這個問題與編程無關。它應該發佈在superuser.com上,而不是在這裏。 –

回答

2

使用vlookup的最終參數爲1或true(不完全匹配)。

將你的值放在一個範圍內,並在該範圍內查找。它會找到不大於搜索值的最近值。

編輯: 然後,您列出的數字是穆迪在評級債券中使用的WARF(加權平均評級因子)數字。請參閱here

編輯#2:要獲得您要查找的「四捨五入」,只需在搜索範圍中添加下一個數字的第二列。例如:在20行的列上,第二列顯示40;在第40行中,第二列將顯示70.然後,在您的公式中,hava在同一搜索範圍內進行第二次查找,但返回第二列。一旦你得到了兩個數字(例如40和70的值爲55),你可以在你的公式中做數學運算來確定你將顯示哪個數字。

+0

感謝喬納森的快速反應!並找出數字之間的關係。你的建議有些作用,但只有當這些值低於間隔時間的一半。例如,使用帶有參數1的vlookup的67的計算數字將返回40而不是70的值。它不是/不是四捨五入到實際最接近的值。 – ccase

+0

看到我的第二次編輯。 –

+0

完美!奇蹟般有效。感謝您的寶貴意見! – ccase

0

如果使用VBA循環,應該是一個快速而簡單的方法。檢查您的號碼與列表中接下來的兩個號碼之間的差異。當與第一個數字的差異較小時,您知道這是您想要返回的那個。

+0

Excel沒有if-then循環。你必須去那個VBA,這是對這個應用程序過度。 –

+0

矯枉過正?真?有幾行代碼的簡單代碼比創建另一列數據來湊合更糟?你在跟我開玩笑。 – aevanko

+1

請記住,如果答案沒有幫助,那麼倒票是因爲你不認爲VBA不是最好的方法並不意味着答案就不如你自己的答案。 – aevanko

0

您可能想要考慮一個數組函數(又名CSE函數)。如果你的表是在範圍A1:A20,和您的查找值是C1,然後使用此功能:

=IFERROR(VLOOKUP(C1+MIN(ABS(A$1:A$20-C1)),A$1:A$20,1,FALSE),VLOOKUP(C1-MIN(ABS(A$1:A$20-C1)),A$1:A$20,1,FALSE)) 

,然後按住Ctrl-Shift輸入(不只是輸入)。 基本上,這會找到C1和表格中任何值之間的最小絕對差值。然後嘗試添加它並執行VLOOKUP以查看它是否在表中,如果失敗,則將其減去並執行VLOOKUP。有點複雜,但可能會給你想法。