Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перенос целых слова по условия ДЛСТР включая все предлоги - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Перенос целых слова по условия ДЛСТР включая все предлоги
AdwordsDirect Дата: Вторник, 30.01.2018, 16:34 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, такая проблема..
Как переносить части ячеек по количеству символов в них с предлогами.
Объясню, сейчас я использую 2 формулы для разбивки ячеек столбца А на 2 части с переносом только по целым словам.
1. До 35 символов
Код
=ПСТР(A1;1;ПРОСМОТР(35;ПОИСК(" ";A1&" ";СТРОКА($1:$35))))

2. Все оставшееся содержимое
Код
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A1;B1;""))


И мне надо сейчас сделать как-то чтоб не только перенос был по целым словам, но и включая предлоги всевозможные.
То есть, если остаётся последними символами в столбце В предлог, то надо чтоб он тоже переместился в столбец С.
Кто-нибудь знает как это сделать? Буду благодарен.
К сообщению приложен файл: 4302996.xlsx (11.5 Kb)


Сообщение отредактировал AdwordsDirect - Вторник, 30.01.2018, 17:05
 
Ответить
СообщениеЗдравствуйте, такая проблема..
Как переносить части ячеек по количеству символов в них с предлогами.
Объясню, сейчас я использую 2 формулы для разбивки ячеек столбца А на 2 части с переносом только по целым словам.
1. До 35 символов
Код
=ПСТР(A1;1;ПРОСМОТР(35;ПОИСК(" ";A1&" ";СТРОКА($1:$35))))

2. Все оставшееся содержимое
Код
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A1;B1;""))


И мне надо сейчас сделать как-то чтоб не только перенос был по целым словам, но и включая предлоги всевозможные.
То есть, если остаётся последними символами в столбце В предлог, то надо чтоб он тоже переместился в столбец С.
Кто-нибудь знает как это сделать? Буду благодарен.

Автор - AdwordsDirect
Дата добавления - 30.01.2018 в 16:34
abtextime Дата: Вторник, 30.01.2018, 17:31 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация: 117 ±
Замечаний: 0% ±

Excel 2010
Нужно определение предлога тогда

Варианты:

1. слово не более чем из N букв
2. закрытый перечень предлогов

Вам как?
 
Ответить
СообщениеНужно определение предлога тогда

Варианты:

1. слово не более чем из N букв
2. закрытый перечень предлогов

Вам как?

Автор - abtextime
Дата добавления - 30.01.2018 в 17:31
Che79 Дата: Вторник, 30.01.2018, 17:36 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1649
Репутация: 306 ±
Замечаний: 0% ±

2013 Win, 365 Mac
[offtop]Слово «соответственно» является самым длинным предлогом и союзом одновременно. Оно состоит из 14 букв. Самая длинная частица - «исключительно» - на букву короче. :)


Делай нормально и будет нормально!
 
Ответить
Сообщение[offtop]Слово «соответственно» является самым длинным предлогом и союзом одновременно. Оно состоит из 14 букв. Самая длинная частица - «исключительно» - на букву короче. :)

Автор - Che79
Дата добавления - 30.01.2018 в 17:36
bmv98rus Дата: Вторник, 30.01.2018, 19:34 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
AdwordsDirect, Может надо от печки плясать? Конечная цель какова?

P.S. X лет назад в чеках Дикси названия продуктов сократили , как могли. Читаю однажды и думаю, что это я такое купил с названием сыроглазрыж и батонаребада. Оказались Сырок глазированный Рыжий ап и батон нарезной Бадаевский.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеAdwordsDirect, Может надо от печки плясать? Конечная цель какова?

P.S. X лет назад в чеках Дикси названия продуктов сократили , как могли. Читаю однажды и думаю, что это я такое купил с названием сыроглазрыж и батонаребада. Оказались Сырок глазированный Рыжий ап и батон нарезной Бадаевский.

