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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование части из ячейки. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование части из ячейки. (Макросы/Sub)
Копирование части из ячейки.
wwizard Дата: Понедельник, 26.12.2016, 00:51 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

И снова здраствуйте, Есть небольшой прайслист на 10000 строк. В первой колонке, в ячейках идет название товаров, а в 9ю колонку, по темже строкам, мне нужно выдернуть одну часть текста. Проблема заключаеться в том, что данная часть текста, являеться модельным номером оборудование и не всегда находиться вторым словом, в надписи. Бывает третьим словом, четвертым, пятым и т.д. Я не знаю как выследить закономерность чтоб составить правильную формулу, одну для всех позиций, тем более мне сложнее попросить помочь с макросом.

Например:
Монитор 17' Acer V176LBMD (UM.BV6EE.005)
Asus ZenFone Go (ZB452KG) DS Black
Монитор LCD Asus 18.5' VS197DE D-Sub (90LMF1001T02201C-)
Моноблок ASUS Z240ICGK-GC029X (90PT01E1-M01190)
Неттоп ASUS UN65H-M107M (90MS00S1-M01070)
ПК ASUS UN62-M003M (90MS00A1-M00030)

Жирным шрифтом, я выделил значения которые, каждый раз при помощи формул:
2 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]2[/b]-1)*250+1;250))

3 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]3[/b]-1)*250+1;250))

4 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]4[/b]-1)*250+1;250))

и вставляю в 9ый столбец.

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

P.S. В основном нужные мне значения идут сразу до скобок. Такие вещи, как в этом наименование,т.е. значение в скобках, можно не брать во внимание: Asus ZenFone Go (ZB452KG) DS Black - бывают очень редко, и значения со скобок можно просто НЕ переносить, оставляя ячейку в 9ом столбце пустой.
К сообщению приложен файл: proba-pera.xlsm (45.3 Kb)


Сообщение отредактировал wwizard - Понедельник, 26.12.2016, 14:05
 
Ответить
СообщениеИ снова здраствуйте, Есть небольшой прайслист на 10000 строк. В первой колонке, в ячейках идет название товаров, а в 9ю колонку, по темже строкам, мне нужно выдернуть одну часть текста. Проблема заключаеться в том, что данная часть текста, являеться модельным номером оборудование и не всегда находиться вторым словом, в надписи. Бывает третьим словом, четвертым, пятым и т.д. Я не знаю как выследить закономерность чтоб составить правильную формулу, одну для всех позиций, тем более мне сложнее попросить помочь с макросом.

Например:
Монитор 17' Acer V176LBMD (UM.BV6EE.005)
Asus ZenFone Go (ZB452KG) DS Black
Монитор LCD Asus 18.5' VS197DE D-Sub (90LMF1001T02201C-)
Моноблок ASUS Z240ICGK-GC029X (90PT01E1-M01190)
Неттоп ASUS UN65H-M107M (90MS00S1-M01070)
ПК ASUS UN62-M003M (90MS00A1-M00030)

Жирным шрифтом, я выделил значения которые, каждый раз при помощи формул:
2 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]2[/b]-1)*250+1;250))

3 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]3[/b]-1)*250+1;250))

4 слово
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(RC[-8];" ";ПОВТОР(" ";250));([b]4[/b]-1)*250+1;250))

и вставляю в 9ый столбец.

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

P.S. В основном нужные мне значения идут сразу до скобок. Такие вещи, как в этом наименование,т.е. значение в скобках, можно не брать во внимание: Asus ZenFone Go (ZB452KG) DS Black - бывают очень редко, и значения со скобок можно просто НЕ переносить, оставляя ячейку в 9ом столбце пустой.

Автор - wwizard
Дата добавления - 26.12.2016 в 00:51
Wasilich Дата: Понедельник, 26.12.2016, 02:35 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Наверное опять замечание будет! Формулы надо заключать в теги.

Код работает правильно если только номер вне скобок и если без пробела.
Чем богат. Совершенствуйте.
[vba]
Код
Sub tekst()
  Dim St$, ps&, i&, ns&, n&
  ps = Range("A" & Rows.Count).End(xlUp).Row
  For i = 2 To ps
    St = Cells(i, 1)
    ns = InStr(St, "(")
    If ns > 1 Then
       St = Mid(St, 1, ns - 2)
       n = InStrRev(St, " ")
       Cells(i, 9) = Mid(St, n)
    End If
  Next
End Sub
[/vba]


Сообщение отредактировал Wasilich - Понедельник, 26.12.2016, 02:37
 
Ответить
СообщениеНаверное опять замечание будет! Формулы надо заключать в теги.

Код работает правильно если только номер вне скобок и если без пробела.
Чем богат. Совершенствуйте.
[vba]
Код
Sub tekst()
  Dim St$, ps&, i&, ns&, n&
  ps = Range("A" & Rows.Count).End(xlUp).Row
  For i = 2 To ps
    St = Cells(i, 1)
    ns = InStr(St, "(")
    If ns > 1 Then
       St = Mid(St, 1, ns - 2)
       n = InStrRev(St, " ")
       Cells(i, 9) = Mid(St, n)
    End If
  Next
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 26.12.2016 в 02:35
wwizard Дата: Понедельник, 26.12.2016, 03:03 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Код работает правильно если только номер вне скобок и если без пробела.


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


