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

Вход

Регистрация

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

 

= Мир MS Excel/Разделение текста на части и перенос в другие ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разделение текста на части и перенос в другие ячейки (Макросы/Sub)
Разделение текста на части и перенос в другие ячейки
giovanni Дата: Вторник, 17.05.2016, 11:16 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Здравствуйте!
Возможно, для знатоков VBA данный вопрос будет выглядеть довольно просто и забавно, но для малоопытного пользователя VBA - вопрос видится очень сложным :)

Ситуация примерно такова: в экселе есть ячейка, в которой записан образно такого вида текст: А.10,Бв.25
В основном, тескт записан в таком виде. Однако, могут встречать ячейки, в который текст имеет такой вид: 10,Бв25 (то есть, без первой буквы). Буквы Бв.25 (цифры всегда разные, 25 - выбрана в качестве примера), присутствуют в ячейке всегда.
Подскажите, пожалуйста, возможно ли макросом разделить данный текст так, чтобы удалялись буквы "А." и "Бв.", а цифры, следующие за буквами, переносились в разные указанные ячейки, то есть, удаляется буква "А.", цифра 10 переносится в одну ячейку, удаляется слово "Бв.", а 25 переносится в другую ячейку?

Все, что пришло на ум - это проверять ячейку справа налево на наличие слова Бв., если слово в ячейке есть, то удалять его, а все, что правее от "Бв.", переносить в соседнюю ячейку. После этой процедуры опять проверять ячейку на наличие буквы "А." и есть такая буква есть, то удалить ее и все, что правее от нее, переносить в другую соседнюю ячейку.
Наверняка это далеко не самое оптимальное решение)
Если не сложно, помогите, пожалуйста, в решении данной задачи.

Спасибо!
[moder]Покажите файл. И приведите несколько примеров, как может выглядеть исходный текст.[/moder]

Исходный текст может быть соедующего вида:
А.5,Бв.12
А.108,Бв.3
А.218,Бв.140
Если есть слово "Бв.", то в ячейке точно за этим словом следует число. Чисто может быть от 1 до 999.


Сообщение отредактировал giovanni - Вторник, 17.05.2016, 12:40
 
Ответить
СообщениеЗдравствуйте!
Возможно, для знатоков VBA данный вопрос будет выглядеть довольно просто и забавно, но для малоопытного пользователя VBA - вопрос видится очень сложным :)

Ситуация примерно такова: в экселе есть ячейка, в которой записан образно такого вида текст: А.10,Бв.25
В основном, тескт записан в таком виде. Однако, могут встречать ячейки, в который текст имеет такой вид: 10,Бв25 (то есть, без первой буквы). Буквы Бв.25 (цифры всегда разные, 25 - выбрана в качестве примера), присутствуют в ячейке всегда.
Подскажите, пожалуйста, возможно ли макросом разделить данный текст так, чтобы удалялись буквы "А." и "Бв.", а цифры, следующие за буквами, переносились в разные указанные ячейки, то есть, удаляется буква "А.", цифра 10 переносится в одну ячейку, удаляется слово "Бв.", а 25 переносится в другую ячейку?

Все, что пришло на ум - это проверять ячейку справа налево на наличие слова Бв., если слово в ячейке есть, то удалять его, а все, что правее от "Бв.", переносить в соседнюю ячейку. После этой процедуры опять проверять ячейку на наличие буквы "А." и есть такая буква есть, то удалить ее и все, что правее от нее, переносить в другую соседнюю ячейку.
Наверняка это далеко не самое оптимальное решение)
Если не сложно, помогите, пожалуйста, в решении данной задачи.

Спасибо!
[moder]Покажите файл. И приведите несколько примеров, как может выглядеть исходный текст.[/moder]

Исходный текст может быть соедующего вида:
А.5,Бв.12
А.108,Бв.3
А.218,Бв.140
Если есть слово "Бв.", то в ячейке точно за этим словом следует число. Чисто может быть от 1 до 999.

