首页 > 解决方案 > 如何在countif中连接偏移范围

问题描述

我在 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))}

不幸的是,这种方法不起作用。有人解决方法吗?

如果我得到计数​​或只是真/假都没有关系。

如果我得到计数​​或只是真/假都没有关系

标签: excelconcatenationformulacountif

解决方案


我已经通过在 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

推荐阅读