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

Вход

Регистрация

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

 

= Мир MS Excel/разбить фразу из ячейки по столбцам макросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
разбить фразу из ячейки по столбцам макросом
grh1 Дата: Четверг, 31.10.2024, 19:46 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Добрый день уважаемые!

В прикрепленном файле есть три листа и один макрос.
1-й лист - "так есть"
2-й лист - "так переносит макрос"
3-й лист - "так нужно"

В листе ТАК ЕСТЬ - исходный текст в ячейках столбца А начиная с А2 и до бесконечности;
Нажав на выполнение макроса получим такой вид как на листе ТАК ПЕРЕНОСИТ МАКРОС - этот вид не устраивает.
Что исправить в макросе, чтобы при его срабатывании перенос был бы как на листе ТАК НУЖНО.

Спасибо
К сообщению приложен файл: makros_01.xlsm (17.8 Kb)


Vadym Gorokh
 
Ответить
СообщениеДобрый день уважаемые!

В прикрепленном файле есть три листа и один макрос.
1-й лист - "так есть"
2-й лист - "так переносит макрос"
3-й лист - "так нужно"

В листе ТАК ЕСТЬ - исходный текст в ячейках столбца А начиная с А2 и до бесконечности;
Нажав на выполнение макроса получим такой вид как на листе ТАК ПЕРЕНОСИТ МАКРОС - этот вид не устраивает.
Что исправить в макросе, чтобы при его срабатывании перенос был бы как на листе ТАК НУЖНО.

Спасибо

Автор - grh1
Дата добавления - 31.10.2024 в 19:46
Hugo Дата: Четверг, 31.10.2024, 21:31 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Добрый.
Выделить эти 3 ячейки, выполнить
[vba]
Код

Sub tt()
Dim c, s$
For Each c In Selection.Cells
s = c.Value
s = Replace(s, Chr(160), " ")
s = Trim(Split(s, ".")(1))
ReDim out(1 To 3)
arr = Split(s, "—")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
Next
End Sub
[/vba]
Там пробелы разные встречаются...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДобрый.
Выделить эти 3 ячейки, выполнить
[vba]
Код

Sub tt()
Dim c, s$
For Each c In Selection.Cells
s = c.Value
s = Replace(s, Chr(160), " ")
s = Trim(Split(s, ".")(1))
ReDim out(1 To 3)
arr = Split(s, "—")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
Next
End Sub
[/vba]
Там пробелы разные встречаются...

Автор - Hugo
Дата добавления - 31.10.2024 в 21:31
grh1 Дата: Четверг, 31.10.2024, 22:01 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, добрый вечер. вылетает ошибка

дело в том, что когда выделяю ТРИ строки и выполняю макрос, то всё работает, но у меня не три строки, а 5000 строк… Поэтому я выделил весь столбец и получил ошибку.


Vadym Gorokh

Сообщение отредактировал grh1 - Пятница, 01.11.2024, 00:14
 
Ответить
СообщениеHugo, добрый вечер. вылетает ошибка

дело в том, что когда выделяю ТРИ строки и выполняю макрос, то всё работает, но у меня не три строки, а 5000 строк… Поэтому я выделил весь столбец и получил ошибку.

Автор - grh1
Дата добавления - 31.10.2024 в 22:01
Hugo Дата: Четверг, 31.10.2024, 22:21 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
grh1, это значит что пример не соответствует файлу.
Дорабатывайте код - пусть сперва поищет точку, и если не найдёт - значит такую строку не нужно обрабатывать.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Четверг, 31.10.2024, 22:22
 
Ответить
Сообщениеgrh1, это значит что пример не соответствует файлу.
Дорабатывайте код - пусть сперва поищет точку, и если не найдёт - значит такую строку не нужно обрабатывать.

Автор - Hugo
Дата добавления - 31.10.2024 в 22:21
grh1 Дата: Четверг, 31.10.2024, 22:27 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Дорабатывайте код

Если бы мог доработать, обязательно доработал бы. Для знатоков это одна-две строки, а для меня пару-тройку дней и не факт, что решу данную задачу.


Vadym Gorokh
 
Ответить
Сообщение
Дорабатывайте код

Если бы мог доработать, обязательно доработал бы. Для знатоков это одна-две строки, а для меня пару-тройку дней и не факт, что решу данную задачу.

Автор - grh1
Дата добавления - 31.10.2024 в 22:27
Hugo Дата: Четверг, 31.10.2024, 22:34 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
grh1, ОК, так можно выделить целиком столбец.
Главное чтоб там не было "левых" ячеек с точками.
[vba]
Код

Sub tt()
Dim r, c, s$

