Страницы: 1
RSS
Как найти все слова с дефисом?
 
Есть очень длинная колонка вот такого вида:

весить
из-за
вовлечь
восторженно
всего-то
вышестоящий
господство
докторский
духовность
завершаться

Как в этой колонке найти все слова с дефисом?


Чтобы получилась короткая колонка слов только с дефисом:

из-за
всего-то
Заранее спасибо.
Изменено: iva2000 - 22.11.2022 18:20:43
 
Формула, макрос, PQ, PP?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Выделяешь, ставишь фильтр
На названии столбика появляется серый треугольник
Нажимаешь на серый треугольник
Выбираешь текстовые фильтры -> содержит... -> вбиваешь дефис -> нажимаешь ОК
 
если предположить, что мы говорим про Excel, то допустим у нас данные только в столбце А, начиная с ячейка А1 (и других данных в других столбцах нет), то

Код
Sub Test()
    Dim arr As Variant, rowCounter As Long, i As Long
        
    With ActiveSheet
        arr = .Range("A1").CurrentRegion
        ReDim arrOut(1 To UBound(arr), 1 To 1)
        For i = LBound(arr) To UBound(arr)
            If InStr(1, arr(i, 1), "-", vbTextCompare) > 0 Then
                rowCounter = rowCounter + 1
                arrOut(rowCounter, 1) = arr(i, 1)
            End If
        Next i
        .Columns(3).Clear
        .Range("C1").Resize(rowCounter, 1).Value = arrOut
    End With
End Sub
 
господа,
минус в формуле 2-1
тире в предложении; "Велика Россия, а отступать некуда - позади Москва!"
это не слова с дефисами(((
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
этого не было указано в примере от ТС ))
 
Ігор Гончаренко, в образце и в описании слова, а не предложения
 
согласен, ничего такого в исходных нет (это все моя больная фантазия - не более, плюс нежелание решать одну и туже задачу по несколько раз)
Код
Sub Test()
  Dim a, r&, s$
  a = [a1].CurrentRegion
  For r = 1 To UBound(a)
    s = s & FindWordWithDefis(a(r, 1))
  Next
  MsgBox s
End Sub

Function FindWordWithDefis$(txt)
  Const Cir$ = "[а-яА-ЯёЁ]+"
  Dim m, ms, re, s$
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = Cir & "-" & Cir
  re.Global = True: re.MultiLine = True
  If re.Test(txt) Then
    Set ms = re.Execute(txt)
    For Each m In ms: s = s & " " & m: Next
  End If
  FindWordWithDefis = s
End Function
Изменено: Ігор Гончаренко - 22.11.2022 20:26:57
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
допустим у нас данные в столбце А
Для Excel 365 или 2021:
=ФИЛЬТР(A:A;ЕЧИСЛО(ПОИСК("-";A:A)))
Изменено: Бахтиёр - 23.11.2022 08:12:07
 
Дорогие товарищи! Спасибо всем за помощь.

Сработал скрипт "New". Я получил нужные мне слова.

Скрипт "Ігор Гончаренко" тоже сработал, но дал результат в виде служебного сообщения, в котором его трудно скопировать (скриншот прикладываю).

Функция "Бахтиёр" у меня не заработала. Вообще не заработала, может быть Excel другой версии.
Изменено: iva2000 - 24.11.2022 11:05:56 (добавил скриншот)
 
Добрый вечер, Антон. Просто в макросе от Ігор Гончаренко результат макроса выводится в MsgBox - системное окно. Из него нельзя скопировать текст, оно информационное. Можно в его коде заменить вот эту строку
Код
MsgBox s

например, вот на эту
Код
Range("C1").Value = s

тогда результат работы макрос будет записан в ячейку С1
Изменено: New - 24.11.2022 21:53:46
Страницы: 1
Наверх