Получить общее количество имен групп, в которых несколько ячеек в одной ячейке окружены случайным текстом - PullRequest
0 голосов
/ 27 мая 2019

Это касается экспорта списка с сайта Sharepoint, где у меня нет доступа к функции экспорта, но я могу обновить информацию для сбора новой информации, когда она добавляется на сайт Sharepoint. В списке Excel есть несколько столбцов, один из которых содержит имена созданных групп.

Есть несколько тысяч строк с ячейками, в которых каждая ячейка может содержать данные такого типа. Я хочу иметь возможность только посчитать количество групп в моем листе Excel.

Сначала я думал найти способ как-то экспортировать данные в виде текста, а затем попытаться удалить любые части строки ДО строк (опять же, все эти строки находятся в одной и той же ячейке), чтобы сделать данные единообразно и иметь только название группы, а затем попытаться подсчитать в другом столбце количество элементов в каждой ячейке и получить сумму.

"Please delete following CORP group: 

PRD.12.SYOS.EXOA.XW12LAPP0171.TWSUSERS
PRD.12.SYOS.XW12LAPP0171.Administrators
PRD.12.SYOS.EXOA.XW12LAPP0063.TWSAGENT
PRD.12.SYOS.EXOA.XW12LAPP0063.TWSUSERS
PRD.12.SYOS.VM4P.XW12LAPP0063.ADMINISTRATORS
PRD.12.SYOS.VM4P.XW12LAPP0063.RDP
PRD.12.SYOS.XW12LAPP0063.Administrators"

Я новичок в Excel и в коде. Я пытался использовать функции в Excel, такие как RIGHT, LEFT, MID, LEN, но я все еще не могу создать что-то похожее на то, что мне нужно.

Мне нужно общее количество групп в листе.

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Если в вашем списке нет дубликатов, вы можете использовать довольно простую формулу, например:

=LEN(A1)-LEN(SUBSTITUTE(A1,CHR(10),""))-1

Было бы также неплохо использовать REGEX, например, так:

Function CountGroup(RNG As Range) As Double

Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
With regex
    .Pattern = "(?=.*\d)[^\n " & Chr(34) & "]+"
    .Global = True
End With
Set Matches = regex.Execute(RNG.Value)
CountGroup = Matches.Count

End Function

Или когда ваш список может содержать дубликаты:

Function CountGroup(RNG As Range) As Double

Dim regex As Object, ARR1() As String, X As Long, ARR2() As String
Set regex = CreateObject("VBScript.RegExp")
With regex
    .Pattern = "(?=.*\d)[^\n " & Chr(34) & "]+"
    .Global = True
End With
Set matches = regex.Execute(RNG.Value)
ReDim ARR1(X)
For Each HIT In matches
    ARR2 = Filter(SourceArray:=ARR1, Match:=HIT.Value, Include:=True, Compare:=vbTextCompare)
    If UBound(ARR2) = -1 Then
        ReDim Preserve ARR1(X)
        ARR1(X) = HIT.Value
        X = X + 1
    End If
Next HIT

If IsEmpty(ARR1) Then
    CountGroup = 0
Else
    CountGroup = UBound(ARR1) - LBound(ARR1)
End If

End Function

Позвоните на лист через =CountGroup(A1)

enter image description here

1 голос
/ 27 мая 2019

с помощью вспомогательного столбца вы можете извлечь часть после последней точки с помощью

=MID(A1,LOOKUP(9^9,FIND(".",A1,ROW(1:999)))+1,50)

и затем подсчитать количество уникальных имен групп, которые встречаются с

=SUMPRODUCT((E1:E99<>"")/COUNTIF(E1:E99,E1:E99&""))

Помните о том, что каждый Administrators и Administrators" считаются уникальной группой. Вам нужно удалить ненужные символы с помощью SUBSTITUTE, если вы не хотите такого поведения.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...