Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2016, 22:02   #1
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию Вытащить содержимое из ячейки и записать в столбцы

Необходимо вытащить содержимое текстовой ячейки и записать в столбцы:

Готовый пример сделанный в ручную во вложении:

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

Например:

в ячейке А1 содержиться текст: COMPETITION STI 10W40 (1L) Масло мот. полусинт.

нам нужно вытащить и записать в соседние ячейки текст

в ячейку B1 добавим только: 10W-40 - добавим знак "-"

в ячейку C1 добавим только цифру: 1 - уберем "L" нужна просто цифра

в ячейку D1 добавим только нужный текст: полусинт. - так и оставим нужный текст

и так далее, во вложении готовый ручной вариант.

готов кинуть 200 руб на пиво)))) думаю задача не сильно сложная но мне очень нужная сегодня
Вложения
Тип файла: xlsx primer.xlsx (10.4 Кб, 8 просмотров)

Последний раз редактировалось kutt; 16.11.2016 в 22:19.
kutt вне форума Ответить с цитированием
Старый 16.11.2016, 23:20   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Функция возвращает массив из трех значений, вводить как формулу массива
Код:
Function Kutt(s$) As Variant()
Dim u&, d$()
  d = Split(WorksheetFunction.Trim(s))
  u = UBound(d)
  If u > 3 Then
    ReDim f(0 To 2)
    If d(u) Like "полус*" Then
      f(2) = "полусинтетика"
    ElseIf d(u) Like "мин*" Then
      f(2) = "минеральное"
    ElseIf d(u) Like "синт*" Then
      f(2) = "синтетика"
    End If
    f(1) = Val(Mid$(d(u - 3), 2))
    f(0) = Replace(d(u - 4), "w", "w-", , , vbTextCompare)
  End If
  Kutt = f
End Function
Вложения
Тип файла: xls primer (4).xls (56.5 Кб, 13 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.11.2016, 06:51   #3
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Функция возвращает массив из трех значений, вводить как формулу массива
Код:
Function Kutt(s$) As Variant()
Dim u&, d$()
  d = Split(WorksheetFunction.Trim(s))
  u = UBound(d)
  If u > 3 Then
    ReDim f(0 To 2)
    If d(u) Like "полус*" Then
      f(2) = "полусинтетика"
    ElseIf d(u) Like "мин*" Then
      f(2) = "минеральное"
    ElseIf d(u) Like "синт*" Then
      f(2) = "синтетика"
    End If
    f(1) = Val(Mid$(d(u - 3), 2))
    f(0) = Replace(d(u - 4), "w", "w-", , , vbTextCompare)
  End If
  Kutt = f
End Function
Спасибо за функцию, отблагодарил на кошелек в подписи!!!

Еще небольшой вопрос: Как эту функцию вставить в нужный мне файл? ))))
kutt вне форума Ответить с цитированием
Старый 17.11.2016, 08:14   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Alt+F11 (редактор VBA), Insert - Module, вставить код.
Да, и первой строкой модуля (перед функцией) поставьте эту строку, чтобы оператор Like работал с прописными и строчными буквами.
Код:
Option Compare Text
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.11.2016, 09:44   #5
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Alt+F11 (редактор VBA), Insert - Module, вставить код.
Да, и первой строкой модуля (перед функцией) поставьте эту строку, чтобы оператор Like работал с прописными и строчными буквами.
Код:
Option Compare Text
Можно еще небольшой вопрос:

продолжил этот файл примера добавив нужные мне строки, но почему то далее 12 строки выводиться уже все не по сценарию, во вложении готовый файл, если есть возможность, посмотрите пожалуйста, может я что делаю не так?))
Вложения
Тип файла: xls primer5.xls (113.5 Кб, 17 просмотров)
kutt вне форума Ответить с цитированием
Старый 17.11.2016, 11:52   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

при активном листе с данными выполните этот
Код:
Sub SplitTxt()
  Dim r&, re, s$, res$
  Set re = CreateObject("vbscript.RegExp")
  r = 2
  Do While Not IsEmpty(Cells(r, 1))
    s = Cells(r, 1).Value:  re.Pattern = "\d+W\d+"
    If re.test(s) Then res = re.Execute(s)(0):  Cells(r, 2) = Left(res, InStr(res, "W")) & "-" & Right(res, Len(res) - InStr(res, "W"))
    re.Pattern = "\d+L"
    If re.test(s) Then
      res = re.Execute(s)(0):  Cells(r, 4) = Right(s, Len(s) - InStrRev(s, " ")): Cells(r, 3) = Left(res, Len(res) - 1)
    End If
    r = r + 1
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вытащить содержимое родительского элемента Predator199 JavaScript, Ajax 5 16.06.2014 12:47
Присвоение тексту надписи содержимого ячейки, или текст надписи = содержимое ячейки. Как? NuR1k Microsoft Office Excel 3 12.04.2013 23:53
записать содержимое Listview в файл Leo20 Общие вопросы Delphi 0 26.11.2009 13:01
Записать содержимое буфера обмена в файл. sw3n Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 17.07.2009 02:39
Как записать в переменную содержимое RichEdit? nusik Общие вопросы C/C++ 1 12.06.2009 09:12