Если не трудно, можете пояснить алгоритм, как он выбирает в каком месте находиться код товара?

Автор - wwizard
Дата добавления - 26.12.2016 в 03:03
Wasilich Дата: Понедельник, 26.12.2016, 11:19 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
как он выбирает в каком месте находиться код
А отладчиком пройтись?
Находим первую скобку "(" в строке и вырезаем текст до конца.
Находим первый пробел справа налево и вырезаем всё до пробела, остается код.
Если код с пробелом, то будет не полный, здесь проблема.
И да, если в строке, где код в скобках, в конце строки нет скобки ")", то код в скобках можно исключить из выбора так
[vba]
Код
If ns > 1 And Right(St, 1) = ")" Then
[/vba]
И желательно
[vba]
Код
St = Cells(i, 1)
[/vba]заменить на
[vba]
Код
St = Trim(Cells(i, 1))
[/vba]


Сообщение отредактировал Wasilich - Понедельник, 26.12.2016, 11:25
 
Ответить
Сообщение
как он выбирает в каком месте находиться код
А отладчиком пройтись?
Находим первую скобку "(" в строке и вырезаем текст до конца.
Находим первый пробел справа налево и вырезаем всё до пробела, остается код.
Если код с пробелом, то будет не полный, здесь проблема.
И да, если в строке, где код в скобках, в конце строки нет скобки ")", то код в скобках можно исключить из выбора так
[vba]
Код
If ns > 1 And Right(St, 1) = ")" Then
[/vba]
И желательно
[vba]
Код
St = Cells(i, 1)
[/vba]заменить на
[vba]
Код
St = Trim(Cells(i, 1))
[/vba]

Автор - Wasilich
Дата добавления - 26.12.2016 в 11:19
wwizard Дата: Понедельник, 26.12.2016, 14:00 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Не совсем, к сожалению весь прайс не пройти и ручками лишнее не поудалять, получиться та же работа, что я формулу вставляю. Вот что получилось:
http://prntscr.com/dnz2o5

Или может можно добавить проверку, например такую: брать данный код только в том случае, если в строке встречаются следующие слова: Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer. Для других товаров это не требуеться.
И плюс: исключить список слов, скажем представленных на листе 2 в 4ом столбце. (я же могу туда указать, список Всех слов, которые надо исключать, очищая ячейку)


Сообщение отредактировал wwizard - Понедельник, 26.12.2016, 14:01
 
Ответить
СообщениеНе совсем, к сожалению весь прайс не пройти и ручками лишнее не поудалять, получиться та же работа, что я формулу вставляю. Вот что получилось:
http://prntscr.com/dnz2o5

Или может можно добавить проверку, например такую: брать данный код только в том случае, если в строке встречаются следующие слова: Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer. Для других товаров это не требуеться.
И плюс: исключить список слов, скажем представленных на листе 2 в 4ом столбце. (я же могу туда указать, список Всех слов, которые надо исключать, очищая ячейку)

Автор - wwizard
Дата добавления - 26.12.2016 в 14:00
Pelena Дата: Понедельник, 26.12.2016, 14:03 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
wwizard, оформите формулы в первом посте тегами (кнопка fx)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеwwizard, оформите формулы в первом посте тегами (кнопка fx)

Автор - Pelena
Дата добавления - 26.12.2016 в 14:03
Wasilich Дата: Понедельник, 26.12.2016, 14:13 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Вот что получилось:
http://prntscr.com/dnz2o5
Вы предлагаете работать с картинкой? Ложите файл.
 
Ответить
Сообщение
Вот что получилось:
http://prntscr.com/dnz2o5
Вы предлагаете работать с картинкой? Ложите файл.

Автор - Wasilich
Дата добавления - 26.12.2016 в 14:13
wwizard Дата: Понедельник, 26.12.2016, 14:49 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Файл приложил. Красным в нем пометил, те артикли которые нужны.

Можно ли добавить проверку, например такую: брать данный код только в том случае, если в строке встречаются следующие слова: Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer. Для других товаров это не требуется.
И плюс: исключить список слов, скажем представленных на листе 2 в 4ом столбце. (я же могу туда указать, список Всех слов, которые надо исключать, очищая ячейку)
К сообщению приложен файл: proba-pera2.xlsm (42.1 Kb)
 
Ответить
СообщениеФайл приложил. Красным в нем пометил, те артикли которые нужны.

Можно ли добавить проверку, например такую: брать данный код только в том случае, если в строке встречаются следующие слова: Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer. Для других товаров это не требуется.
И плюс: исключить список слов, скажем представленных на листе 2 в 4ом столбце. (я же могу туда указать, список Всех слов, которые надо исключать, очищая ячейку)

