在满足一定标准的Excel电子表格中统计唯一行

我想统计包含特定string的Excel列中的所有唯一值。 比如说,我在我的专栏里有这个:

斯特拉
STRB
斯特拉
STRC
迪法
diffB
STRC

如果我给出这个理论函数,我写了一个“str”的值,它将计算包含“str”的唯一值,然后给我回数字3。

有什么build议么? networking充满了这个问题的一半答案,但我花了一个小时试图find一个清晰的解决scheme,所以我认为StackOverflow可能会从这个问题中受益。

Option Explicit Sub Test() GetCount 1, "str" End Sub Sub GetCount(colNum As Integer, str As String) Dim row As Integer Dim dict Set dict = CreateObject("Scripting.Dictionary") row = 1 Dim key As String While Cells(row, colNum) <> "" key = Cells(row, colNum) If InStr(key, str) And Not dict.Exists(key) Then dict.Add key, key End If row = row + 1 Wend MsgBox ("the count is " & dict.Count) End Sub 

当你的input样本运行时,这会给出3.循环的终止条件是在列中find的第一个空单元格。 你可以调整,如果逻辑不是你想要的。

您需要在VBA部分添加对Microsoft脚本运行时的引用,以便此macros编译并运行。

 =SUM(1/COUNTIF(A1:A7,A1:A7)*(LEFT(A1:A7,3)="str")) 

使用Control + Shift + Enterinput,而不只是input,因为它是一个数组公式。 通常要计算列表中唯一项目的数量,您可以input数组

 =SUM(1/COUNTIF(A1:A7,A1:A7)) 

我将COUNTIF部分乘以另一个条件(以str开头),以便那些不以string开头的值被视为零。 如果您是数组公式的新手,请参阅

http://www.dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/

我一直太慢,但我有一个不同的解决scheme:

把string在B1中search,然后input数组公式:

 =SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))