Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, огромное спасибо!
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, Список (белый) допустимых русских слов  -  надо белый список сделать не зависимо, русские или смешанные в составе слова буквы или символы. Потому что очень часто в названия вставляют английские буквы. Например, "Мойкa" с посл буквой "a" не русской. Можете подкорректировать код?
Еще заметил, что последний код не ограничивает минимальное количество символов в русском слове!
Изменено: getana - 13.11.2019 19:16:03
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, не работает белый список. В приложении образец для проверки. Посмотрите, пож-та, в чем проблема...
Изменено: getana - 13.11.2019 15:46:27
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
в посл примере внесен 1 товар в белый список, а как внести два и больше?:
Код
        j = InStr(1, s, "душ", 1)
        If j > 0 Then a(i, 1) = "душ"
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, спасибо - последний вариант сработал даже совместно белого с черным списком
With New RegExp ' CreateObject("VBScript.RegExp") заменил , единственное что сделал в посл макросе, на With CreateObject("VBScript.RegExp")
Иначе была ошибка
Изменено: getana - 13.11.2019 08:37:44
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=119086&a...

заметил что первое слово из исключения (белый список) не учитывается как первое, которое надо найти. Привожу пример в прикрепленном файле  
Изменено: getana - 13.11.2019 00:39:41
Как из текста-каши получить первое русское слово
 
при заносе слова в исключение (белый список) заметил, что не учитывается очередность нахождения 1 слова из исключения. В приложении привел пример

Код
  Const MinLength = 4         ' Мин. длина слова в символах
  Const ExcludeList = "ая,ый,ое,ий,ой,ые,яя,ся,ее"  ' Окончания игнорируемых слов
  Const Pattern1 = "[\u00A0,\.\/ ]"  ' 1-й символ это CHR(160), последний - пробел
  Const Pattern2 = "\b_([А-ЯЁ\-]{" & MinLength & ",})[( ]"
    
  Dim i As Long, a() As Variant, Obj As Object, Rng As Range, s As String
  
  ' Задать диапазон входных данных
  With ThisWorkbook.Sheets(1)
    Set Rng = .Range("a2", .Cells(.Rows.Count, "a").End(xlUp))
  End With
  a() = Rng.Value
      
  ' Найти первое русское слова по шаблону
  With CreateObject("VBScript.RegExp")
    .Global = True
    .IgnoreCase = True
    For i = 1 To UBound(a)
      s = Trim(a(i, 1))
      If Len(s) = 0 Then
        a(i, 1) = Empty
      Else
        a(i, 1) = "(нет)"
        ' --> Исключения из правил
        If InStr(1, s, "душ", 1) > 0 Then a(i, 1) = "душ"
        'If InStr(1, s, "хром", 1) > 0 Then s = Replace(s, "хром", "", Compare:=1)
        ' <-- Конец исключений
        .Pattern = Pattern1
        s = .Replace(s, " _")
        .Pattern = Pattern2
        For Each Obj In .Execute("_" & s & " ")
          s = LCase(Obj.SubMatches(0))
          If InStr(ExcludeList, Right(s, 2)) = 0 Then
            a(i, 1) = s
            Set Obj = Nothing
            Exit For
          End If
        Next
      End If
    Next
  End With
    
  ' Поместить результат в столбец [h]
  Rng.EntireRow.Columns("h").Value = a()
Изменено: getana - 13.11.2019 00:09:05
Сортировка в массиве по столбцу работает только с цифрами. По буквам не сортирует, Что в примере не так для сортировки не только по числам, но и по словам?
 
Отвечу сам себе: Val поменять на CStr
Сортировка в массиве по столбцу работает только с цифрами. По буквам не сортирует, Что в примере не так для сортировки не только по числам, но и по словам?
 
Код
    ' сортировка двумерного массива по столбцу N
    N = 5
    Dim Check As Boolean
    ReDim tmpArr(FinalColumn) As Variant
    Do Until Check
        Check = True
        For i = 1 To FinalRow - 1
            If Val(R_data(i, N)) < Val(R_data(i + 1, N)) Then
                For j = 1 To FinalColumn
                    tmpArr(j) = R_data(i, j)
                     R_data(i, j) = R_data(i + 1, j)
                     R_data(i + 1, j) = tmpArr(j)
                    Check = False
                Next
            End If
        Next
    Loop
Изменено: getana - 20.10.2019 18:23:32
Как эту формулу реализовать в массиве?, =REPT("0",6-LEN(ROUND(H[ROW]*10, 0))) & ROUND(H[ROW]*10, 0)
 
