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

Вход

Регистрация

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

 

= Мир MS Excel/Разбить данные в одном столбце на несколько - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разбить данные в одном столбце на несколько (Макросы Sub)
Разбить данные в одном столбце на несколько
Luxes Дата: Воскресенье, 09.02.2014, 05:54 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Нужен совет или пример как переместить часть текста(для наглядности выделен синим цветом) из столбца "название" в столбец "ед."

То есть текст из примера 1, необходимо разбить как в примере 2

Пример 1


Пример 2


P.S. В примере 1 разбивка на цвет сделана исключительно для наглядности в реальном примере её нет и в реальном примере более 10 тысяч строк.
К сообщению приложен файл: illustration.xls (9.6 Kb)
 
Ответить
СообщениеНужен совет или пример как переместить часть текста(для наглядности выделен синим цветом) из столбца "название" в столбец "ед."

То есть текст из примера 1, необходимо разбить как в примере 2

Пример 1


Пример 2


P.S. В примере 1 разбивка на цвет сделана исключительно для наглядности в реальном примере её нет и в реальном примере более 10 тысяч строк.

Автор - Luxes
Дата добавления - 09.02.2014 в 05:54
Wowick Дата: Воскресенье, 09.02.2014, 07:35 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 5 ±
Замечаний: 0% ±

Excel 2010
Есть точная информация какой максимальной длины может быть единица измерения?
При допущении, что длина ед. изм. не больше 5 символов, получилась такая формула, которую надо вставить в соседний столбец

Код
=ПРАВСИМВ(RC[-1];ДЛСТР(RC[-1])-НАЙТИ("(";RC[-1];ДЛСТР(RC[-1])-5)+1)


Если в формуле 5 поменять на бОльшее число, то есть вероятность, что оно найдет не последнюю левую скобку в строке...

В общем гляди файл:

ТОлько сначала считается столбец С, а только затем на его основании считается столбец В.

з.ы. вот блин, не внимательно прочитал задание... У меня то формулы получились, а надо было макросом...
Но пусть в качестве полного оффтопа останется, ну или модераторы удалят, а то вдруг кому понадобится формулами...
К сообщению приложен файл: illustration.xlsx (9.9 Kb)


Сообщение отредактировал Wowick - Воскресенье, 09.02.2014, 07:56
 
Ответить
СообщениеЕсть точная информация какой максимальной длины может быть единица измерения?
При допущении, что длина ед. изм. не больше 5 символов, получилась такая формула, которую надо вставить в соседний столбец

Код
=ПРАВСИМВ(RC[-1];ДЛСТР(RC[-1])-НАЙТИ("(";RC[-1];ДЛСТР(RC[-1])-5)+1)


Если в формуле 5 поменять на бОльшее число, то есть вероятность, что оно найдет не последнюю левую скобку в строке...

В общем гляди файл:

ТОлько сначала считается столбец С, а только затем на его основании считается столбец В.

з.ы. вот блин, не внимательно прочитал задание... У меня то формулы получились, а надо было макросом...
Но пусть в качестве полного оффтопа останется, ну или модераторы удалят, а то вдруг кому понадобится формулами...

Автор - Wowick
Дата добавления - 09.02.2014 в 07:35
Pelena Дата: Воскресенье, 09.02.2014, 12:10 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Как вариант
Код
=ПСТР(A2;ПОИСК("#";ПОДСТАВИТЬ(A2;" ";"#";ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;" ";""))))+1;99)

или для стиля R1C1
Код
=ПСТР(RC[-1];ПОИСК("#";ПОДСТАВИТЬ(RC[-1];" ";"#";ДЛСТР(RC[-1])-ДЛСТР(ПОДСТАВИТЬ(RC[-1];" ";""))))+1;99)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКак вариант
Код
=ПСТР(A2;ПОИСК("#";ПОДСТАВИТЬ(A2;" ";"#";ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;" ";""))))+1;99)

или для стиля R1C1
Код
=ПСТР(RC[-1];ПОИСК("#";ПОДСТАВИТЬ(RC[-1];" ";"#";ДЛСТР(RC[-1])-ДЛСТР(ПОДСТАВИТЬ(RC[-1];" ";""))))+1;99)

