Как объединить диапазон смещения в показателе - PullRequest
0 голосов
/ 03 мая 2019

У меня есть формула в Excel, которая сообщает мне, встречалась ли уже комбинация столбцов в предыдущих строках. Я использую это как формулу массива.

{=MATCH([@[col1]]&[@[col2]],$K$9:K11&$H$9:H11)}

Я пробовал также COUNTIF, но он не работает, как это.

Дело в том, что мне нужно изменить эту абсолютную ссылку на относительную.

До сих пор самым элегантным решением было использование функции OFFSET (строки начинаются с 10-й строки):

{=MATCH([@[col1]]&[@[col2]],OFFSET([@[col1]],-(ROW()-10),0,ROW()-9,1)&OFFSET([@[col2]],-(ROW()-10),0,ROW()-9,1))}

К сожалению, этот подход не работает. Кто-нибудь обойти?

Не имеет значения, если я получу счет или просто правда / ложь.

Does not matter if I get count or just true/false

1 Ответ

0 голосов
/ 11 мая 2019

Я решил эту проблему, создав пользовательскую функцию в VBA:

Function FIRSTOCCURANCE(StartFromRow As Integer, _
                             val1 As Range, _
                             val2 As Range) As Boolean

Dim RangeX() As Variant, RangeY() As Variant, RangeZ() As Variant, Concat() As Variant
Dim lastRow As Integer, i As Integer, j As Integer: j = 0
lastRow = val1.Row - 1

RangeX = Range(Cells(StartFromRow, val1.Column), Cells(lastRow, val1.Column)).Value
RangeY = Range(Cells(StartFromRow, val2.Column), Cells(lastRow, val2.Column)).Value
'when assigning from range always is 2-D array

For i = LBound(RangeX, 1) To UBound(RangeX, 1)
    ReDim Preserve Concat(j)
    Concat(j) = RangeY(i, 1) & RangeX(i, 1)
    j = j + 1
Next i

FIRSTOCCURANCE = IsError(Application.Match(val2.Value & val1.Value, Concat, 0))

End Function
...