REPT , LEN , ROUND - существуют ли данные функции для массива? Если да, то как эта формула выглядит для массива?:
=REPT("0",6-LEN(ROUND(H[ROW]*10, 0))) & ROUND(H[ROW]*10, 0)
Изменено: getana - 12.10.2019 20:40:14
В массиве 5*5 надо очистить ячейки 3 строки с 3 по 5 столбец
 
Юрий М, у меня сейчас временно так и сделано. Но мне кажется быстрее было бы за раз сразу объект удалить. Или функция Range в массивах неприменима?
В массиве 5*5 надо очистить ячейки 3 строки с 3 по 5 столбец
 
Ігор Гончаренко, Range(R_data.Cells(3, 3), R_data.Cells(3, 5)).ClearContents    или   Range(R_data(3, 3), R_data(3, 5)).ClearContents  -  так в моем примере не работает. Так действие надо сделать не в книге excel, а в массиве непосредственно в примере. Вопрос остается открытым!  пишет ошибку: <Method 'Range' of object '_Global' failed>
Изменено: getana - 12.10.2019 12:44:58
В массиве 5*5 надо очистить ячейки 3 строки с 3 по 5 столбец
 
Как в массиве 5, 5 очистить в 3 строке с 3 по 5 столбец ячейки ?
Изменено: getana - 12.10.2019 11:43:17
Как в содержимом ячейки массива убрать все перед "до" включая "до" и после "после" включая "после", Было в ячейке массива: "папа до результат после сын". Надо чтобы стало в ячейке массива: "результат"
 
Юрий М, спасибо - работает
Как в содержимом ячейки массива убрать все перед "до" включая "до" и после "после" включая "после", Было в ячейке массива: "папа до результат после сын". Надо чтобы стало в ячейке массива: "результат"
 
Было в ячейке массива: "папа до результат после сын"
надо чтобы стало в ячейке массива: результат

это не работает:

R_data(2, a) = Replace(R_data(2, a), "*папа до", "")
R_data(2, a) = Replace(R_data(2, a), "после сын*", "")
       

 
Изменено: getana - 06.08.2019 01:49:02
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, sokol92, спасибо - сработало
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
Base шкафчик 665х440х530 мм, с 2 ящ   -   почему то не получает слово шкафчик ?!
Изменено: getana - 22.07.2019 21:36:32
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, идеальная работа - быстро, качественно и все по делу. Спасибо, все работает на 100% пост #6 . Изначально и не рассчитывал, что до идеализма можно все довести...
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, не заметил первые строки, спасибо - попробую от пишусь . Вы как я понял сделали 2 варианта на выбор: и исключить с окончаниями и исключить какие то др слова дополнительно.  
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
ZVI, надо исключить не конкретные слова, а все слова с окончаниями "ая" "ый" "ое" . А то список с такими окончаниями в разных прайсах может быть огромен!
Изменено: getana - 21.07.2019 09:53:38
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
Sanja, не получает в вашем примере первое русское слова без окончания "ая" . Надо из текста "Душевая колонна" получить результат: "колонна"
Jack Famous, можно показать в примере конкретно моего макроса в приложении?
Изменено: getana - 21.07.2019 09:48:26
Как из текста-каши получить первое русское слово
 
Юрий М, БМВ, ZVI,Спасибо. Создал новую тему "Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?"
Как из текста при получении русского слова исключить слова, содержащие в конце слова ая или ый или ое?, в продолжение темы "Как из текста-каши получить первое русское слово"
 
Как из текста при получении русского слова (уже реализовано в теме "Как из текста-каши получить первое русское слово") исключить слова , содержащие в конце слова ая или ый или ое?
Код
Sub Main()
 
  Const MinLength = 4  ' Мин. длина слова в символах
   
  Dim i As Long, a() As Variant, Rng As Range, s As String
 
  ' Задать диапазон входных данных
  With ThisWorkbook.Sheets(1)
    Set Rng = .Range("d2", .Cells(.Rows.Count, "d").End(xlUp))
  End With
  a() = Rng.Value
   
  ' Найти первоое русское слова по шаблону
  With CreateObject("VBScript.RegExp")
    .Global = False
    .IgnoreCase = True
    .Pattern = " ([А-ЯЁ\-]{" & MinLength & ",})\,? "
    For i = 1 To UBound(a)
      s = Trim(a(i, 1))
      If Len(s) = 0 Then
        a(i, 1) = Empty
      Else
        With .Execute(" " & s & " ")
          If .Count > 0 Then
            a(i, 1) = LCase(.Item(0).SubMatches(0))
          Else
            a(i, 1) = "(нет)"
          End If
        End With
      End If
    Next
  End With
   
  ' Поместить результат в столбец [I]
  Rng.EntireRow.Columns(6).Value = a()
   
