Есть прайс "Micro" (на 24 000 строки) У прайса есть два листа. На листе 1 сам прайс. На Листе 2 условие для макроса. (если можно обойтись без него буду очень благодарен.)
Что требуется: В данном прайсе в 1ом столбце встречается название категории, и встречается имя производителя. Нужен макрос, который сможет их разделить и вывести в отдельные столбцы: Столбец №10 Выводить категорию: (Например [HD Медиаплееры]). а в столбец №11 выводить производителя, если такой указан на листе 2 (если можно обойтись без условий в листе 2, буду очень признателен)
Есть прайс "Micro" (на 24 000 строки) У прайса есть два листа. На листе 1 сам прайс. На Листе 2 условие для макроса. (если можно обойтись без него буду очень благодарен.)
Что требуется: В данном прайсе в 1ом столбце встречается название категории, и встречается имя производителя. Нужен макрос, который сможет их разделить и вывести в отдельные столбцы: Столбец №10 Выводить категорию: (Например [HD Медиаплееры]). а в столбец №11 выводить производителя, если такой указан на листе 2 (если можно обойтись без условий в листе 2, буду очень признателен)wwizard
Sub tt() Application.ScreenUpdating = 0 r_ = Range("A" & Rows.Count).End(xlUp).Row For i = 3 To r_ If IsNumeric(Range("A" & i)) Then Range("J" & i - 1 & ":K" & i - 1).Copy Range("J" & i & ":K" & i) ElseIf IsNumeric(Range("A" & i + 1)) Then Range("J" & i) = Range("J" & i - 1) Range("K" & i) = Range("A" & i) Else Range("J" & i) = Range("A" & i) Range("K" & i) = Range("A" & i + 1) End If Next i For i = 3 To r_ ' Удаление. Можно этот цикл не делать вообще. If Not IsNumeric(Range("A" & i)) Then Range("J" & i & ":K" & i).ClearContents End If Next i Application.ScreenUpdating = 1 End Sub
[/vba]
[vba]
Код
Sub tt() Application.ScreenUpdating = 0 r_ = Range("A" & Rows.Count).End(xlUp).Row For i = 3 To r_ If IsNumeric(Range("A" & i)) Then Range("J" & i - 1 & ":K" & i - 1).Copy Range("J" & i & ":K" & i) ElseIf IsNumeric(Range("A" & i + 1)) Then Range("J" & i) = Range("J" & i - 1) Range("K" & i) = Range("A" & i) Else Range("J" & i) = Range("A" & i) Range("K" & i) = Range("A" & i + 1) End If Next i For i = 3 To r_ ' Удаление. Можно этот цикл не делать вообще. If Not IsNumeric(Range("A" & i)) Then Range("J" & i & ":K" & i).ClearContents End If Next i Application.ScreenUpdating = 1 End Sub
Супер, спасибо огромное. Еще маленький вопрос, в некоторых ячейках 4го столбца попадаются такие надписи: Ожид. (90), Ожид. (120) и другие, возможно ли чтото добавить в макрос чтобы убирались буквенные значения и скобки (в общем все символы) и оставлялись только цифры там же, в тех же ячейках, т.е. 90, 120
Супер, спасибо огромное. Еще маленький вопрос, в некоторых ячейках 4го столбца попадаются такие надписи: Ожид. (90), Ожид. (120) и другие, возможно ли чтото добавить в макрос чтобы убирались буквенные значения и скобки (в общем все символы) и оставлялись только цифры там же, в тех же ячейках, т.е. 90, 120wwizard
Sub tt() Application.ScreenUpdating = 0 r_ = Range("A" & Rows.Count).End(xlUp).Row For i = 3 To r_
DelSymb (i)
If IsNumeric(Range("A" & i)) Then Range("J" & i - 1 & ":K" & i - 1).Copy Range("J" & i & ":K" & i) ElseIf IsNumeric(Range("A" & i + 1)) Then Range("J" & i) = Range("J" & i - 1) Range("K" & i) = Range("A" & i) Else Range("J" & i) = Range("A" & i) Range("K" & i) = Range("A" & i + 1) End If Next i For i = 3 To r_ ' Удаление. Можно этот цикл не делать вообще. If Not IsNumeric(Range("A" & i)) Then Range("J" & i & ":K" & i).ClearContents End If Next i Application.ScreenUpdating = 1 End Sub
Private Sub DelSymb(i As Long) Dim n As Long Str_ = Range("D" & i).Value n = InStr(1, Str_, "(", vbTextCompare) If n > 0 Then Range("D" & i).Value = Replace(Str_, Left(Str_, n), "") End If Str_ = Range("D" & i).Value n = InStr(1, Str_, ")", vbTextCompare) If n > 0 Then Range("D" & i).Value = Replace(Str_, Right(Str_, Len(Str_) - n + 1), "") End If End Sub
[/vba]
[vba]
Код
Sub tt() Application.ScreenUpdating = 0 r_ = Range("A" & Rows.Count).End(xlUp).Row For i = 3 To r_
DelSymb (i)
If IsNumeric(Range("A" & i)) Then Range("J" & i - 1 & ":K" & i - 1).Copy Range("J" & i & ":K" & i) ElseIf IsNumeric(Range("A" & i + 1)) Then Range("J" & i) = Range("J" & i - 1) Range("K" & i) = Range("A" & i) Else Range("J" & i) = Range("A" & i) Range("K" & i) = Range("A" & i + 1) End If Next i For i = 3 To r_ ' Удаление. Можно этот цикл не делать вообще. If Not IsNumeric(Range("A" & i)) Then Range("J" & i & ":K" & i).ClearContents End If Next i Application.ScreenUpdating = 1 End Sub
Private Sub DelSymb(i As Long) Dim n As Long Str_ = Range("D" & i).Value n = InStr(1, Str_, "(", vbTextCompare) If n > 0 Then Range("D" & i).Value = Replace(Str_, Left(Str_, n), "") End If Str_ = Range("D" & i).Value n = InStr(1, Str_, ")", vbTextCompare) If n > 0 Then Range("D" & i).Value = Replace(Str_, Right(Str_, Len(Str_) - n + 1), "") End If End Sub