Автор - bmv98rus
Дата добавления - 30.01.2018 в 19:34
AdwordsDirect Дата: Вторник, 30.01.2018, 22:03 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
А нет ли возможно в этой формуле/скрипте перечислить ряд предлогов которые необходимо перенести?
Тогда может сделать просто перенос самих предлогов без условия ДЛСТР, как бы отдельной функцией, условно говоря, в случае если столбец А заканчивается на ("на" "из" "из-за" "и" "в" "к" "до" "от" "за") и прочее, то эти сами перечисленные предлоги уходят благополучно в столбец В в соответствующую строчку перед содержимым определенной ячейки добавляя перед собою пробел.

Или это я уже размечтался тут.. :)
Конечная цель - автоматизация рутинных забот.

P.S. X лет назад в чеках Дикси названия продуктов сократили , как могли. Читаю однажды и думаю, что это я такое купил с названием сыроглазрыж и батонаребада. Оказались Сырок глазированный Рыжий ап и батон нарезной Бадаевский.

Смешно :)
 
Ответить
СообщениеА нет ли возможно в этой формуле/скрипте перечислить ряд предлогов которые необходимо перенести?
Тогда может сделать просто перенос самих предлогов без условия ДЛСТР, как бы отдельной функцией, условно говоря, в случае если столбец А заканчивается на ("на" "из" "из-за" "и" "в" "к" "до" "от" "за") и прочее, то эти сами перечисленные предлоги уходят благополучно в столбец В в соответствующую строчку перед содержимым определенной ячейки добавляя перед собою пробел.

Или это я уже размечтался тут.. :)
Конечная цель - автоматизация рутинных забот.

P.S. X лет назад в чеках Дикси названия продуктов сократили , как могли. Читаю однажды и думаю, что это я такое купил с названием сыроглазрыж и батонаребада. Оказались Сырок глазированный Рыжий ап и батон нарезной Бадаевский.

Смешно :)

Автор - AdwordsDirect
Дата добавления - 30.01.2018 в 22:03
abtextime Дата: Среда, 31.01.2018, 00:08 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация: 117 ±
Замечаний: 0% ±

Excel 2010
Под рукой нет Excel, так что проверить не могу, пишу как придется )

Алгоритм простой:
Определяем последнее слово до переноса и проверяем, не предлог ли оно
Если предлог, то переносим тоже.

[vba]
Код
Sub Perenos()

for i = 1 to Selection.Rows.Count

S = RTrim(Left(Selection.Cells(i,1).Value,35))
SFull = Selection.Cells(i,1).Value

BlankCounter = 0

if Mid(SFull,36,1) <> " " and Len(S) = 35 tnen SplitWord = True else SplitWord = False

LastWord = Right(S,1)

for j = Len(S)-1 to 1 step -1

  if Mid(S, j, 1) = " "
    then
       if Mid(S, j+1,1)<>" " then  BlankCounter = BlankCounter + 1
       if BlankCounter = 1 and SplitWord then LastWord = ""
       if BlankCounter = 1 and not SplitWord or BlankCounter = 2
         then
           LastWordPosition = j+1
           Exit for
       End if
     else
       LastWord = Mid(S,j,1) & LastWord
  End if

Next j

if LastWord = "от" or LastWord = "на" or LastWord = "ещекакойнибудьпредлог"  
  then
    Selection.Cells(i,2).Value = Left(SFull, LastWordPosition-1)
    Selection.Cells(i,3).Value = Right(SFull, Len(SFull) -  LastWordPosition+1)
  else
    Selection.Cells(i,2).Value = Left(SFull, LastWordPosition + Len(LastWord))
    Selection.Cells(i,3).Value = Right(SFull, Len(SFull) -  LastWordPosition - Len(LastWord)+1)
end if

Next i

End Sub
[/vba]

Могу завтра на работе проверить. Впрочем, мысль понятна, и добить макрос можно уже и не обладая знаниями VBA

Очень давно не писал на VBA, посему прошу прощения за крайнюю корявость. Понятно, что можно Split использовать, но не хотелось с массивом возиться