Автор - giovanni
Дата добавления - 17.05.2016 в 11:16
китин Дата: Вторник, 17.05.2016, 11:36 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
а может формулами обойдемся? :D
Код
=ЕСЛИОШИБКА(ПСТР(A1;ПОИСК("А.";A1)+2;2);ЛЕВБ(A1;2))
К сообщению приложен файл: giovanni.xlsx (8.1 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениеа может формулами обойдемся? :D
Код
=ЕСЛИОШИБКА(ПСТР(A1;ПОИСК("А.";A1)+2;2);ЛЕВБ(A1;2))

Автор - китин
Дата добавления - 17.05.2016 в 11:36
giovanni Дата: Вторник, 17.05.2016, 12:46 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
а может формулами обойдемся?



Совсем неважно макрос или формула :-) Подскажите, возможно ли формулу внедрить в макрос? Т.к. указанная задача - это часть более крупного макроса.

В файлике все работает отлично :-) Но есть установить в ячейке более крупное чисто (не 10, а 100), то в итоге выдается ошибка(

Файла с примером как такового нет.
В принципе, задача только разделить указанный выше текст.

Извиняюсь за неправильное цитирование, не сорентировался)

[moder]Читайте Правила форума.
Запрещено: излишнее цитирование, несколько разных вопросов в одной теме. Необходим Ваш файл-пример, как уже было указано в комментарии модератора выше.
Исправляйте этот пост.[/moder]


Сообщение отредактировал giovanni - Вторник, 17.05.2016, 14:21
 
Ответить
Сообщение
а может формулами обойдемся?



Совсем неважно макрос или формула :-) Подскажите, возможно ли формулу внедрить в макрос? Т.к. указанная задача - это часть более крупного макроса.

В файлике все работает отлично :-) Но есть установить в ячейке более крупное чисто (не 10, а 100), то в итоге выдается ошибка(

Файла с примером как такового нет.
В принципе, задача только разделить указанный выше текст.

Извиняюсь за неправильное цитирование, не сорентировался)

[moder]Читайте Правила форума.
Запрещено: излишнее цитирование, несколько разных вопросов в одной теме. Необходим Ваш файл-пример, как уже было указано в комментарии модератора выше.
Исправляйте этот пост.[/moder]

Автор - giovanni
Дата добавления - 17.05.2016 в 12:46
китин Дата: Вторник, 17.05.2016, 12:54 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
в вашей сплошной цитате я не вижу вашего ответа.


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениев вашей сплошной цитате я не вижу вашего ответа.

Автор - китин
Дата добавления - 17.05.2016 в 12:54
sv2014 Дата: Вторник, 17.05.2016, 17:53 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
giovanni, добрый вечер,вариант функций uuu1 и uuu2

[vba]
Код
Function uuu1%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+"
    uuu1 = .Execute(t)(0)
End With
End Function
[/vba]

F[vba]
Код
unction uuu2%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
    uuu2 = .Execute(t)(1)
End With
End Function
[/vba]
К сообщению приложен файл: example_17_05_2.xls (29.0 Kb)
 
Ответить
Сообщениеgiovanni, добрый вечер,вариант функций uuu1 и uuu2

[vba]
Код
Function uuu1%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+"
    uuu1 = .Execute(t)(0)
End With
End Function
[/vba]

F[vba]
Код
unction uuu2%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
    uuu2 = .Execute(t)(1)
End With
End Function
[/vba]

Автор - sv2014
Дата добавления - 17.05.2016 в 17:53
sv2014 Дата: Вторник, 17.05.2016, 18:07 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
giovanni, добавил еще функции uuu3 и uuu4 в столбцах E и F соответственно

[vba]
Код
Function uuu3%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "(?:А\.)?(\d+)"
    uuu3 = .Execute(t)(0).Submatches(0)
End With
End Function
[/vba]

[vba]
Код
Function uuu4%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "Бв\.(\d+)"
    uuu4 = .Execute(t)(0).Submatches(0)
End With
End Function
[/vba]
К сообщению приложен файл: 8261232.xls (32.0 Kb)
 
