#excel #vba
Вопрос:
Используя Microsoft Excel, как проверить общее количество вхождений строки в столбце Excel со многими ячейками, разделенными запятыми?
Ответ №1:
Похоже, это работает (при условии отсутствия пробелов между запятой и числом):
=SUM((LEN("," amp; DataColumn amp; ",")-LEN(SUBSTITUTE("," amp; DataColumn amp; ",","," amp; ValueToLookFor amp; ",","")))/LEN("," amp; ValueToLookFor amp; ","))
Или если ваши данные находятся в таблице, а значение, которое нужно искать, жестко закодировано:
=SUM((LEN("," amp; Table1[Column1] amp; ",")-LEN(SUBSTITUTE("," amp; Table1[Column1] amp; ",",",1300.01,","")))/LEN(",1300.01,"))
Комментарии:
1. это сработало, спасибо!
2. =СУММА((LEN(«,» amp; Real_Time_Bidding_TCs!$F$2 : Real_Time_Bidding_TCs!$F$20 amp; «,») — LEN(ЗАМЕНИТЬ(«,» amp; Real_Time_Bidding_TCs!$F$2 : Real_Time_Bidding_TCs!$F$20 amp; «,»,»,» amp; D2 amp; «,»,»»)))/ЛЕН(«,» amp; D2 amp; «,»))
Ответ №2:
Я бы посоветовал UDF (определяемую пользователем функцию), подсчитывающую количество событий внутри строки. Это может быть основано на функции Split()
VBA: вы разбиваете строку на отдельные части и подсчитываете те, которые вы ищете.
Затем вы пишете макрос VBA на основе этого UDF для всех выбранных ячеек.
Ответ №3:
Эта пользовательская функция отобразит все вхождения указанной строки.
Function countStringRange(theRange As Range, theString As String) As Long
Dim ws As Worksheet, cleanRange As Range, aCell As Range
Dim i As Long, theLength As Long
Set ws = theRange.Worksheet
theLength = Len(theString)
Set cleanRange = Intersect(ws.UsedRange, theRange)
If Not cleanRange Is Nothing Then
For Each aCell In cleanRange.Cells
If Not IsEmpty(aCell) Then
For i = 1 To Len(aCell.Value) - theLength 1
If Mid(aCell.Value2, i, theLength) = theString Then
countStringRange = countStringRange 1
End If
Next i
End If
Next aCell
End If
End Function