Сообщение отредактировал abtextime - Среда, 31.01.2018, 01:51
 
Ответить
СообщениеПод рукой нет Excel, так что проверить не могу, пишу как придется )

Алгоритм простой:
Определяем последнее слово до переноса и проверяем, не предлог ли оно
Если предлог, то переносим тоже.

[vba]
Код
Sub Perenos()

for i = 1 to Selection.Rows.Count

S = RTrim(Left(Selection.Cells(i,1).Value,35))
SFull = Selection.Cells(i,1).Value

BlankCounter = 0

if Mid(SFull,36,1) <> " " and Len(S) = 35 tnen SplitWord = True else SplitWord = False

LastWord = Right(S,1)

for j = Len(S)-1 to 1 step -1

  if Mid(S, j, 1) = " "
    then
       if Mid(S, j+1,1)<>" " then  BlankCounter = BlankCounter + 1
       if BlankCounter = 1 and SplitWord then LastWord = ""
       if BlankCounter = 1 and not SplitWord or BlankCounter = 2
         then
           LastWordPosition = j+1
           Exit for
       End if
     else
       LastWord = Mid(S,j,1) & LastWord
  End if

Next j

if LastWord = "от" or LastWord = "на" or LastWord = "ещекакойнибудьпредлог"  
  then
    Selection.Cells(i,2).Value = Left(SFull, LastWordPosition-1)
    Selection.Cells(i,3).Value = Right(SFull, Len(SFull) -  LastWordPosition+1)
  else
    Selection.Cells(i,2).Value = Left(SFull, LastWordPosition + Len(LastWord))
    Selection.Cells(i,3).Value = Right(SFull, Len(SFull) -  LastWordPosition - Len(LastWord)+1)
end if

Next i

End Sub
[/vba]

Могу завтра на работе проверить. Впрочем, мысль понятна, и добить макрос можно уже и не обладая знаниями VBA

Очень давно не писал на VBA, посему прошу прощения за крайнюю корявость. Понятно, что можно Split использовать, но не хотелось с массивом возиться

Автор - abtextime
Дата добавления - 31.01.2018 в 00:08
AdwordsDirect Дата: Среда, 31.01.2018, 09:48 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Короче говоря ошибки в коде.
Ошибка в коде


Сообщение отредактировал AdwordsDirect - Среда, 31.01.2018, 09:49
 
Ответить
СообщениеКороче говоря ошибки в коде.
Ошибка в коде

Автор - AdwordsDirect
Дата добавления - 31.01.2018 в 09:48
bmv98rus Дата: Среда, 31.01.2018, 09:59 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата AdwordsDirect, 31.01.2018 в 09:48, в сообщении № 7 ()
ошибки в коде.

НУ
Под рукой нет Excel, так что проверить не могу, пишу как придется )

К опечатке добавился перенос строк при вставке
не проверял работу просто подправил 4 СТРОКИ


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Цитата AdwordsDirect, 31.01.2018 в 09:48, в сообщении № 7 ()
ошибки в коде.

НУ
Под рукой нет Excel, так что проверить не могу, пишу как придется )

К опечатке добавился перенос строк при вставке
не проверял работу просто подправил 4 СТРОКИ

Автор - bmv98rus
Дата добавления - 31.01.2018 в 09:59
Karataev Дата: Среда, 31.01.2018, 10:09 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 1336
Репутация: 533 ±
Замечаний: 0% ±

Excel
В формуле используются имена (вкладка "Формулы" - Диспетчер имен), чтобы формула не была громоздкой.
Я сделал лист "Доплист", на него записывайте предлоги.
PS. Могу конечно ошибаться, но мне кажется, что Excel не был создан для таких задач. Хотя бы потому, что редактор формул в Excel "никакой" для больших формул. Чтобы писать большие формулы, нужно делать отступы, расстояния между строками формулы, как в VBA, чтобы можно было читать и писать формулы.
К сообщению приложен файл: 4302996_kar.xlsx (15.6 Kb)
 
