Страницы: 1
RSS
Разделить текст на 4 части
 
Доброго времени суток!

как можно разделить текст равномерно на 4 части - 4 столбца ... так чтобы получились полноценные предложения до точки! и мксимальное количество знаков в каждой ячейке составляло не более 500 знаков?

Возможно что то такое сделать?
Скажем есть текст в ячейке А1 и этот текст должен разделиться на B1 - C1 - D1 - E1. Можно ли это через формулы сделать или понадобится макрос?
 
макрос  - это элементарно, но можно и формулами
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
Function Split500(txt$)
  Dim s$, p&, c&
  p = 1: c = Application.Min(500, Len(txt) / 3)
  Do While p < Len(txt)
    s = Left(txt, p + c - 1): If Len(s) < c Then p = p + Len(s) Else p = InStrRev(s, ".")
    txt = Left(txt, p) & Chr(9) & Right(txt, Len(txt) - p): p = p + 1
  Loop
  Split500 = Split(txt, Chr(9))
End Function
формула в В2. отмечаете В2, С2, Д2, Е2, жмете кнопку F2, Ctrl+Shift+Enter
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, круто, благодарю!
правда сейчас протестировал...и основного текста удалил что то...а Эксель начинает грузить долго и программа не отвечает
возможно, дело в том, что в коде стоит минимум 500 знаков...дело в том, что в сновном тексте может быть и меньше 500 знаков...этот текст необходимо тоже делить на четыре части

с русским языком отлично работает, с английским тоже...а вот с немецким ...вообще не работает... может это изза умлаутов ä ü ö?
Изменено: shlika - 11.04.2018 03:02:42
 
даже исходный текст в 100 знаков будет разделен на 4 части
макросу все равно какой там язык - главное, чтобы точки разделяли предложения друг от друга
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
а чтобы все было строго используйте такую функцию:
Код
Function Split500(txt$)
  Dim s$, p&, c&, cnt&
  If Len(txt) - Len(Replace(txt, ".", "")) < 4 Then
    txt = Replace(txt, ".", "." & Chr(9))
  Else
    p = 1: c = Application.Min(500, Len(txt) / 3)
    Do While p < Len(txt)
      If InStr(Mid(txt, p, c - 1), ".") = 0 Then
        p = InStr(p, txt, ".")
      Else
        p = InStrRev(Left(txt, p + c - 1), ".")
      End If
      txt = Left(txt, p) & Chr(9) & Right(txt, Len(txt) - p): p = p + 1
      If InStr(Right(txt, Len(txt) - p), ".") = 0 Then Exit Do
    Loop
  End If
  Split500 = Split(txt, Chr(9))
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, теперь работает без проблем, но а если у меня не только текст в А1...если это столбик с текстами и если я жму F2, Ctrl+Shift+Enter, тогда все копируетсе с ячейки А1...в общем как воспользоваться функцией не только по диапазону строки, но и столбцов?
 
функция заполняет 4 ячейки фрагментами?
отметьте эти 4 ячейки, за правый нижний уголок тяните вниз сколько есть данных
Изменено: Ігор Гончаренко - 11.04.2018 11:05:24
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
BRAVO!
 
Ігор Гончаренко,  последний вопрос, касаясь данной темы...а если мне необходимо максимальное количество знаков 255, то в этом случае можно просто в коде "500" заменить на "255"?
 
исправляем функцию до
Код
Function Split500(txt$, Optional Mx = 500)
  Dim s$, p&, c&, cnt&
  If Len(txt) - Len(Replace(txt, ".", "")) < 4 Then
    txt = Replace(txt, ".", "." & Chr(9))
  Else
    p = 1: c = Application.Min(Mx, Len(txt) / 3.3)
    Do While p < Len(txt)
      If InStr(Mid(txt, p, c - 1), ".") = 0 Then
        p = InStr(p, txt, ".")
      Else
        p = InStrRev(Left(txt, p + c - 1), ".")
      End If
      txt = Left(txt, p) & Chr(9) & Right(txt, Len(txt) - p): p = p + 1
      If InStr(Right(txt, Len(txt) - p), ".") = 0 Then Exit Do
    Loop
  End If
  Split500 = Split(txt, Chr(9))
End Function
функция становиться универсальнее и теперь можно дать 2-й параметр Мх - максимальная длина фрагмента
когда второй параметр не указан - максимальная длина фрагмента = 500.
Изменено: Ігор Гончаренко - 11.04.2018 12:10:11
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, вот пример...где вроде как не получается...есть ячейки, в которых текст составляет более 255 знаков
 
а там функции указан второй параметр?
Цитата
Ігор Гончаренко написал:
когда второй параметр не указан - максимальная длина фрагмента = 500.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
кроме того исходный текст длиной 2487 разделите его на 4 части не более 500 символов каждая
а тем более на 4 по 255
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
я вроде как указал
Код
Function Split500(txt$, Optional Mx = 255)
 
Цитата
Ігор Гончаренко написал:
кроме того исходный текст длиной 2487 разделите его на 4 части не более 500 символов каждаяа тем более на 4 по 255
а фнкция может брать в таком случае по 255 знаков, деля на 4 части независимо от того, сколько знаков составляет исходный текст...если исходный текстбольше 1000 знаков, значит в послдней четвертой части пускай показывает максимальное (до 255 знаков) количество знаков, а остальное игнорирует
Изменено: shlika - 11.04.2018 13:46:53
 
а что делать с этим предложением:
Der einzigartige Stil des Gehäuses geht Hand in Hand mit der exakten Ausführung, die eine sehr gute Haftung auf dem Telefon garantiert, und die abwechslungsreiche Oberfläche verleiht nicht nur ein einzigartiges Aussehen, sondern beeinflusst auch die hervorragende Griffigkeit des Geräts in der Hand.
в котором 300 символов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
извините, ответ мне не важен, я на этом покину тему
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
я понял! принцип разделения  же до "точки"!
Страницы: 1
Наверх