Ответить
Сообщениеgiovanni, добавил еще функции uuu3 и uuu4 в столбцах E и F соответственно

[vba]
Код
Function uuu3%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "(?:А\.)?(\d+)"
    uuu3 = .Execute(t)(0).Submatches(0)
End With
End Function
[/vba]

[vba]
Код
Function uuu4%(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "Бв\.(\d+)"
    uuu4 = .Execute(t)(0).Submatches(0)
End With
End Function
[/vba]

Автор - sv2014
Дата добавления - 17.05.2016 в 18:07
giovanni Дата: Среда, 18.05.2016, 00:18 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
giovanni, добавил еще функции uuu3 и uuu4 в столбцах E и F соответственно


Огромное спасибо! Работает отлично))
Уровень знаний в VBA не позволил ничего понять из указанного кода, но работает прекрасно!
Был бы очень признателен, если по возможности Вы бы расписали что означают различные значения
в коде функции, очень интересно понять)

Подскажите, пожалуйста, возможно ли внести некоторые изменения в код, чтобы происходило следующее:
в ячейке, перед указанным ранее в примере текстом А.5,Бв.12, практически всегда будет присутствовать текст - одно-два слова
(например, Абвгдежз А.5,Бв.12)
Возможно ли сделать так, чтобы, как в Вашем примере, цифры 5 и 12 переносились в отдельные ячейки, данные цифры удалялись бы из исходной ячейки
и слово Абвгдежз также удалялось из исходной ячейки и переносилось в еще одну отдельную ячейку.
Если сказать на примере, то примерно так: в исходной ячейке текст "Абвгдежз А.5,Бв.12", а после исполнения макроса - "Абвгдежз" в отдельной ячейке, цифра "5" в отдельной ячейке и цифра "12" также в отдельной ячейке.

Спасибо за помощь еще раз!)
[moder]Вот, как мы все с нетерпением и ожидали, начинается комедия "А у меня в файле всё не так". Вам уже 2 раза сказали про файл с вариантами заполнения. Что не понятно?


Сообщение отредактировал _Boroda_ - Среда, 18.05.2016, 10:18
 
Ответить
Сообщение
giovanni, добавил еще функции uuu3 и uuu4 в столбцах E и F соответственно


Огромное спасибо! Работает отлично))
Уровень знаний в VBA не позволил ничего понять из указанного кода, но работает прекрасно!
Был бы очень признателен, если по возможности Вы бы расписали что означают различные значения
в коде функции, очень интересно понять)

Подскажите, пожалуйста, возможно ли внести некоторые изменения в код, чтобы происходило следующее:
в ячейке, перед указанным ранее в примере текстом А.5,Бв.12, практически всегда будет присутствовать текст - одно-два слова
(например, Абвгдежз А.5,Бв.12)
Возможно ли сделать так, чтобы, как в Вашем примере, цифры 5 и 12 переносились в отдельные ячейки, данные цифры удалялись бы из исходной ячейки
и слово Абвгдежз также удалялось из исходной ячейки и переносилось в еще одну отдельную ячейку.
Если сказать на примере, то примерно так: в исходной ячейке текст "Абвгдежз А.5,Бв.12", а после исполнения макроса - "Абвгдежз" в отдельной ячейке, цифра "5" в отдельной ячейке и цифра "12" также в отдельной ячейке.

Спасибо за помощь еще раз!)
[moder]Вот, как мы все с нетерпением и ожидали, начинается комедия "А у меня в файле всё не так". Вам уже 2 раза сказали про файл с вариантами заполнения. Что не понятно?

Автор - giovanni
Дата добавления - 18.05.2016 в 00:18
sv2014 Дата: Среда, 18.05.2016, 10:28 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
giovanni, добрый день,протестируйте макрос,кнопки test,повтор

