Сравнение двух массивов - горизонтальный и вертикальный - PullRequest
3 голосов
/ 30 апреля 2019

В чем дело

Я пытаюсь сравнить два массива. Для простоты предположим, что мы хотим знать, как часто значения одного массива существуют в другом массиве.

Мои данные массива ссылок / поиска находятся в A1:A3

Apple
Lemon
Pear

Мой поисковый массив НЕ находится на листе, но записан {"Apple","Pear"}

Задача

Чтобы узнать, как часто наши поисковые значения существуют в lookuparray, мы можем применить формулу, например:

{=SUMPRODUCT(--(range1=range2))}

Однако {=SUMPRODUCT(--({"Apple","Pear"}=A1:A3))} выдает ошибку. Другими словами, массив поиска не работал должным образом.

Что сработало, использовала функцию TRANSPOSE(), чтобы сначала создать горизонтальный массив из моих данных, используя {=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE(A1:A3)))}, что привело к правильному ответу 2!

Кажется, что мой типизированный массив автоматически обрабатывается как горизонтальный массив, и мои данные, очевидно, изначально были вертикальными.

Чтобы проверить свои гипотезы, я попробовал другую формулу:

{=SUMPRODUCT(--({"Apple","Pear"}={"Apple","Lemon","Pear"}))}

Оба типизированных массива, так что с логикой, описанной выше, это будут горизонтальные массивы, прекрасно работающие без использования TRANSPOSE(), однако это возвращает ошибку! #N/A

Снова {=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE({"Apple","Lemon","Pear"})))} дал правильный ответ 2.

Вопрос

Может кто-нибудь, пожалуйста, объясните мне:

  • Причина, по которой горизонталь нельзя сравнивать с вертикальными массивами.
  • Почему типизированный массив будет автоматически обрабатываться как горизонтальный
  • Почему в моем тесте гипотез второй типизированный массив был обработан как вертикальный.

Мне действительно любопытно, и я также был бы рад получить ссылки на соответствующую документацию, поскольку до сих пор я не смог их найти.

На этот вопрос, возможно, будет легко ответить, хотя я не могу разобраться с логикой.

1 Ответ

2 голосов
/ 30 апреля 2019

Может кто-нибудь, пожалуйста, объясните мне:

  • Причина, по которой горизонталь нельзя сравнивать с вертикальными массивами.

Это действительно возможно, и вы также можете сравнить горизонтальные массивы с другими горизонтальными массивами.

Причина, по которой вы получили ошибку, заключается в несоответствии длины массива. Рассмотрим следующие массивы:

enter image description here

Выполнение =SUMPRODUCT(--(B3:D3=F3:G3)) такое же (в английской версии Excel, я не уверен на 100% в разделителях в других версиях) как =SUMPRODUCT(--({"Apple","Lemon","Pear"}={"Apple","Pear"})), и в результате получается =SUMPRODUCT(--(Apple=Apple, Lemon=Pear, Pear=???)), то есть n-й элемент первого массива сравнивается с n-м элементом второго массива, и если нечего сопоставлять - 3-й элемент 1-го массива - это Pear, но для 2-го массива 3-го элемента нет - тогда вы получите N/A.

Когда вы сравниваете два массива, один вертикальный и один горизонтальный, Excel фактически «расширяет» конечный массив. Рассмотрим следующее (1 строка x 3col и 2row x 1col):

enter image description here

Выполнение =SUMPRODUCT(--(B3:D3=F3:F4)) аналогично =SUMPRODUCT(--({"Apple","Lemon","Pear"}={"Apple";"Pear"})) и приводит к =SUMPRODUCT(--(Apple=Apple, Lemon=Apple, Pear=Apple; Apple=Pear, Lemon=Pear, Pear=Pear)). По сути, кажется, что Excel расширил два массива следующим образом (3col x 2row):

enter image description here

Это «расширение» происходит только в том случае, если один массив имеет высоту в 1 строку, а другой - ширину в 1 столбец. Я полагаю, что если вы возьмете массивы с чем-то другим, то Excel вернется к попытке сравнить элемент с «ничем». 'дать N / A (вы можете использовать функцию оценки формул на вкладке Формула, чтобы помочь):

enter image description here

По сути, Excel получает нечто похожее на это, где первый массив умножается на второй массив, давая массив результатов:

enter image description here

Но поскольку последняя строка и последний столбец содержат пробелы, вы получите N / A там.

  • Почему типизированный массив будет автоматически обрабатываться как горизонтальный

В вашем вопросе может показаться, что , разделяет строки, поэтому с =SUMPRODUCT(--({"Apple","Pear"}=A1:A3)) вы наблюдаете аналогичное сравнение двух строк в моем первом примере, в то время как с =SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE(A1:A3))) вы получаете 'расширение' происходит.

Как указано в комментариях, в английской версии Excel , разделяет столбцы и ; разделяет строки, что можно наблюдать в этом простом примере, где я предоставляю массив из 2 строк и 3 столбцов, как показывает Excel {0,0,0;0,0,0}

enter image description here

  • Почему в моем тесте гипотез второй типизированный массив был обработан как вертикальный.

TRANSPOSE просто переключает массив с вертикального на горизонтальный (и наоборот), но в зависимости от того, что вы пытаетесь сделать, вы получите разные результаты в соответствии с первой частью моего ответа, так что вы либо иметь N/A, когда excel не может сопоставить элемент массива с другим элементом другого массива, или «расширение» двух массивов приводит к большему массиву.

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