Excel 查找COUNTIFS函数的地址(单元格/行)

Excel 查找COUNTIFS函数的地址(单元格/行),excel,function,Excel,Function,我有一个Excel文件,里面填充了大量COUNTIFS函数(超过300个)。这些公式工作得很好,但是我需要能够找到每个国家的地址,因为数据源非常大 i、 e.如果COUNTIFs给我所选参数的结果为1,我需要能够知道函数从数据源计数的单元格/行 我想这可以通过ADDRESS函数实现,但我不确定如何将其与COUNTIFS一起使用。试试看 =ADDRESS(AGGREGATE(15, 7, ROW(C$3:INDEX(C:C, MATCH(1E+99, C:C)))/(C$3:INDEX(C:C,

我有一个Excel文件,里面填充了大量COUNTIFS函数(超过300个)。这些公式工作得很好,但是我需要能够找到每个国家的地址,因为数据源非常大

i、 e.如果COUNTIFs给我所选参数的结果为1,我需要能够知道函数从数据源计数的单元格/行

我想这可以通过ADDRESS函数实现,但我不确定如何将其与COUNTIFS一起使用。

试试看

=ADDRESS(AGGREGATE(15, 7, ROW(C$3:INDEX(C:C, MATCH(1E+99, C:C)))/(C$3:INDEX(C:C, MATCH(1E+99, C:C))=1), ROW(1:1)), COLUMN(B:B), 4, 1, "Shett4")

假设您的条件行已对齐,您可以找到进入计数的行。参考下图,在与
COUNTIFS
返回的行数相同的区域(我在图中将公式输入到
H2:H4
中)中,将其作为数组公式输入(Ctrl+Shift+enter):


我会选择一个用户定义的函数

使用以下代码,您将得到以下结果:

公共函数ListAddresses(SearchTerm作为变量,SearchRange作为范围)作为字符串
将WS作为工作表,将rCell作为范围
设置WS=Sheets(SearchRange.Parent.Name)
SearchTerm=UCase(SearchTerm)
设置SearchRange=Intersect(WS.UsedRange,SearchRange)
对于SearchRange.Cells中的每个rCell
如果UCase(rCell.Value)=SearchTerm,则
ListAddresses=ListAddresses&rCell.Address(False,False)&“|”
如果结束
下一个rCell
如果列表地址为“”,则
ListAddresses=左(ListAddresses,Len(ListAddresses)-3)
其他的
ListAddresses=“”
如果结束
端函数

我认为您需要使用匹配功能。如果你提供更多的细节,你可能会得到一个具体的答案,作为一个公式。没有一个简单的包装器可以在现有的COUNTIFS()上使用,以返回那些被计数的地址。但是,您可以使用条件格式,并在CountIf中输入与条件匹配的条件,以便为包含的单元格着色。有一些复杂的公式可能很接近,但它们将是数组类型的公式,因此,使用太多和/或引用太大的数据集将减慢计算时间。@ScottCraner-我是否误解了这个问题?@Jeep说,我们中的一个误解了。需要OP来澄清。我认为整个
语句意味着
1
是被计数的事实,匹配所有标准,而不是整个COUNTIFS()返回1,但您的解释可能是正确的,OP希望从COUNTIFS()的返回中计算文本
1
。我在猜测我最初的解释。嘿@jeeped,如果你没有注意到,OP接受了我的答案而不是你的。这是地球历史上第一次发生这种情况。我只是想确定你没有忽视这一重大时刻。它可能不会再发生了@PGCodeRider,这是一个非常重要的时刻,祝贺你!(并祝您好运)谢谢,这太完美了!您知道是否也可以在原始数据中突出显示这些单元格?或者让它们具有不同的颜色,或者理想情况下在它们的下一个单元格中添加一个“X”(在本例中为D4和D7)。对不起,我在VBA方面很糟糕..:(@user9990184我很高兴它很有用。如果你能点击“接受”就好了在询问您的原始问题中没有的更多功能之前,请先回答此问题。您好-为迟交的反馈表示歉意,我没有注意到您的最后评论。我接受了您的回答,您是否可以帮助突出显示原始数据中通过CountIf计数的单元格?谢谢@user9990184用户定义的功能无法触摸工作表(即更改背景/字体/等),因此,如果您想实际更新工作表的其余部分,您需要一个宏。使用条件格式可能会更容易。在我的特定示例中,选择C4到C7,并将条件格式设置为
=$a$1=C4
。我希望这对您有所帮助。如果没有,请发布另一个问题,如果合理,我会打勾并尝试回答.欢迎光临。
=SMALL(IF(((A2:A11=F1)+(B2:B11=F2)+(C2:C11=F3))=3,ROW(A2:A11)),ROW(INDIRECT("1:"&F4)))
Public Function ListAddresses(SearchTerm As Variant, SearchRange As Range) As String
    Dim WS As Worksheet, rCell As Range

    Set WS = Sheets(SearchRange.Parent.Name)
    SearchTerm = UCase(SearchTerm)

    Set SearchRange = Intersect(WS.UsedRange, SearchRange)

    For Each rCell In SearchRange.Cells
        If UCase(rCell.Value) = SearchTerm Then
            ListAddresses = ListAddresses & rCell.Address(False, False) & " | "
        End If

    Next rCell

    If ListAddresses <> "" Then
        ListAddresses = Left(ListAddresses, Len(ListAddresses) - 3)
    Else
        ListAddresses = "<none>"
    End If

End Function