如何在 countif 中连接偏移范围
How to concatenate offset range in countif
我在 Excel 中有公式告诉我列的组合是否已经出现在前面的行中。我用它作为数组公式。
{=MATCH([@[col1]]&[@[col2]],$K:K11&$H:H11)}
我也尝试了 COUNTIF,但它不是这样工作的。
问题是我需要将这个绝对引用更改为相对引用。
到目前为止,最优雅的解决方案是使用 OFFSET 函数(行从第 10 行开始):
{=MATCH([@[col1]]&[@[col2]],OFFSET([@[col1]],-(ROW()-10),0,ROW()-9,1)&OFFSET([@[col2]],-(ROW()-10),0,ROW()-9,1))}
不幸的是,这种方法不起作用。有人解决方法吗?
不管我得到计数还是只是 true/false.
我已经通过在 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
我在 Excel 中有公式告诉我列的组合是否已经出现在前面的行中。我用它作为数组公式。
{=MATCH([@[col1]]&[@[col2]],$K:K11&$H:H11)}
我也尝试了 COUNTIF,但它不是这样工作的。
问题是我需要将这个绝对引用更改为相对引用。
到目前为止,最优雅的解决方案是使用 OFFSET 函数(行从第 10 行开始):
{=MATCH([@[col1]]&[@[col2]],OFFSET([@[col1]],-(ROW()-10),0,ROW()-9,1)&OFFSET([@[col2]],-(ROW()-10),0,ROW()-9,1))}
不幸的是,这种方法不起作用。有人解决方法吗?
不管我得到计数还是只是 true/false.
我已经通过在 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