Ответить
СообщениеВ формуле используются имена (вкладка "Формулы" - Диспетчер имен), чтобы формула не была громоздкой.
Я сделал лист "Доплист", на него записывайте предлоги.
PS. Могу конечно ошибаться, но мне кажется, что Excel не был создан для таких задач. Хотя бы потому, что редактор формул в Excel "никакой" для больших формул. Чтобы писать большие формулы, нужно делать отступы, расстояния между строками формулы, как в VBA, чтобы можно было читать и писать формулы.

Автор - Karataev
Дата добавления - 31.01.2018 в 10:09
abtextime Дата: Среда, 31.01.2018, 11:07 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация: 117 ±
Замечаний: 0% ±

Excel 2010
AdwordsDirect, уж не знаю, правильно или нет, но макрос работает, смотрите прикрепленный файл

Прикрепите к сообщению свой файл, в котором макрос дает ошибки.

P.S. Надеюсь, Вы поняли, как работает макрос - надо предварительно выделить Селекшеном часть столбца A
К сообщению приложен файл: 4302996-1-.xlsm (11.8 Kb)


Сообщение отредактировал abtextime - Среда, 31.01.2018, 11:09
 
Ответить
СообщениеAdwordsDirect, уж не знаю, правильно или нет, но макрос работает, смотрите прикрепленный файл

Прикрепите к сообщению свой файл, в котором макрос дает ошибки.

P.S. Надеюсь, Вы поняли, как работает макрос - надо предварительно выделить Селекшеном часть столбца A

Автор - abtextime
Дата добавления - 31.01.2018 в 11:07
AdwordsDirect Дата: Среда, 31.01.2018, 12:59 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Дата: Среда, 31.01.2018, 09:59 | Сообщение № 8
К опечатке добавился перенос строк при вставке
не проверял работу просто подправил 4 СТРОКИ

Этот вариант сработал. Благодарю за помощь.

Вскрылись некоторые ещё моменты: теперь если остаётся предлог - он переносится, а как сделать чтоб, если оставался в *предлог* и *цифры*, то чтоб они тоже переносились.
Проще говоря, чтоб фразовая конструкция *предлог*+*цифры*+*руб./р./грн.* оставался неразрывным и был вместе на какой-то ячейке.

Неудобно конечно уже просить, но что делать.. :)
Файл всё тот же.
Благодарю!!! Лайки ставлю


Сообщение отредактировал AdwordsDirect - Среда, 31.01.2018, 13:00
 
Ответить
Сообщение
Дата: Среда, 31.01.2018, 09:59 | Сообщение № 8
К опечатке добавился перенос строк при вставке
не проверял работу просто подправил 4 СТРОКИ

Этот вариант сработал. Благодарю за помощь.

Вскрылись некоторые ещё моменты: теперь если остаётся предлог - он переносится, а как сделать чтоб, если оставался в *предлог* и *цифры*, то чтоб они тоже переносились.
Проще говоря, чтоб фразовая конструкция *предлог*+*цифры*+*руб./р./грн.* оставался неразрывным и был вместе на какой-то ячейке.

Неудобно конечно уже просить, но что делать.. :)
Файл всё тот же.
Благодарю!!! Лайки ставлю

Автор - AdwordsDirect
Дата добавления - 31.01.2018 в 12:59
abtextime Дата: Среда, 31.01.2018, 14:10 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация: 117 ±
Замечаний: 0% ±

Excel 2010
Попробуем тогда так
[vba]
Код

Sub Perenos()
For i = 1 To Selection.Rows.Count
SFull = Replace(Selection.Cells(i, 1).Value, " р.", "~р.")
SFull = Replace(SFull, " руб.", "~руб.")
SFull = Replace(SFull, " грн.", "~грн.")
For j = 1 To Len(SFull)
  If Mid(SFull, j, 1) = " " And Mid(SFull, j + 1, 1) Like "[0-9]" Then SFull = Left(SFull, j - 1) & "~" & Right(SFull, Len(SFull) - j)
