2014-09-23 70 views
0

我需要編程過程而不是程序本身的一些幫助(如果代碼可用,那麼這將更好!)。我有一個包含3列(ID,CS,部分)的電子表格,我試圖設置一個用戶表單,如果ID和CS被指定爲輸入,那麼這些表單的最接近的值將返回一個部分具有例如接近ID和CS的值),數據爲:將兩個輸入與數據集比較以返回單個輸出

ID /// CS /// 部分

10 /// 4.2 /// PN1

12 ///5.7///PN038

103.43 /// 5.7 /// PN99

並且用戶輸入ID = 11.27,CS = 4,程序返回PN1,因爲這是「最接近」的組合。

我試圖通過循環遍歷所有CS的內容來設置它,並找到一個恰好高於和低於所需的值,以及它是否存在於數據中,然後檢查這些CS的ID是否與CS通過查看剛剛在上面的ID,剛好在下面和確切的如果存在,然後將所有9個值輸出到列表框中,但是,這變得非常混亂和混亂,因此我正在尋找一個更優雅的解決方案來解決這個問題。

回答

1
Sub test() 

'leastDeviation changed to 4447 as its maximum value is 4446. (61.75*8^2+494) 
leastDeviation = 4447 
lastRow = Range("A" & Rows.Count).End(xlUp).Row 
For rowCheck = 1 To lastRow 
    'squared to eliminate sign 
    deviation = 61.75 * (inputID - Cells(rowCheck, "A"))^2 + (inputCS - Cells(rowCheck, "B"))^2 
    If deviation < leastDeviation Then 
     closest = rowCheck 
    End If 
Next rowCheck 
closestPart = Cells(closest, "C") 
End Sub` 
+0

非常感謝你,這是驚人的,比我放在一起的效果好得多。是否有任何設置它的方式,使得ID中的偏差不會與CS相同?我的意思是,CS在小偏差方面稍微重要一點?這是因爲ID範圍在6-500之間,CS在1-9左右。 – 2014-09-23 18:41:29

+0

你可以嘗試用他們的範圍加權偏差。所以ID範圍從1-9;相差8,而CS的範圍是6-500,相差494,使得比例範圍爲8:494。 494/8是61.75,所以我們可以說脫離ID是1的偏差是CS中的相同的61.75倍;檢查我上面改變了什麼。這也取決於你的目的是什麼;如果輸入的ID和CS是爲了表示手段,那麼你可以用標準偏差統計做類似的事情。 – quantum285 2014-09-23 20:57:01