Set r = Intersect(Selection.Parent.UsedRange, Selection)
For Each c In r.Cells
s = c.Value
If InStr(s, ".") Then
s = Replace(s, Chr(160), " ")
s = Trim(Split(s, ".")(1))
ReDim out(1 To 3)
arr = Split(s, "—")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
End If
Next
End Sub
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщениеgrh1, ОК, так можно выделить целиком столбец.
Главное чтоб там не было "левых" ячеек с точками.
[vba]
Код

Sub tt()
Dim r, c, s$

Set r = Intersect(Selection.Parent.UsedRange, Selection)
For Each c In r.Cells
s = c.Value
If InStr(s, ".") Then
s = Replace(s, Chr(160), " ")
s = Trim(Split(s, ".")(1))
ReDim out(1 To 3)
arr = Split(s, "—")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
End If
Next
End Sub
[/vba]

Автор - Hugo
Дата добавления - 31.10.2024 в 22:34
grh1 Дата: Четверг, 31.10.2024, 22:43 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, всё работает - спасибо большое


Vadym Gorokh
 
Ответить
СообщениеHugo, всё работает - спасибо большое

Автор - grh1
Дата добавления - 31.10.2024 в 22:43
grh1 Дата: Четверг, 31.10.2024, 23:13 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, извините пожалуйста, но не сочтите за наглость - если всё тоже самое, только впереди не будет ни порядкового номера ни точки:

die Welt - мир (планета)
die Seele - душа
Leben - жизнь
das Wissen - знание

как тогда будет выглядеть код?
P.S. Будут попадаться также слова без артикля (Leben - жизнь).

Спасибо


Vadym Gorokh

Сообщение отредактировал grh1 - Четверг, 31.10.2024, 23:13
 
Ответить
СообщениеHugo, извините пожалуйста, но не сочтите за наглость - если всё тоже самое, только впереди не будет ни порядкового номера ни точки:

die Welt - мир (планета)
die Seele - душа
Leben - жизнь
das Wissen - знание

как тогда будет выглядеть код?
P.S. Будут попадаться также слова без артикля (Leben - жизнь).

Спасибо

Автор - grh1
Дата добавления - 31.10.2024 в 23:13
Hugo Дата: Четверг, 31.10.2024, 23:49 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Ну точка нужна только для того чтоб её отрезать. Вместе с числом, тут:
[vba]
Код
s = Trim(Split(s, ".")(1))
[/vba]
Если эту строку выкинуть, то будет работать с строками без чисел с точкой.
Но! первый вариант кода, во втором ведь дорабатывал что по этой точке определяем нужные строки.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНу точка нужна только для того чтоб её отрезать. Вместе с числом, тут:
[vba]
Код
s = Trim(Split(s, ".")(1))
[/vba]
Если эту строку выкинуть, то будет работать с строками без чисел с точкой.
Но! первый вариант кода, во втором ведь дорабатывал что по этой точке определяем нужные строки.

Автор - Hugo
Дата добавления - 31.10.2024 в 23:49
grh1 Дата: Четверг, 31.10.2024, 23:52 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Но! первый вариант кода

То есть в ПЕРВОМ вашем коде убрать эту строку? Правильно я понял? А как же тогда выделение всего столбца?


Vadym Gorokh
 
Ответить
Сообщение
Но! первый вариант кода

То есть в ПЕРВОМ вашем коде убрать эту строку? Правильно я понял? А как же тогда выделение всего столбца?