[vba]
Код
Sub test()
   Dim z(), z1(), i&, t, t1, t2, t3
   z = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp"): .Pattern = "([а-яё]+) А\.(\d+),Бв\.(\d+)": .IgnoreCase = True: .Global = True
  For i = 1 To UBound(z): t = z(i, 1)
    t1 = .Execute(t)(0).Submatches(0): t2 = .Execute(t)(0).Submatches(1): t3 = .Execute(t)(0).Submatches(2)
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
  Next
End With
  Range("A1").Resize(UBound(z), 1).Value = z
  Range("B1").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]
К сообщению приложен файл: example_18_05_2.xls (51.0 Kb)


Сообщение отредактировал sv2014 - Среда, 18.05.2016, 10:38
 
Ответить
Сообщениеgiovanni, добрый день,протестируйте макрос,кнопки test,повтор

[vba]
Код
Sub test()
   Dim z(), z1(), i&, t, t1, t2, t3
   z = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp"): .Pattern = "([а-яё]+) А\.(\d+),Бв\.(\d+)": .IgnoreCase = True: .Global = True
  For i = 1 To UBound(z): t = z(i, 1)
    t1 = .Execute(t)(0).Submatches(0): t2 = .Execute(t)(0).Submatches(1): t3 = .Execute(t)(0).Submatches(2)
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
  Next
End With
  Range("A1").Resize(UBound(z), 1).Value = z
  Range("B1").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]

Автор - sv2014
Дата добавления - 18.05.2016 в 10:28
giovanni Дата: Среда, 18.05.2016, 21:38 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
giovanni, добрый день,протестируйте макрос,кнопки test,повтор


С исходным текстом, указанным Вами в примере, работает отлично, но когда подставляю другой текст, начинает ругаться :-(

Приложил файл с примером, как видится исходный текст и результат работы макроса.

Огромное спасибо за помощь.
К сообщению приложен файл: 2413114.xlsx (8.1 Kb)


Сообщение отредактировал giovanni - Среда, 18.05.2016, 21:39
 
Ответить
Сообщение
giovanni, добрый день,протестируйте макрос,кнопки test,повтор


С исходным текстом, указанным Вами в примере, работает отлично, но когда подставляю другой текст, начинает ругаться :-(

Приложил файл с примером, как видится исходный текст и результат работы макроса.

Огромное спасибо за помощь.

Автор - giovanni
Дата добавления - 18.05.2016 в 21:38
sv2014 Дата: Среда, 18.05.2016, 23:09 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
giovanni, добрый вечер,для Вашего нового файл-примера,вариант макроса кнопки test1 и повтор

[vba]
Код
Sub test1()
   Dim z(), z1(), i&, t, t1, t2, t3
   z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp")
  For i = 1 To UBound(z): t = z(i, 1)
  .Pattern = "[а-яё]+": .IgnoreCase = True
    t1 = .Execute(t)(0)
    .Pattern = "\d+": .Global = True
   If .Execute(t).Count > 1 Then t2 = .Execute(t)(.Execute(t).Count - 2): t3 = .Execute(t)(.Execute(t).Count - 1) Else t2 = .Execute(t)(.Execute(t).Count - 1): t3 = ""
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
  Next
End With
  Range("A3").Resize(UBound(z), 1).Value = z
  Range("B3").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]
К сообщению приложен файл: example_19_05_2.xls (41.0 Kb)
 
Ответить
Сообщениеgiovanni, добрый вечер,для Вашего нового файл-примера,вариант макроса кнопки test1 и повтор

[vba]
Код
Sub test1()
   Dim z(), z1(), i&, t, t1, t2, t3
   z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp")
  For i = 1 To UBound(z): t = z(i, 1)
  .Pattern = "[а-яё]+": .IgnoreCase = True
    t1 = .Execute(t)(0)
    .Pattern = "\d+": .Global = True
   If .Execute(t).Count > 1 Then t2 = .Execute(t)(.Execute(t).Count - 2): t3 = .Execute(t)(.Execute(t).Count - 1) Else t2 = .Execute(t)(.Execute(t).Count - 1): t3 = ""
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
  Next
End With
  Range("A3").Resize(UBound(z), 1).Value = z
  Range("B3").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]

Автор - sv2014
Дата добавления - 18.05.2016 в 23:09
giovanni Дата: Воскресенье, 22.05.2016, 17:48 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
giovanni, добрый вечер,для Вашего нового файл-примера,вариант макроса кнопки test1 и повтор


Здравствуйте!

Макрос работает отлично, именно то, что нужно!
Огромное спасибо за помощь!

Если можно, помогите, пожалуйста в одном моменте, связанном с работой данного макроса.
К примеру, если текст "Абвгдежз" цельный, то все работает отлично. Но, к примеру, если в
слове "Абвгдежз" присутствует точка ("Абвг.дежз"), то макрос переносит только часть слова,
а именно ту часть, которая до точки ("Абвг").
Возможно ли в рамках данного макроса сделать так, чтобы слово "Абвгдежз" переносилось
полностью, вне зависимости от наличия в слове точки?

Спасибо!
 
Ответить
Сообщение
giovanni, добрый вечер,для Вашего нового файл-примера,вариант макроса кнопки test1 и повтор


Здравствуйте!

Макрос работает отлично, именно то, что нужно!
Огромное спасибо за помощь!

Если можно, помогите, пожалуйста в одном моменте, связанном с работой данного макроса.
К примеру, если текст "Абвгдежз" цельный, то все работает отлично. Но, к примеру, если в
слове "Абвгдежз" присутствует точка ("Абвг.дежз"), то макрос переносит только часть слова,
а именно ту часть, которая до точки ("Абвг").
Возможно ли в рамках данного макроса сделать так, чтобы слово "Абвгдежз" переносилось
полностью, вне зависимости от наличия в слове точки?

Спасибо!

Автор - giovanni
Дата добавления - 22.05.2016 в 17:48
sv2014 Дата: Воскресенье, 22.05.2016, 19:17 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
giovanni, добрый вечер,поменяйте шаблон(Pattern) в макросе,например,скопировав, на такой вариант

.[vba]
Код
Pattern = "[а-яё\.]+"
[/vba]

и это будет ответ на Ваш вопрос в последнем сообщении.
 
Ответить
Сообщениеgiovanni, добрый вечер,поменяйте шаблон(Pattern) в макросе,например,скопировав, на такой вариант

.[vba]
Код
Pattern = "[а-яё\.]+"
[/vba]

и это будет ответ на Ваш вопрос в последнем сообщении.

Автор - sv2014
Дата добавления - 22.05.2016 в 19:17
giovanni Дата: Среда, 25.05.2016, 18:09 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
giovanni, добрый вечер,поменяйте шаблон(Pattern) в макросе,например,скопировав, на такой вариант


Здравствуйте!

Внес изменения, как Вы сказали, все работает отлично! Огромное спасибо!)

Если не сложно, подскажите, пожалуйста, по одному моменту в данном макросе.
Думал разберусь сам, т.к. чуток дружу с VBA, но не получается)

В данном макросе обрабатывается исходный текст, находящийся в начиная с ячейки "А3" и далее по всему столбцу "А".
Обработанный макросом текст вставляется в соседние ячейки, правее от исходного текста.
Можно ли внести в макрос изменения, чтобы его можно было применить к исходному тексту, находящегося в любой другой ячейке?
К примеру, если исходный текст будет находиться не в столбце "А", а, например, в ячейке "N2".
Вижу в коде макроса строку:
Код
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value

когда изменяю адрес ячейки "А3" на другой, текст находящийся в указанной ячейке не обрабатывается макросом.
Наверняка что-то делаю не так)

Спасибо!


Сообщение отредактировал giovanni - Среда, 25.05.2016, 19:51
 
Ответить
Сообщение
giovanni, добрый вечер,поменяйте шаблон(Pattern) в макросе,например,скопировав, на такой вариант


Здравствуйте!

Внес изменения, как Вы сказали, все работает отлично! Огромное спасибо!)

