我正在尝试对当前列使用结构化引用,就像对UDF函数使用CountIf一样。
= COUNTIF(数据[团队];概述[团队])
有效,我的新功能
= CONCATENATEIF(Data [Team]; Overview [Team]; Data [Data])
不起作用,因为不能将Overview [Team]标准的Range强制转换为单个值,即[#This Row]。
我尝试将参数“ criteria”设置为String以及其他方法。呼叫
带有“ @”的= CONCATENATEIF(Data [Team]; Overview [@Team]; Data [Data])
可以正常使用。但是CountIf可以处理[@Team],[Team]和正常范围,例如[A1:A4]。那么他们是怎么做到的?
Public Function CONCATENATEIF(check_range As Range, criteria As Range, data_range As Range) As Variant
Dim mydic As Object
Dim L As Long
Set mydic = CreateObject("Scripting.Dictionary")
For L = 1 To check_range.Count
If check_range(L) = criteria Then
mydic(L) = data_range(L)
End If
Next
CONCATENATEIF= Join(mydic.items, ", ")
End Function
条件必须像CountIf的条件一样工作?如何将结构化参考[Team]转换为[ba @ baam] vba-wise,以便它选择同一行,以便稍后使用Formular。
答案 0 :(得分:0)
COUNTIF可以使用推断出的参考¹。
如果您将一堆值放在A列中,然后在未使用的列中使用=INDEX(A:A, , )
( Index(Overview[Team]
列的推断引用来引用单个单元格作为条件;例如Overview[Team]
中与公式位于同一行的单元格(也称为Overview[@Team]
)。
VBA代码未使用推断的引用。它引用的是Overview[Team]
的整个列,在该列中需要一个单元格作为条件(例如Overview[@Team]
)。
您可以尝试使用Application.Caller.Row
来人为地将条件列解析为单个单元格,或者可以像预期的那样仅使用Overview[@Team]
作为条件。
¹我希望我能正确理解这个词。我很少使用它,以至于有时很难记住正确的术语。