Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Выдернуть цифры из смешанной (цифры-буквы) строки

Автор ig137, 11.07.2016, 19:49:43

« назад - далее »

ig137

Доброго дня!

Помогите плиз с решением нетривиальной (для меня) задачки.
Поставщик прислал размеры товаров в виде: h-60xw-46xd-5. Надо цифры разнести в три ячейки (высота, ширина, глубина), чтобы получилось отдельно 60, 46, 5.
Иногда встречается такое: h-15xø-10. Это значит, что диаметр 10, и должно получиться 15, 10, 10.

Размеры попадаются одно-, двух- и трёхзначные.

Файл прилагаю.

Заранее спасибо!

Дмитрий Щербаков(The_Prist)

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

ig137


sv2015

вариант функций uuu1,uuu2,uuu3,соответственно в столбцах: E,F,G


Function uuu1(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
    uuu1 = .Execute(t)(0)
End With
End Function


Function uuu2(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
    uuu2 = .Execute(t)(1)
End With
End Function


Function uuu3(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
    uuu3 = .Execute(t)(.Execute(t).Count - 1)
End With
End Function

Дмитрий Щербаков(The_Prist)

См.вложение.
Функция вводится сразу в ТРИ ячейки строки(B2:D2) как формула массива
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

ig137

Благодарю sv2015 и The_Prist.
Способ последнего лично мне показался проще в использовании. Его и применил.
Задача решена, вопрос закрыт.

Ещё раз - низкий поклон, потому как в реальном файле 3000 строк - сами представляете, сколько руками перелопачивать.

Всем добра!

sv2015

ig137,добрый день,если У Вас много строк можно вводить,как вариант, функции кнопкой,use в моем случае

  Sub use()
    Dim i&, i1&: i1 = Range("A" & Rows.Count).End(xlUp).Row
  For i = 2 To i1: Range("E" & i).Formula = "=uuu1(A" & i & ")"
    Range("F" & i).Formula = "=uuu2(A" & i & ")": Range("G" & i).Formula = "=uuu3(A" & i & ")"
  Next
End Sub

sv2015

добавил еще вариант для use1,что короче

Sub use1()
   Dim i&, j&, i1&: i1 = Range("A" & Rows.Count).End(xlUp).Row
For j = 1 To 3
  For i = 2 To i1: Range("E" & i).Offset(, j - 1).Formula = "=uuu" & j & "(A" & i & ")"
Next i, j
End Sub

Дмитрий Щербаков(The_Prist)

Цитата: sv2015 от 12.07.2016, 10:03:40For j = 1 To 3
:)
Sub use2()
    Dim i1&
    Application.Calculation = -4135
    i1 = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
    Range("E2:E" & i1).Formula = "=uuu1(A2)"
    Range("F2:F" & i1).Formula = "=uuu2(A2)"
    Range("G2:G" & i1).Formula = "=uuu3(A2)"
    Application.Calculation = -4105
End Sub

А вот в моем файле в любом случае нужен будет цикл, ибо формула массива :)
Sub use2()
    Dim lr As Long
    For lr = 2 To Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
        Range("E" & lr).Resize(, 3).FormulaArray = "=GetMesU(A" & lr & ")"
    Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru