Есть точная информация какой максимальной длины может быть единица измерения? При допущении, что длина ед. изм. не больше 5 символов, получилась такая формула, которую надо вставить в соседний столбец
Если в формуле 5 поменять на бОльшее число, то есть вероятность, что оно найдет не последнюю левую скобку в строке...
В общем гляди файл:
ТОлько сначала считается столбец С, а только затем на его основании считается столбец В.
з.ы. вот блин, не внимательно прочитал задание... У меня то формулы получились, а надо было макросом... Но пусть в качестве полного оффтопа останется, ну или модераторы удалят, а то вдруг кому понадобится формулами...
Есть точная информация какой максимальной длины может быть единица измерения? При допущении, что длина ед. изм. не больше 5 символов, получилась такая формула, которую надо вставить в соседний столбец
Если в формуле 5 поменять на бОльшее число, то есть вероятность, что оно найдет не последнюю левую скобку в строке...
В общем гляди файл:
ТОлько сначала считается столбец С, а только затем на его основании считается столбец В.
з.ы. вот блин, не внимательно прочитал задание... У меня то формулы получились, а надо было макросом... Но пусть в качестве полного оффтопа останется, ну или модераторы удалят, а то вдруг кому понадобится формулами...Wowick
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]
[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
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]
как вариант [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