Автор - wwizard
Дата добавления - 26.12.2016 в 14:49
Wasilich Дата: Понедельник, 26.12.2016, 16:33 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
если в строке встречаются следующие слова:Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer
Поместите их на лист 2 в колонку "Е" с 1-й строки.
Будет проверка наличия их в тексте. Можно добавлять/удалять. Дальше не знаю, нет конкретной привязки. Может кто лучше сообразит. :)
[vba]
Код
Sub tekst()
Dim St$, i&, j&, s&, ns&, n&, X$
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
  St = Trim(Cells(i, "A"))
  With Sheets("Лист2")
    For j = 1 To .Range("E" & Rows.Count).End(xlUp).Row
       ns = InStr(St, .Cells(j, "E"))
       If ns > 0 Then
          St = Replace(St, "Black ", "")
          ns = InStr(St, "(")
          If ns > 1 Then
             St = Mid(St, 1, ns - 2)
             n = InStrRev(St, " ")
             Cells(i, 9) = Mid(St, n)
          End If
          Exit For
       End If
    Next
  End With
Next
End Sub
[/vba]
 
Ответить
Сообщение
если в строке встречаются следующие слова:Ноутбук Asus, Ноутбук ACER, Проектор Acer, Монитор Asus, Монитор Acer
Поместите их на лист 2 в колонку "Е" с 1-й строки.
Будет проверка наличия их в тексте. Можно добавлять/удалять. Дальше не знаю, нет конкретной привязки. Может кто лучше сообразит. :)
[vba]
Код
Sub tekst()
Dim St$, i&, j&, s&, ns&, n&, X$
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
  St = Trim(Cells(i, "A"))
  With Sheets("Лист2")
    For j = 1 To .Range("E" & Rows.Count).End(xlUp).Row
       ns = InStr(St, .Cells(j, "E"))
       If ns > 0 Then
          St = Replace(St, "Black ", "")
          ns = InStr(St, "(")
          If ns > 1 Then
             St = Mid(St, 1, ns - 2)
             n = InStrRev(St, " ")
             Cells(i, 9) = Mid(St, n)
          End If
          Exit For
       End If
    Next
  End With
Next
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 26.12.2016 в 16:33
wwizard Дата: Понедельник, 26.12.2016, 18:49 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Будет проверка наличия их в тексте. Можно добавлять/удалять. Дальше не знаю, нет конкретной привязки. Может кто лучше сообразит.


Супер работает. Осталось только прописать условие - Удалить из результата в листе 1 в колонке 9, если найдено сопоставления с Лист2 колонка 4.
Чтоб такие вещи удалять: http://prntscr.com/do33l3
 
Ответить
Сообщение
Будет проверка наличия их в тексте. Можно добавлять/удалять. Дальше не знаю, нет конкретной привязки. Может кто лучше сообразит.


Супер работает. Осталось только прописать условие - Удалить из результата в листе 1 в колонке 9, если найдено сопоставления с Лист2 колонка 4.
Чтоб такие вещи удалять: http://prntscr.com/do33l3

Автор - wwizard
Дата добавления - 26.12.2016 в 18:49
Wasilich Дата: Понедельник, 26.12.2016, 20:28 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Удалить из результата в листе 1 в колонке 9
Вставить в конец кода перед End With
[vba]
Код
   s = Range("I" & Rows.Count).End(xlUp).Row
    For j = 2 To .Range("D" & Rows.Count).End(xlUp).Row
       St = .Cells(j, 4)
       Range("I2:I" & s).Replace St, "", xlPart
    Next
[/vba]
 
Ответить
Сообщение
Удалить из результата в листе 1 в колонке 9
Вставить в конец кода перед End With
[vba]
Код
   s = Range("I" & Rows.Count).End(xlUp).Row
    For j = 2 To .Range("D" & Rows.Count).End(xlUp).Row
       St = .Cells(j, 4)
       Range("I2:I" & s).Replace St, "", xlPart
    Next
[/vba]

Автор - Wasilich
Дата добавления - 26.12.2016 в 20:28
wwizard Дата: Вторник, 27.12.2016, 01:48 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Осталось, соеденить, все макросы которые у меня есть для данного прайса, всего их пять

Могу ли сделать так: ??

[vba]
Код
Sub Макрос3()
    Call Макрос1
    Call Макрос2
End Sub
[/vba]


Сообщение отредактировал wwizard - Вторник, 27.12.2016, 01:54
 
Ответить
СообщениеОсталось, соеденить, все макросы которые у меня есть для данного прайса, всего их пять

Могу ли сделать так: ??

[vba]
Код
Sub Макрос3()
    Call Макрос1
    Call Макрос2
End Sub
[/vba]

Автор - wwizard
Дата добавления - 27.12.2016 в 01:48
K-SerJC Дата: Вторник, 27.12.2016, 06:52 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Могу ли сделать так: ??

можно и так:
[vba]
Код
sub runAll()
макрос1: макрос2: макрос3: макрос4: макрос5
End sub
[/vba]


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Вторник, 27.12.2016, 07:06
 
Ответить
Сообщение
Могу ли сделать так: ??

можно и так:
[vba]
Код
sub runAll()
макрос1: макрос2: макрос3: макрос4: макрос5
End sub
[/vba]

Автор - K-SerJC
Дата добавления - 27.12.2016 в 06:52
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование части из ячейки. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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