Если не сложно, подскажите, пожалуйста, по одному моменту в данном макросе.
Думал разберусь сам, т.к. чуток дружу с VBA, но не получается)

В данном макросе обрабатывается исходный текст, находящийся в начиная с ячейки "А3" и далее по всему столбцу "А".
Обработанный макросом текст вставляется в соседние ячейки, правее от исходного текста.
Можно ли внести в макрос изменения, чтобы его можно было применить к исходному тексту, находящегося в любой другой ячейке?
К примеру, если исходный текст будет находиться не в столбце "А", а, например, в ячейке "N2".
Вижу в коде макроса строку:
Код
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value

когда изменяю адрес ячейки "А3" на другой, текст находящийся в указанной ячейке не обрабатывается макросом.
Наверняка что-то делаю не так)

Спасибо!

Автор - giovanni
Дата добавления - 25.05.2016 в 18:09
Kuzmich Дата: Среда, 25.05.2016, 20:53 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
[/vba]
и , возможно надо изменить диапазон выгрузки
[moder]Не забывайте оформлять правильно код. Поправил за Вас[/moder]


Сообщение отредактировал SLAVICK - Среда, 25.05.2016, 21:39
 
Ответить
Сообщение[vba]
Код
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
[/vba]
и , возможно надо изменить диапазон выгрузки
[moder]Не забывайте оформлять правильно код. Поправил за Вас[/moder]

Автор - Kuzmich
Дата добавления - 25.05.2016 в 20:53
giovanni Дата: Среда, 25.05.2016, 21:37 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
и , возможно надо изменить диапазон выгрузки


Вы правы, изменение данной строки работает: [vba]
Код
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
[/vba]
Однако, выгрузка результатов работы макроса происходит в те же ячейки, что и раньше.
Возможно ли изменить диапазон выгрузки?
[moder]для оформления кода - используйте тег #[/moder]


Сообщение отредактировал SLAVICK - Среда, 25.05.2016, 21:42
 
Ответить
Сообщение
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
и , возможно надо изменить диапазон выгрузки


Вы правы, изменение данной строки работает: [vba]
Код
z = Range("N2:N" & Range("N" & Rows.Count).End(xlUp).Row).Value
[/vba]
Однако, выгрузка результатов работы макроса происходит в те же ячейки, что и раньше.
Возможно ли изменить диапазон выгрузки?
[moder]для оформления кода - используйте тег #[/moder]

Автор - giovanni
Дата добавления - 25.05.2016 в 21:37
Kuzmich Дата: Среда, 25.05.2016, 21:45 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Диапазон выгрузки определяется строками
[vba]
Код
Range("A1").Resize(UBound(z), 1).Value = z
Range("B1").Resize(UBound(z1), 3).Value = z1
[/vba]
Вместо A1 и B1 поставьте свои N и O
 
Ответить
СообщениеДиапазон выгрузки определяется строками
[vba]
Код
Range("A1").Resize(UBound(z), 1).Value = z
Range("B1").Resize(UBound(z1), 3).Value = z1
[/vba]
Вместо A1 и B1 поставьте свои N и O

Автор - Kuzmich
Дата добавления - 25.05.2016 в 21:45
giovanni Дата: Четверг, 26.05.2016, 00:30 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Диапазон выгрузки определяется строками


Огромное спасибо! Работает!)
 
Ответить
Сообщение
Диапазон выгрузки определяется строками


Огромное спасибо! Работает!)

Автор - giovanni
Дата добавления - 26.05.2016 в 00:30
giovanni Дата: Суббота, 28.05.2016, 16:26 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Доброго дня!

Подскажите, пожалуйста, как сделать так, чтобы данный макрос работал только для содержимого одной ячейки, к примеру - "А2"?

Пытался внести изменения в строку [vba]
Код
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
[/vba] оставив в тексте только [vba]
Код
z = Range("A3").Value
[/vba] , но в этом случае VBA ругается на ошибку.

Спасибо!
 
Ответить
СообщениеДоброго дня!

Подскажите, пожалуйста, как сделать так, чтобы данный макрос работал только для содержимого одной ячейки, к примеру - "А2"?

Пытался внести изменения в строку [vba]
Код
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
[/vba] оставив в тексте только [vba]
Код
z = Range("A3").Value
[/vba] , но в этом случае VBA ругается на ошибку.

Спасибо!

Автор - giovanni
Дата добавления - 28.05.2016 в 16:26
Kuzmich Дата: Суббота, 28.05.2016, 17:24 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
макрос работал только для содержимого одной ячейки

Воспользуйтесь UDF, которые вам представил sv2014 в сообщениях 5 и 6
 
Ответить
Сообщение
Цитата
макрос работал только для содержимого одной ячейки

Воспользуйтесь UDF, которые вам представил sv2014 в сообщениях 5 и 6

Автор - Kuzmich
Дата добавления - 28.05.2016 в 17:24
giovanni Дата: Суббота, 28.05.2016, 20:14 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Воспользуйтесь UDF, которые вам представил sv2014 в сообщениях 5 и 6


Указанный Вами UDF работают немного не так, как нужно. В то же время макрос, указанный в сообщении №10 форматирует текст именно так, как нужно:

[vba]
Код
Sub test1()
Dim z(), z1(), i&, t, t1, t2, t3
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp")
For i = 1 To UBound(z): t = z(i, 1)
.Pattern = "[а-яё]+": .IgnoreCase = True
    t1 = .Execute(t)(0)
    .Pattern = "\d+": .Global = True
If .Execute(t).Count > 1 Then t2 = .Execute(t)(.Execute(t).Count - 2): t3 = .Execute(t)(.Execute(t).Count - 1) Else t2 = .Execute(t)(.Execute(t).Count - 1): t3 = ""
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
Next
End With
Range("A3").Resize(UBound(z), 1).Value = z
Range("B3").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]

Единственный момент с данным макросом - это то, что если применить его к количеству строк меньшему, чем указано в файле (в файле примера 5 строк),
то VBA выдает ошибку "Type missmatch".
Если заставить данный макрос работать только с одной указанной ячейкой, то это будет на 100% то, что нужно)
По мере своих знаний в VBA пытался изменить диапазон работы макроса, но не получается.
 
Ответить
Сообщение
Воспользуйтесь UDF, которые вам представил sv2014 в сообщениях 5 и 6


Указанный Вами UDF работают немного не так, как нужно. В то же время макрос, указанный в сообщении №10 форматирует текст именно так, как нужно:

[vba]
Код
Sub test1()
Dim z(), z1(), i&, t, t1, t2, t3
z = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
ReDim z1(1 To UBound(z), 1 To 3)
With CreateObject("VBScript.RegExp")
For i = 1 To UBound(z): t = z(i, 1)
.Pattern = "[а-яё]+": .IgnoreCase = True
    t1 = .Execute(t)(0)
    .Pattern = "\d+": .Global = True
If .Execute(t).Count > 1 Then t2 = .Execute(t)(.Execute(t).Count - 2): t3 = .Execute(t)(.Execute(t).Count - 1) Else t2 = .Execute(t)(.Execute(t).Count - 1): t3 = ""
    z(i, 1) = Replace(Replace(Replace(t, t1, ""), t2, ""), t3, "")
    z1(i, 1) = t1: z1(i, 2) = t2: z1(i, 3) = t3
Next
End With
Range("A3").Resize(UBound(z), 1).Value = z
Range("B3").Resize(UBound(z1), 3).Value = z1
End Sub
[/vba]

Единственный момент с данным макросом - это то, что если применить его к количеству строк меньшему, чем указано в файле (в файле примера 5 строк),
то VBA выдает ошибку "Type missmatch".
Если заставить данный макрос работать только с одной указанной ячейкой, то это будет на 100% то, что нужно)
По мере своих знаний в VBA пытался изменить диапазон работы макроса, но не получается.

Автор - giovanni
Дата добавления - 28.05.2016 в 20:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разделение текста на части и перенос в другие ячейки (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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