End Sub
Изменено: getana - 21.07.2019 08:59:14
Как из текста-каши получить первое русское слово
 
ZVI,  идеальный для меня результат на 100% -  спасибо всем, кто помогал!
Вспомнил очень важный момент всего этого дела: как в примере ниже исключить еще слова, содержащие в конце слова ая или ый ? Например, слова "белый" или "душевая" (цель убрать прилагательные) ?
Изменено: getana - 20.07.2019 08:23:24
Как из текста-каши получить первое русское слово
 
ZVI, спасибо. Если несложно, что добавить в макрос, чтобы в столбце I (результат) поменять заглавные все на строчные буквы? И надо чтобы (нет) не писало в столбце I, если исходная ячейка (в примере "B") пустая.
"медленным" макросом временно сделал это так:
Код
For i = 1 To UBound(a) 
 if Sheets(1).Cells(i, 2).Value = "" then
     Sheets(1).Cells(i, q).Value = ""
 end if    
 Sheets(1).Cells(i, q).Value = LCase(Sheets(1).Cells(i, q).Value)
Next i    
Изменено: getana - 20.07.2019 00:08:18
Как из текста-каши получить первое русское слово
 
ZVI, к сожалению в мою программу QuadPrice можно добавить в макрос только 1 функцию. В вашем примере их 2. Можно ли сделать из 2-х одну функцию?
вот такой заработал, но остался вопрос: если условие не выполняется, как сделать чтобы в ячейку прописывалось слово "нету" , а не подставлялось оригинальное значение?:
Код
Dim i As Long, a() As Variant, Rng As Range
  
  Static RegEx As Object
  If RegEx Is Nothing Then
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = False
    RegEx.IgnoreCase = True
    RegEx.Pattern = " ([А-ЯЁ\-]{" & "4" & ",})\.? "
  End If                                                              
  
  With ThisWorkbook.Sheets(1)
    Set Rng = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp))    
  End With                                      
  a() = Rng.Value
  For i = 1 To UBound(a)
      With RegEx.Execute(" " & CStr(a(i, 1)) & " ")
        If .Count > 0 Then a(i, 1) = .Item(0).SubMatches(0)
      End With
  Next
  Rng.Columns(8).Value = a()  
Изменено: getana - 19.07.2019 00:26:56
Как из текста-каши получить первое русское слово
 
ZVI,спасибо. И как допустить в середине русского слова тире ( например Кран-букс ) ? Или точку в конце русского слова (например Смесит. )
Изменено: getana - 17.07.2019 11:00:46
Как из текста-каши получить первое русское слово
 
БМВ, ZVI, Спасибо за целых 2 варианта. Вариант с макросом: что надо поменять, если данные находятся во 2 столбце, а не в 1 ? И как допустить в середине слова тире ( например Кран-букс ) ?
Изменено: getana - 17.07.2019 10:57:38
Как из текста-каши получить первое русское слово
 
Если можно, чуточку усложню задачу: найти первое русское слово, состоящее из 3 и более букв!
Пример:
было: ЭС 150-50 УБ Экран под ванну ODA "Универсал" (белый) 1,50х0,50
стало: Экран
Изменено: getana - 17.07.2019 02:25:32
Как из текста-каши получить первое русское слово
 
Код
ActiveWorkbook.Names.Add Name:="asd", RefersToR1C1:= _
        "=TRIM(MID(SUBSTITUTE(TRIM(RC[-7]),"" "",REPT("" "",99)),99*(" & Chr(10) & "MATCH(,MMULT(--ISNUMBER(FIND(CHAR(COLUMN(R1C1:R1C191)),SUBSTITUTE(LOWER(TRIM(MID(SUBSTITUTE(TRIM(RC[-7]),"" "",REPT("" "",99)),99*(ROW(R1:R99)-1)+1,99))),""ё"",""е""))),TRANSPOSE(COLUMN(R1C1:R1C191)^0)),)" & Chr(10) & "-1)+1,99))"
   

     ActiveSheet.Cells(i, q).Select
       ActiveCell.FormulaR1C1 = "=asd"  

Спасибо - заработало!
Изменено: getana - 17.07.2019 02:16:59
Страницы: 1 2 След.
Наверх