Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
1

Извлечение части данных из одной ячейки макросом

08.07.2015, 23:33. Показов 9198. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Надо извлечь несколько данных находящихся в одной ячейке на разных позициях, не знаю как лучше объяснить:
Арктикул: 5177 Цвет:белый DEWSPO FOIL, PRIN тиси Рост: 134-164 Наличие: в наличии 950.00 рублей
Арктикул: 5177 Цвет:серебро DEWSPO FOIL, PRIN тиси Рост: 134-164 Наличие: в наличии 950.00 рублей
Арктикул: 5177 Цвет: голубой


Мне нужно, только названия цветов (белый, серебро, голубой)перенести в другую ячейку, желательно что бы они, были сразу через запятую или точку с запятой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2015, 23:33
Ответы с готовыми решениями:

Как макросом провести фигуру-линию - из центра одной ячейки в центр другой ячейки
Добрый день, господа программисты. Помогите разобраться.  На листе находятся...

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

Сложное извлечение данных из одной ячейки в другую
Друзья, всем доброго дня. Прогуглил интернет и Ваш замечательный форум, но не нашел решения своей...

Копирование части данных одной ячейки в другую
Помогите пожалуйста Как вытащить из ячейки часть данных в другую яйчейку? Данные каждой ячейки...

47
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
09.07.2015, 00:18 2
Июлька, все, что выделено жирным - в одной ячейке?
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
09.07.2015, 00:30  [ТС] 3
Да, на самом деле в ячейке гораздо больше забито, но все остальное не важно.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
09.07.2015, 00:53 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Пользовательская функция
Visual Basic
1
2
3
4
5
6
7
8
9
Function Julia(ByVal s As String) As String
Dim x, v$(), i&
  v = Split(s, "Цвет:")
  For i = 1 To UBound(v)
    s = LTrim$(v(i)) & " "
    Julia = Julia & ", " & Left$(s, InStr(s, " ") - 1)
  Next
  Julia = Mid$(Julia, 3)
End Function
Вложения
Тип файла: xls Julia.xls (28.5 Кб, 23 просмотров)
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
09.07.2015, 01:33  [ТС] 5
Спасибо, ОГРОМНОЕ, Вы спасли меня от жутких мучений.
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
13.09.2015, 12:01  [ТС] 6
Здравствуйте.

Опять, я к Вам за помощью...

В одной ячейке вот это 1I2430-110-Бело-синий, 110, Бело-синий, надо в одну ячейку цифры (110), надо собрать цвета и цифры из нескольких ячеек в одну, ну т.е.цвета в одну ячейку, а цифры в другую..
Диапазон ограничен жирной рамкой, несколько ячеек обведено жирной рамкой из них надо в одну ячейку собрать разные цвета (если в выделеном диапазоне 2 цвета, то в одной ячейке, тоже должно быть 2 цвета) а в другую разные цифры, в одной ячейке должны быть собраны разные цифры.

Левые значения до первой запятой не нужны.
Вложения
Тип файла: xlsx образец_2.xlsx (9.6 Кб, 6 просмотров)
0
132 / 108 / 22
Регистрация: 23.06.2015
Сообщений: 339
14.09.2015, 00:41 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Июлька, можно пользовательскими функциями VBA:

Visual Basic
1
2
3
4
5
6
7
8
 Function uuu(st As String)
     With CreateObject("vbscript.regexp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "[A-Я]{4}\-[А-Я]{5,7}"
      uuu = .Execute(st)(0).Value
   End With
End Function
Visual Basic
1
2
3
4
5
6
7
Function zzz(st As String)
   With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "[0-9]{3}"
      zzz = .Execute(st)(1).Value
   End With
End Function
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
14.09.2015, 08:38  [ТС] 8
Простите меня за глупый вопрос, как воспользоваться этими функциями? Я копирую код, вставляю в ячейку, а excel, выдает, что ошибка в формуле. Если не трудно, объясните пожалуйста.
0
2898 / 1715 / 702
Регистрация: 04.09.2015
Сообщений: 3,433
14.09.2015, 08:56 9
Цитата Сообщение от Июлька Посмотреть сообщение
копирую код, вставляю в ячейку, а excel, выдает, что ошибка в формуле
Надо вставлять в модуль проекта VBA
Цитата Сообщение от Июлька Посмотреть сообщение
все равно придется редактировать и убирать повторяющиеся значения
Покажите файл с ожидаемым результатом.
0
132 / 108 / 22
Регистрация: 23.06.2015
Сообщений: 339
14.09.2015, 11:00 10
для #14 можно пользовательскую функцию:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Function aaa(st As String)
       Dim t1$, t2$, t3$
       With CreateObject("vbscript.regexp")
         .Global = True
         .IgnoreCase = True
         .Pattern = "\:\s*[А-Я]{5,7}"
          t1 = Mid$(.Execute(st)(0).Value, 2)
          t2 = Mid$(.Execute(st)(1).Value, 2)
          t3 = Mid$(.Execute(st)(2).Value, 2)
       End With
      aaa = t1 & "," & t2 & "," & t3
End Function
Добавлено через 1 час 8 минут
Июлька, добрый день,предыдущие две пользовательские функции для раздела#16,копировать в стандартный модуль VBA,затем в ячейке набрать=,выскочит меню,выберите функцию,в скобках набрать ячейку A1 или выбрать ячейку мышью.Такие функции проще обычных
0
2898 / 1715 / 702
Регистрация: 04.09.2015
Сообщений: 3,433
14.09.2015, 11:57 11
Svsh2015,
1. для чего в шаблоне "\:"? (с этими знаками функция не работает)
2. почему в шаблоне задано от 5 до 7 букв подряд (Бело - 4 буквы, цвет Бело-синий - 10 символов)
Я бы так написал шаблон "\s[А-Я,-]{4,20}$"
2. для чего определяем t1, t2 и t3
Цвет в строке один, но указан дважды.
0
132 / 108 / 22
Регистрация: 23.06.2015
Сообщений: 339
14.09.2015, 19:14 12
добрый вечер,пользовательская функция о которой задает вопрос AlexM относится к разделу #14,разговор,получается идет о разных файл-примерах- моя функция-это еще один вариант с использованием VBScript.RegExp ,типа пользовательской функции Julia,которую предложил Казанский,там и файл-пример имеется,к нему относится эта функция,все корректно работает,проверял.
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
14.09.2015, 19:36  [ТС] 13
Эх, друзья мои, Вы не поняли, я простой юзер, в excel я могу пользоваться только простейшими функциями - типа сумма, хотя нет, недавно узнала про функцию "сцепить", это мой предел, я не программист, все что я смогла сделать это открыть проект vba, а дальше уже не мой уровень, я не могу найти куда там вставить эти коды. Попроще нет решения?
0
132 / 108 / 22
Регистрация: 23.06.2015
Сообщений: 339
14.09.2015, 19:38 14
вот файл-пример функции ааа()
Вложения
Тип файла: xls Julia_16_09_2015.xls (29.5 Кб, 12 просмотров)
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
14.09.2015, 19:58  [ТС] 15
AlexM, я Вас не совсем поняла, если Вы просите показать оригинальный файл, то вот, во вложении, нужный столбец выделен оранжевым.
А по поводу сообщения 20, то там не очень удобно получается, в ячейку выносятся все значения, а если в выделеном диапазоне, допустим, 5 раз повторяется цвет "черный" и 3 раза "синий", то и в выделенной ячейке выдается 5 раз черный и 3 раза синий, а надо, что бы было "черный; синий".
Поэтому все результаты надо будет редактировать и убирать дубли.
Вложения
Тип файла: rar каталог_Осень-Зима ТМ 5.10.15.rar (161.4 Кб, 7 просмотров)
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
14.09.2015, 20:24  [ТС] 16
Svsh2015, Я пробовала эту функцию, она работает, только в том файле, для которого делалась, а для теперешнего, ее надо как-то редактировать, там я просто в этот образец скопировала ячейки, из которых нужно было инфу выдернуть а результат скопировала в итоговый файла и все.
0
132 / 108 / 22
Регистрация: 23.06.2015
Сообщений: 339
14.09.2015, 21:00 17
доброго времени суток,предложите максимально расширенный новый файл-пример(что дано и что надо получить),сделаем корректировку кода для любого нового случая,VBScript.RegExp может решить любой вариант.
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 40
14.09.2015, 21:31  [ТС] 18
Svsh2015, вот, файл во вложении, исходный столбец оранжевый, результаты в зеленом и синем столбцах.
Вложения
Тип файла: rar каталог_Осень-Зима ТМ 5.10.15.rar (185.4 Кб, 11 просмотров)
0
2898 / 1715 / 702
Регистрация: 04.09.2015
Сообщений: 3,433
15.09.2015, 01:12 19
Откройте файл и нажмите кнопку.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Macros()
Dim i As Long
Dim iStr1 As String, iStr2 As String
Dim Number As String, Text As String
For i = 7 To Cells(7, 4).End(xlDown).Row
   With CreateObject("vbscript.regexp")
     .Global = True
     .Pattern = "\s*[0-9]{2,3},"
      Number = Replace(Mid(.Execute(Cells(i, 4))(1).Value, 2), ",", "")
      .IgnoreCase = True
      .Pattern = "\s[À-ß-\+\s/¨]{4,50}$"
      Text = Mid(.Execute(Cells(i, 4))(0).Value, 2)
   End With
   If InStr(iStr1, Number) = 0 Then iStr1 = iStr1 & ", " & Number
   If InStr(iStr2, Text) = 0 Then iStr2 = iStr2 & ", " & Text
If Left(Cells(i, 4), 8) <> Left(Cells(i + 1, 4), 8) Then
Cells(i, 4).Offset(0, 1) = Mid(iStr1, 3)
Cells(i, 4).Offset(0, 2) = Mid(iStr2, 3)
iStr1 = "": iStr2 = ""
End If
Next i
End Sub
Вложения
Тип файла: rar каталог_Осень-Зима ТМ 5.10.15.rar (111.3 Кб, 12 просмотров)
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
15.09.2015, 02:52 20
Ну и мой вариант, ИМХО ближе к ТЗ.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Const COL = "D"   'буква или номер исх. столбца
Const ROW1 = 7    'номер первой строки данных
Const ART_LEN = 8 'длина артикула в начале строки
Const SEP = "; "  'разделитель выходных строк
 
Sub Julka()
Dim i&, j&, sz As Collection, cl As Collection, v(), w$(), art$, d$()
v = Range(Cells(ROW1, COL), Cells(Rows.Count, COL).End(xlUp).Offset(1)).Value
ReDim w(1 To UBound(v), 1 To 2)
i = 1
Do
  art = Left$(Trim$(v(i, 1)), ART_LEN)
  Set sz = New Collection
  Set cl = New Collection
  For j = i To UBound(v)
    If StrComp(art, Left$(Trim$(v(j, 1)), ART_LEN), vbTextCompare) Then
      w(i, 1) = JoinCol(cl)
      w(i, 2) = JoinCol(sz)
      i = j
      Exit For
    Else
      d = Split(Trim$(v(j, 1)), ",")
      If UBound(d) > 0 Then SortColN sz, Trim$(d(1))
      If UBound(d) > 1 Then SortCol cl, Trim$(d(2))
    End If
  Next
Loop Until i = UBound(v)
Cells(ROW1, COL).Offset(, 1).Resize(UBound(w), 2).Value = w
End Sub
 
Private Sub SortCol(cl As Collection, x)
Dim i&
  On Error Resume Next
  For i = 1 To cl.Count
    If x < cl(i) Then
      cl.Add x, CStr(x), Before:=i
      Exit Sub
    End If
  Next
  cl.Add x, CStr(x)
End Sub
 
Private Sub SortColN(cl As Collection, x)
Dim i&, xn
  xn = Val(x)
  On Error Resume Next
  For i = 1 To cl.Count
    If xn < cl(i)(0) Then
      cl.Add Array(xn, x), CStr(xn), Before:=i
      Exit Sub
    End If
 Next
 cl.Add Array(xn, x), CStr(xn)
End Sub
 
Private Function JoinCol(cl As Collection) As String
Dim i&
  If cl.Count = 0 Then Exit Function
  If IsArray(cl(1)) Then
    For i = 1 To cl.Count
      JoinCol = JoinCol & SEP & cl(i)(1)
    Next
  Else
    For i = 1 To cl.Count
      JoinCol = JoinCol & SEP & cl(i)
    Next
  End If
  JoinCol = Mid$(JoinCol, Len(SEP) + 1)
End Function
Вложения
Тип файла: rar каталог_Осень-Зима ТМ 5.10.15.rar (197.8 Кб, 16 просмотров)
0
15.09.2015, 02:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2015, 02:52
Помогаю со студенческими работами здесь

Перенос части данных из одной ячейки в другую
0318.61.3 SST Светильник 0331.20 Au Часы 0331.20.0 Настенный светильник 0331.20.AG...

Формула для копирования части данных из одной ячейки в другую
Здравствуйте! Прошу вашей помощи. В столбце записаны размеры товара, необходимо в отдельную...

Формула для копирования части данных из одной ячейки в другую - MS Excel
Здравствуйте Прошу вас о помощи Есть строка, она может быть любой длины. Из нее требуется...

Копирование данных из ячейки одной Табличной Части на форме в такую же ячейку другой Табличной части на этой же форме
Всех с Новым годом и грядущим Рождеством пособите начинающему: затык такой - НА форме есть две...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru