Возвращаясь из массива - PullRequest
1 голос
/ 02 марта 2020

Возможно, об этом уже спрашивали, но я даже не знаю, что искать.

У меня есть массив в Excel из n элементов. У меня также есть двоичный массив из n элементов, и для каждого 1 в этом двоичном массиве я хочу вернуть элемент, которому соответствует его позиция в исходном массиве. Например, допустим, у меня есть: {A, B, C, D} и {0,0,1,1}. Я хочу вернуть только C и D, так как это те места, которые имеют 1. Есть ли способ сделать это в Excel?

Спасибо.

Бест,

Моррис

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Попробуйте следующую пользовательскую функцию:

Public Function xtract(s1 As String, binpatrn As String) As String
    Dim arr1, arr2, i As Long
    arr1 = Split(s1, ",")
    arr2 = Split(binpatrn, ",")

    For i = LBound(arr1) To UBound(arr1)
        If arr2(i) = "1" Then
            xtract = xtract & "," & arr1(i)
        End If
    Next i
    If xtract = "" Then
        Exit Function
    Else
        xtract = Mid(xtract, 2)
    End If
End Function

Мы помещаем разделенный запятыми список (без скобок) в A1 и двоичный список (без скобок) в B1 . В C1 введите:

=xtract(A1,B1)

enter image description here

0 голосов
/ 02 марта 2020

Вы можете использовать:

=INDEX({"A","B","C","D"},N(IF({1},MODE.MULT(IF({0,0,1,1},COLUMN($A:$D)*{1;1})))))

В зависимости от версии, это может потребоваться подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.

Моя версия автоматически выливается массивы, поэтому, поместив его в A1, я получу полный вывод массива.

enter image description here

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