2D векторный поиск [x; y] - PullRequest
       4

2D векторный поиск [x; y]

0 голосов
/ 28 апреля 2020

У меня есть матрица с двумя координатами [i;j]

Я пытаюсь автоматизировать поиск:

enter image description here

Например, это будет иметь координаты [1;2]

Вот таблица всех координат:

enter image description here

Так что здесь, очевидно, [1;2] будет равно 143,33


Для упрощения вопроса :


I ' Я постараюсь go шаг за шагом описать то, что я пытаюсь сделать, чтобы вопрос был немного менее запутанным.

Думайте о том, что я пытаюсь сделать, как функцию, lookup(i, j) => value

Теперь обратитесь ко второму рисунку (таблице)

  1. Я нахожу все строки, содержащие индекс [i] (внутри столбца C) , а затем
  2. только для этих строк найти строку, содержащую индекс [j] (внутри столбца D ∩ для строк предыдущего шага)
  3. Возврат [i;j] значение

Так что, если вы вызвали lookup(2, 4)

  1. Найти все ро ws match i = 2

    • Row 5: i = 2; j = 3
    • Строка 6: i = 2; j = 4
    • Строка 7: i = 2; j = 5
  2. Поиск столбца j для j=4 из найденных строк

    • Найденная строка 6: i = 2; j = 4.
  3. Возвращаемое значение (смещение для столбца yij = 143,33)

Теперь, с точки зрения алгоритма, это не проблема, но Я понятия не имею, как go делать это с формулами Excel.


PS: я знаю, что это довольно простая проблема , но я бы предпочел формулы
PSS Я удалил то, что пытался сделать вопрос более читабельным.

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Вы можете использовать SUMPRODUCT, который возвращает 0 для не найденных значений:

=SUMPRODUCT(($C$4:$C$18=$I4)*($D$4:$D$18=J$3)*$E$4:$E$18)

или AGGREGATE, который возвращает ошибку, которая может быть скрыта функцией IFERROR:

=IFERROR(AGGREGATE(15,6,(1/(($C$4:$C$18=$I12)*($D$4:$D$18=J$3)))*$E$4:$E$18,1),"")

enter image description here

1 голос
/ 28 апреля 2020

Вы можете использовать SUMIFS здесь, при условии, что у вас не будет точных повторяющихся комбинаций [i, j]. Если у вас была дублирующая комбинация, суммы будут суммированы и помещены в соответствующую ячейку


В ячейку B2 поместите это уравнение: =SUMIFS($Q$2:$Q$16,$P$2:$P$16,B$1,$O$2:$O$16,$A2) и перетащите по мере необходимости

enter image description here


ЕСЛИ вы хотите преобразовать * *1020* в пробелы Вы можете вложить указанную выше формулу в средство форматирования текста следующим образом:

=TEXT([formula], "0;-0;;@")

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