Next j
S = RTrim(Left(SFull, 35))
BlankCounter = 0
If Mid(SFull, 36, 1) <> " " And Len(S) = 35 Then SplitWord = True Else SplitWord = False
LastWord = Right(S, 1)
For j = Len(S) - 1 To 1 Step -1
If Mid(S, j, 1) = " " Then
    If Mid(S, j + 1, 1) <> " " Then BlankCounter = BlankCounter + 1
    If BlankCounter = 1 And SplitWord Then LastWord = ""
    If BlankCounter = 1 And Not SplitWord Or BlankCounter = 2 Then
        LastWordPosition = j + 1
        Exit For
    End If
    Else
    LastWord = Mid(S, j, 1) & LastWord
End If
Next j
SFull = Replace(SFull, "~", " ")
If LastWord = "от" Or LastWord = "на" Or LastWord = "ещекакойнибудьпредлог" Then
    Selection.Cells(i, 2).Value = Left(SFull, LastWordPosition - 1)
    Selection.Cells(i, 3).Value = Right(SFull, Len(SFull) - LastWordPosition + 1)
Else
    Selection.Cells(i, 2).Value = Left(SFull, LastWordPosition + Len(LastWord))
    Selection.Cells(i, 3).Value = Right(SFull, Len(SFull) - LastWordPosition - Len(LastWord) + 1)
End If
Next i
End Sub

[/vba]
К сообщению приложен файл: 8893204.xlsm (20.3 Kb)


Сообщение отредактировал abtextime - Среда, 31.01.2018, 14:11
 
Ответить
СообщениеПопробуем тогда так
[vba]
Код

Sub Perenos()
For i = 1 To Selection.Rows.Count
SFull = Replace(Selection.Cells(i, 1).Value, " р.", "~р.")
SFull = Replace(SFull, " руб.", "~руб.")
SFull = Replace(SFull, " грн.", "~грн.")
For j = 1 To Len(SFull)
  If Mid(SFull, j, 1) = " " And Mid(SFull, j + 1, 1) Like "[0-9]" Then SFull = Left(SFull, j - 1) & "~" & Right(SFull, Len(SFull) - j)
Next j
S = RTrim(Left(SFull, 35))
BlankCounter = 0
If Mid(SFull, 36, 1) <> " " And Len(S) = 35 Then SplitWord = True Else SplitWord = False
LastWord = Right(S, 1)
For j = Len(S) - 1 To 1 Step -1
If Mid(S, j, 1) = " " Then
    If Mid(S, j + 1, 1) <> " " Then BlankCounter = BlankCounter + 1
    If BlankCounter = 1 And SplitWord Then LastWord = ""
    If BlankCounter = 1 And Not SplitWord Or BlankCounter = 2 Then
        LastWordPosition = j + 1
        Exit For
    End If
    Else
    LastWord = Mid(S, j, 1) & LastWord
End If
Next j
SFull = Replace(SFull, "~", " ")
If LastWord = "от" Or LastWord = "на" Or LastWord = "ещекакойнибудьпредлог" Then
    Selection.Cells(i, 2).Value = Left(SFull, LastWordPosition - 1)
    Selection.Cells(i, 3).Value = Right(SFull, Len(SFull) - LastWordPosition + 1)
Else
    Selection.Cells(i, 2).Value = Left(SFull, LastWordPosition + Len(LastWord))
    Selection.Cells(i, 3).Value = Right(SFull, Len(SFull) - LastWordPosition - Len(LastWord) + 1)
End If
Next i
End Sub

[/vba]

Автор - abtextime
Дата добавления - 31.01.2018 в 14:10
AdwordsDirect Дата: Четверг, 01.02.2018, 09:29 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Попробуем тогда так

Вроде всё работает. Глазам не верю, до слёз. Спасибо.
 
Ответить
Сообщение
Попробуем тогда так

Вроде всё работает. Глазам не верю, до слёз. Спасибо.

Автор - AdwordsDirect
Дата добавления - 01.02.2018 в 09:29
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!