Страницы: 1
RSS
Счет слов в строке
 
Добрый день. Имеется массив, в котором в ячейках написано по 1 слову (иногда 2). Необходимо посчитать построчно, сколько раз употреблено то или иное слово. Нагуглил такую формулу =СУММПРОИЗВ ((ДЛСТР (A1:A4) — ДЛСТР (ПОДСТАВИТЬ (A1:A4; «Груша»; «»)) / ДЛСТР(«Груша»)), но она не работает. Сразу спрошу по поводу условного форматирования: как сделать так, чтобы, условно, если под "Груша" написано "3" (необходимое количество слов) и в строке как раз столько слов, то ячейка, которая показывает количество слова в строке выделялась? И можно ли сделать так, чтобы, если все фрукты соответствуют заявленным количествам, то вся строка выделялась другим цветом?
 
BodyDeBuilder, Вариант
 
BodyDeBuilder, очень странно, что Вы хотите посчитать построчно, а считаете в столбце
Цитата
A1:A4
Если все-таки построчно, то вот как вариант:
Код
=СУММ(ДЛСТР($A3:$L3)-ДЛСТР(ПОДСТАВИТЬ($A3:$L3;M$2;"")))/ДЛСТР(M$2)
Где взять это необходимо количество? Или всегда 3?
Цитата
BodyDeBuilder написал: необходимое количество слов
Изменено: vikttur - 01.09.2021 07:47:06
 
Можно ещё макросом
Код
Sub Макрос1()
Dim rn As Range, arr1 As Variant, arr2 As Variant, n As Integer, m As Long, str1 As String
Set Dict = CreateObject("Scripting.Dictionary")
For Each rn In Selection
    arr1 = Split(Rep(rn), " ")
    For n = LBound(arr1) To UBound(arr1)
        If arr1(n) <> "" Then
            If Not Dict.Exists(arr1(n)) Then
                Dict.Add arr1(n), "1"
            Else
                Dict.Item(arr1(n)) = CStr(CLng(Dict.Item(arr1(n)) + 1))
            End If
        End If
    Next
Next
If Dict.Count = 0 Then Exit Sub
ReDim arr2(1 To Dict.Count, 1 To 2)
m = 0
For Each d In Dict
    m = m + 1
    arr2(m, 1) = d
    arr2(m, 2) = Dict.Item(d)
Next
str1 = Selection.Address
Sheets.Add After:=ActiveSheet
Range("A1") = "В диапазоне: " & str1
Range("A2").Resize(Dict.Count, 2) = arr2
End Sub

Function Rep(ByVal txt As String) As String
    Dim str1 As String, n As Integer, a As Byte
    str1 = ",.:;\/|"
    For n = 1 To Len(str1)
        txt = Replace(txt, Mid(str1, n, 1), " ")
    Next n
    Rep = Trim(Replace(txt, "  ", " "))
End Function
Изменено: Msi2102 - 01.09.2021 08:52:47
 
Ещё вариант:
=СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК(M$2;$A3:$L3)))
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Спасибо огромное. То, что было нужно)
Изменено: vikttur - 29.01.2022 16:18:40
Страницы: 1
Наверх