Автор - Pelena
Дата добавления - 09.02.2014 в 12:10
Luxes Дата: Воскресенье, 09.02.2014, 13:03 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо Вам за помощь, формула - это тоже решение. Но хотелось Все же знать как это сделать через макрос VBA
 
Ответить
СообщениеСпасибо Вам за помощь, формула - это тоже решение. Но хотелось Все же знать как это сделать через макрос VBA

Автор - Luxes
Дата добавления - 09.02.2014 в 13:03
ikki Дата: Воскресенье, 09.02.2014, 14:24 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
[vba]
Код
Sub t()
      Dim a(), b()
      Set r = CreateObject("vbscript.regexp"): r.Pattern = "^(.*)(\([^(]*\))$"
      a = Range([a2], Cells(Rows.Count, 1).End(xlUp)).Value
      ReDim b(1 To UBound(a), 1 To 2)
      For i = 1 To UBound(a)
          Set m = r.Execute(a(i, 1))
          If m.Count Then
              b(i, 1) = m(0).submatches(0)
              b(i, 2) = m(0).submatches(1)
          Else
              b(i, 1) = a(i, 1)
          End If
      Next
      [b2].Resize(UBound(a), 2).Value = b
End Sub
[/vba]
К сообщению приложен файл: ei.xlsm (16.7 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 09.02.2014, 14:28
 
Ответить
Сообщение[vba]
Код
Sub t()
      Dim a(), b()
      Set r = CreateObject("vbscript.regexp"): r.Pattern = "^(.*)(\([^(]*\))$"
      a = Range([a2], Cells(Rows.Count, 1).End(xlUp)).Value
      ReDim b(1 To UBound(a), 1 To 2)
      For i = 1 To UBound(a)
          Set m = r.Execute(a(i, 1))
          If m.Count Then
              b(i, 1) = m(0).submatches(0)
              b(i, 2) = m(0).submatches(1)
          Else
              b(i, 1) = a(i, 1)
          End If
      Next
      [b2].Resize(UBound(a), 2).Value = b
End Sub
[/vba]

Автор - ikki
Дата добавления - 09.02.2014 в 14:24
nilem Дата: Воскресенье, 09.02.2014, 15:23 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
как вариант
[vba]
Код
Sub ertert()
Dim x, i&, sp
With Range("A1").CurrentRegion
     x = .Resize(, 2).Value
     For i = 2 To UBound(x)
         sp = Split(x(i, 1), "(")
         x(i, 2) = "(" & sp(UBound(sp))
         x(i, 1) = Trim(Replace(x(i, 1), x(i, 2), ""))
     Next i
     x(1, 2) = "Ед."
     .Offset(, 1).Resize(i - 1, 2).Value = x
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениекак вариант
[vba]
Код
Sub ertert()
Dim x, i&, sp
With Range("A1").CurrentRegion
     x = .Resize(, 2).Value
     For i = 2 To UBound(x)
         sp = Split(x(i, 1), "(")
         x(i, 2) = "(" & sp(UBound(sp))
         x(i, 1) = Trim(Replace(x(i, 1), x(i, 2), ""))
     Next i
     x(1, 2) = "Ед."
     .Offset(, 1).Resize(i - 1, 2).Value = x
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 09.02.2014 в 15:23
Luxes Дата: Воскресенье, 09.02.2014, 22:16 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
О, огромное спасибо за макросы. Ещё бы к ним небольшие комментарии что бы было легче разобраться, но и так супер!
 
Ответить
СообщениеО, огромное спасибо за макросы. Ещё бы к ним небольшие комментарии что бы было легче разобраться, но и так супер!

Автор - Luxes
Дата добавления - 09.02.2014 в 22:16
Luxes Дата: Среда, 12.02.2014, 16:46 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ещё подскажите пожалуйста как применить один из выше написанных макросов для конкретного листа, а не только для выделенного?
 
Ответить
СообщениеЕщё подскажите пожалуйста как применить один из выше написанных макросов для конкретного листа, а не только для выделенного?

Автор - Luxes
Дата добавления - 12.02.2014 в 16:46
ikki Дата: Среда, 12.02.2014, 17:09 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
чуть подправить код.
К сообщению приложен файл: ei2.xlsm (15.6 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениечуть подправить код.

Автор - ikki
Дата добавления - 12.02.2014 в 17:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разбить данные в одном столбце на несколько (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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