Страницы: 1
RSS
Как разделить фразы в два столбика?
 
Есть EXCEL файлик. В нём есть столбик фраз.

Есть необходимость разделить фразу на два столбика, причём в первом столбике не должно быть больше 30 символов.
Слова должны быть полные в столбике, не должны резаться.

Подскажите, как это осуществить?
Пример в файле.
 
Здесь было
Я сам - дурнее всякого примера! ...
 
вариант функций uuu1 и uuu2

Код
Function uuu1$(t$)
   Dim i%, s%, i1%, t1$
   With CreateObject("VBScript.RegExp"): .Global = True: .Ignorecase = True
    .Pattern = "(?:[^а-яё]|^)[а-яё]+(?=[^а-яё]|$)"
       For i = 0 To .Execute(t).Count - 1
           s = s + Len(Trim(.Execute(t)(i)))
        If s + i > 30 Then i1 = i: Exit For
       Next
      t1 = .Execute(t)(i1): .Pattern = "^.+(?=" & t1 & ")"
      uuu1 = Trim(.Execute(t)(0))
  End With
End Function
Код
Function uuu2$(t$)
 uuu2 = Replace(t, uuu1(t), "")
End Function
Изменено: sv2013 - 24.08.2016 19:40:07
 
Если на регулярках, то проще так
Код
Sub tt()
    Dim arr(), arr1(), arr2(), i As Long, m As Object, u As Long
    On Error Resume Next
    arr = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    If Err Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = Range("A2")
        Err.Clear
    End If
    u = UBound(arr)
    ReDim arr1(1 To u, 1 To 1): ReDim arr2(1 To u, 1 To 1)
    With CreateObject("VBScript.Regexp")
        .IgnoreCase = True
        .Pattern = "[а-яё ]{1,30} "
        For i = 1 To u
            Set m = .Execute(arr(i, 1))
            If m.Count <> 0 Then
                arr1(i, 1) = Trim(m(0))
                arr2(i, 1) = Trim(Right(arr(i, 1), Len(arr(i, 1)) - Len(arr1(i, 1))))
            End If
        Next
    End With
    Range("B2").Resize(u, 1) = arr1
    Range("C2").Resize(u, 1) = arr2
End Sub



 
Цитата
sv2013 написал:
вариант функций uuu1 и uuu2
Есть 2 момента:
1) Если первой во фразе стоит цифра, то в первом столбике оказывается она, а в другом всё остальное.
2) Если фраза в целом меньше 30 символов, то пишется #ЗНАЧ!, хотя она полностью должна быть в первом столбике, а во втором её быть не должно.

 
 
Цитата
МВТ написал: Если на регулярках, то проще так
Не получается у меня макрос вставить правильно. Криворук я в excel.
 
Цитата
krestsoft написал:
1) Если первой во фразе стоит цифра, то в первом столбике оказывается она, а в другом всё остальное.
для универсальности нужно так.Pattern = ".{1,30} "  
Макрос вставляется так
 
Цитата
МВТ написал:
для универсальности нужно так.Pattern = ".{1,30} "  
Макрос вставляется  так
Выделяю весь столбик с фразами, захожу в макросы, нажимаю Выполнить и ничего не происходит :(
 
Тама на этой же странице. Не ленитесь искать по форуму. Не одна она. Таких тем было много.
Формула взята оттуда:
=СЖПРОБЕЛЫ(ЕСЛИ(ДЛСТР(D2)>30;ЛЕВБ(D2;ПОИСК("ї";ПОДСТАВИТЬ(D2;",";"ї";31-ДЛСТР(ПОДСТАВИТЬ(ЛЕВБ(D2;30);" ";))))-1);D2))
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(D2;G2;))

D2 - текст,  G2 - ячейка с первой формулой
 
Макрос рассчитан на то, что исходные данные находятся в столбце А начиная со 2-й строки, как в приведенном Вами примере. Если хотите, приложите реальный файл
 
krestsoft,для подключения цифр,поменяйте в uuu1 соответствующую строчку так:
Код
 .Pattern = "(?:[^а-яё\d]|^)[а-яё\d]+(?=[^а-яё\d]|$)"
Изменено: sv2013 - 24.08.2016 22:18:02
 
РЕБЯТ СПАСИБО БОЛЬШОЕ ЗА УЧАСТИЕ! ПРОФИТ )
Страницы: 1
Наверх