Автор - grh1
Дата добавления - 31.10.2024 в 23:52
grh1 Дата: Пятница, 01.11.2024, 00:04 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, к сожалению пока ни первый код ни второй без этой строки не хочет работать.
К сообщению приложен файл: dlja_slov_hugo.xlsm (22.0 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Пятница, 01.11.2024, 00:08
 
Ответить
СообщениеHugo, к сожалению пока ни первый код ни второй без этой строки не хочет работать.

Автор - grh1
Дата добавления - 01.11.2024 в 00:04
Hugo Дата: Пятница, 01.11.2024, 00:06 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Во втором убрать эту строку, и проверку на точку.
Пробуйте, так и научитесь.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВо втором убрать эту строку, и проверку на точку.
Пробуйте, так и научитесь.

Автор - Hugo
Дата добавления - 01.11.2024 в 00:06
grh1 Дата: Пятница, 01.11.2024, 00:19 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, убрал такие строки:

- строку с if
- строку End If
- строку, которую Вы сказали и получил ошибку


Vadym Gorokh
 
Ответить
СообщениеHugo, убрал такие строки:

- строку с if
- строку End If
- строку, которую Вы сказали и получил ошибку

Автор - grh1
Дата добавления - 01.11.2024 в 00:19
Hugo Дата: Пятница, 01.11.2024, 00:24 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Это значит что в этой строке (где ошибка) нет этого дефиса, значит нужно вернуть назад проверку точки, но заменить точку на дефис.
Можно вообще отключить реакцию на ошибки, но я так делаю в крайнем случае.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЭто значит что в этой строке (где ошибка) нет этого дефиса, значит нужно вернуть назад проверку точки, но заменить точку на дефис.
Можно вообще отключить реакцию на ошибки, но я так делаю в крайнем случае.

Автор - Hugo
Дата добавления - 01.11.2024 в 00:24
grh1 Дата: Пятница, 01.11.2024, 00:32 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo,

1. вернул назад строки с if, заменив точку на тире - ошибка таже;
2. опять убрал строки с if, а в строке, которую Вы сказали убрать - заменил точку на тире - ошибка выделила эту строку.

Что делаю не так?


Vadym Gorokh

Сообщение отредактировал grh1 - Пятница, 01.11.2024, 00:32
 
Ответить
СообщениеHugo,

1. вернул назад строки с if, заменив точку на тире - ошибка таже;
2. опять убрал строки с if, а в строке, которую Вы сказали убрать - заменил точку на тире - ошибка выделила эту строку.

Что делаю не так?

Автор - grh1
Дата добавления - 01.11.2024 в 00:32
Hugo Дата: Пятница, 01.11.2024, 00:35 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
А тире откуда брали?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеА тире откуда брали?

Автор - Hugo
Дата добавления - 01.11.2024 в 00:35
grh1 Дата: Пятница, 01.11.2024, 00:37 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
А тире откуда брали?

тире взял с клавиатуры, так как там УЖЕ не длинное тире, а обычное.
К сообщению приложен файл: dlja_slov_hugo_tren.xlsm (22.3 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Пятница, 01.11.2024, 00:45
 
Ответить
Сообщение
А тире откуда брали?

тире взял с клавиатуры, так как там УЖЕ не длинное тире, а обычное.

Автор - grh1
Дата добавления - 01.11.2024 в 00:37
Hugo Дата: Пятница, 01.11.2024, 00:57 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Тире в коде заменил на тире из ячейки, ну и убрал лишнюю строку (закомментировал).
И вернул проверку, только на тире.
Всё.

[vba]
Код

Sub tt()
Dim r, c, s$

Set r = Intersect(Selection.Parent.UsedRange, Selection)
For Each c In r.Cells
s = c.Value
If InStr(s, "-") Then
s = Replace(s, Chr(160), " ")
's = Trim(Split(s, "-")(1))
ReDim out(1 To 3)
arr = Split(s, "-")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
End If
Next
End Sub

[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеТире в коде заменил на тире из ячейки, ну и убрал лишнюю строку (закомментировал).
И вернул проверку, только на тире.
Всё.

[vba]
Код

Sub tt()
Dim r, c, s$

Set r = Intersect(Selection.Parent.UsedRange, Selection)
For Each c In r.Cells
s = c.Value
If InStr(s, "-") Then
s = Replace(s, Chr(160), " ")
's = Trim(Split(s, "-")(1))
ReDim out(1 To 3)
arr = Split(s, "-")
out(3) = Trim(arr(1))
Select Case True
    Case Left(s, 4) = "die " Or Left(s, 4) = "der " Or Left(s, 4) = "das "
        out(1) = Left(s, 3)
        out(2) = Mid(arr(0), 5)
    Case Else
        out(2) = Trim(arr(0))
End Select
c.Next.Resize(, 3) = out
End If
Next
End Sub

[/vba]

Автор - Hugo
Дата добавления - 01.11.2024 в 00:57
grh1 Дата: Пятница, 01.11.2024, 01:00 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Hugo, какие незначительные, но важные вещи необходимо знать.
Я бы эту задачу не решил бы никогда.

Спасибо большое - всё супер.

Спокойной ночи.


Vadym Gorokh
 
Ответить
СообщениеHugo, какие незначительные, но важные вещи необходимо знать.
Я бы эту задачу не решил бы никогда.

Спасибо большое - всё супер.

Спокойной ночи.

Автор - grh1
Дата добавления - 01.11.2024 в 01:00
Hugo Дата: Пятница, 01.11.2024, 01:08 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Если там будут встречаться разные эти тире - заменяйте их все на один, как в коде я это сделал с пробелами в строке
s = Replace(s, Chr(160), " ")
вот ниже или выше добавьте в код такую строку с заменой того тире на котором получите ошибку на то, с которым всё ОК.

Спокойной ночи. ))


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Пятница, 01.11.2024, 01:12
 
Ответить
СообщениеЕсли там будут встречаться разные эти тире - заменяйте их все на один, как в коде я это сделал с пробелами в строке
s = Replace(s, Chr(160), " ")
вот ниже или выше добавьте в код такую строку с заменой того тире на котором получите ошибку на то, с которым всё ОК.

Спокойной ночи. ))

Автор - Hugo
Дата добавления - 01.11.2024 в 01:08
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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