【问题标题】:How to concatenate offset range in countif如何在countif中连接偏移范围
【发布时间】:2019-09-22 10:05:05
【问题描述】:

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

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

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

【问题讨论】:

  • 你能提供一些源数据吗?即截图之类的?

标签: excel concatenation formula countif


【解决方案1】:

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

【讨论】:

  • 如果有人知道如何提高性能或如何使用任意数量的列来做到这一点,请告诉我。
猜你喜欢
  • 2012-01-15
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2020-05-17
  • 2020-11-06
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多