Формула Excel, чтобы найти X ближайшей комбинации значений к определенной комбинации значений - PullRequest
0 голосов
/ 15 октября 2019

В Excel у нас есть 3 столбца со значениями в них Длина, Ширина и Высота объектов. Каждая строка обозначает 1 объект, теперь нам нужно найти число X объектов, которые наиболее подходят друг другу.

Например:

Example table Excel picture

Теперь предположим, что нам нужны 2 ближайших набора значений, вывод должен дать 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, которые лучше всего сочетаются друг с другом.

1 Ответ

0 голосов
/ 17 октября 2019

Я создал код 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

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...