在Excel中,我们有3列,其值分别为对象的长度、宽度和高度。每一行代表一个对象,现在我们需要找到X个最适合在一起的对象。
例如:
现在假设我们需要两组最接近的值,输出应该给出Nbr。1和2,因为abs(11-10) + abs(9-8) + abs(4-5)是最小的值。在这里,我们需要找到2个最接近的值,但有时我们需要找到25组最接近的值。
此外,有些人可能会发现高度并不重要或真正重要,因此您可能希望通过添加因子F(1,2,3)来降低或提高其重要性,与公式的一部分相乘:
[F1 * abs(11-10) + F2 * abs(9-8) + F3 * abs(4-5)]
我尝试找出第一个(第二个、第三个等等)最小的值差异,它只适用于一个变量,而不是同时适用于多个变量:
=INDEX(A$2:A$5002,MATCH(SMALL(ABS(B$2:B$5002-B2),2),ABS(B$2:B$5002-B2),0))
我不知道一个Excel公式来解决这个问题,因为我想找到X最近的值组合。
我希望得到的结果是显示最适合在一起的X对象的行数。
发布于 2019-10-18 00:38:03
我创建了一个VBA Excel代码,它可以很好地找出最适合的值组合。它显示最接近的值和所有差异的总和,以确定效果最好的组合。不过,我确实删除了描述中图片的第一行。如果任何人可以改进,请这样做。
Sub test()
Dim last_row As Long
last_row = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
Dim L As Integer
Dim W As Integer
Dim H As Integer
Dim AantalGelijken As Integer
Dim FL As Integer
Dim FW As Integer
Dim FH As Integer
FL = 1
FW = 1
FH = 0.8
AantalGelijken = InputBox("How many comparable sets do you need", "Number")
L = 2
W = 3
H = 4
For i = 1 To last_row
For j = 1 To last_row
If i <> j Then
Cells(j, 5).Value = FL * Abs(Cells(i, L) - Cells(j, L)) + FW * Abs(Cells(i, W) - Cells(j, W)) + FH * Abs(Cells(i, H) - Cells(j, H))
End If
Next j
For k = 1 To AantalGelijken
Cells(i, 5 + k) = WorksheetFunction.Index(Range("A1:A9999"), WorksheetFunction.Match(WorksheetFunction.Small(Range("E1:E9999"), k), Range("E1:E9999"), 0))
Cells(i, AantalGelijken + 6) = Cells(i, AantalGelijken + 6) + WorksheetFunction.Small(Range("E1:E9999"), k)
Next k
Range("E1:E9999").Clear
Next i
End Sub
`
https://stackoverflow.com/questions/58389760
复制相似问题