2010-09-08 8 views
2

Я хочу подсчитать все уникальные значения в столбце Excel, которые содержат определенную строку. Например, у меня есть это в моей колонке:Count Уникальные строки в электронной таблице Excel, которые соответствуют определенным критериям

Стр
STRB
Стр
StRC
Diffa
diffB
StRC

Если я даю эту теоретическую функцию, что я пишу значение «str», он будет считать уникальные значения, содержащие «str», и вернет мне номер 3.

Любые предложения? Сеть полна ответов на эту проблему, но я потратил час, пытаясь найти четкое решение, поэтому я подумал, что StackOverflow может извлечь выгоду из этого вопроса.

ответ

1
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 

При запуске с вашим входным образцом это дает 3. Конечным условием для цикла является первая пустая ячейка, найденная в столбце. Вы можете настроить это, если логика не то, что вы хотите.

Чтобы этот макрос был скомпилирован и запущен, вам необходимо добавить ссылку на Microsoft Scripting Runtime в разделе VBA для этого макроса.

+0

Это работает, но я пытался это сделать в строке формул со встроенными функциями Excel. Я думаю, что я могу превратить это в пользовательскую функцию довольно безболезненно. Благодаря! – SuperNES

+0

@SuperNES - проблем нет. Не забывайте принимать ответ, если он решает вашу проблему. Благодарю. – dcp

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

Enter with Control + Shift + Enter, а не просто Enter, потому что это формула массива. Как правило, для подсчета количества уникальных элементов в списке, вы бы массив ввести

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

Я умножил часть СЧЕТЕСЛИ другой критерий (начинается с ул), так что те, которые не начинаются со строки, рассматриваются как нуль. Если вы новичок в формулах массива, см

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

+0

не могли бы вы проголосовать за синонимы для VBA, я думаю, нам нужно избавиться от дефисных тегов, таких как «Excel-VBA», и просто использовать те же теги, что и для Word и Access. –

+0

В мета? Я только что это сделал. Если есть другое место, где я должен поставить свои два цента, дайте мне знать. –

0

Я был слишком медленным, но я получил другое решение:

Поместить строку для поиска в В1, то введите в качестве формулы массива:

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