Excel 将两个输入与数据集进行比较以返回单个输出

Excel 将两个输入与数据集进行比较以返回单个输出,excel,vba,compare,Excel,Vba,Compare,我在编程过程中需要一些帮助,而不是程序本身(如果代码可用,那么这会更好!)。我有一个包含3列(ID、CS、part)的电子表格,我正在尝试设置一个用户窗体,如果将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,因为这是“最接近”的组合 我曾尝试自己设置此设置

我在编程过程中需要一些帮助,而不是程序本身(如果代码可用,那么这会更好!)。我有一个包含3列(ID、CS、part)的电子表格,我正在尝试设置一个用户窗体,如果将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,就像检查上面的ID检查CS一样,下面是精确的if present,然后将所有9个值输出到一个列表框中。然而,这变得非常混乱,因此,我正在寻找一个更优雅的解决方案来解决这个问题。

Sub test()
 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`
'最小偏差更改为4447,因为其最大值为4446。(61.75*8^2+494) 最小偏差=4447 lastRow=范围(“A”和Rows.Count).End(xlUp).Row 对于rowCheck=1到lastRow '平方以消除符号 偏差=61.75*(输入-单元格(行检查,“A”)^2+(输入-单元格(行检查,“B”))^2 如果偏差<最小偏差,则 最近的=行检查 如果结束 下一行检查 closestPart=单元格(最近的“C”) 端接头`
非常感谢您,这真是太棒了,比我之前所做的要好得多。是否有任何方法设置ID偏差,使其得分与CS不同?我的意思是,在小偏差方面,CS稍微更为关键?这是因为ID范围在6-500和CS之间的任何地方都在1-9之间。您可以尝试按其范围加权偏差。因此,ID的范围为1-9;相差8。CS的范围为6-500,相差494,使得范围的比率为8:494。494/8为61.75,因此我们可以不说ID中的偏差1比CS中的偏差波动性大61.75倍;检查我上面更改的内容。这也取决于你的目的是什么;如果输入的ID和CS表示平均值,那么您可以对标准偏差统计进行类似的处理。