Пока еще новичок и прошу подсказки в создании макроса. Задача следующая, нужно выполнить поиск цифр обрамленных [ ] (квадратными скобками) и увеличить содержимое на заданное количество процентов. (причем, если стоит +, то работать с положительным числом, если -, то с отрицательными) Удалено. Нарушение Правил форума [moder]Читаем Правила форума, регистрируемся, прикладываем файл с примером сюда[/moder]
Доброго время суток!
Пока еще новичок и прошу подсказки в создании макроса. Задача следующая, нужно выполнить поиск цифр обрамленных [ ] (квадратными скобками) и увеличить содержимое на заданное количество процентов. (причем, если стоит +, то работать с положительным числом, если -, то с отрицательными) Удалено. Нарушение Правил форума [moder]Читаем Правила форума, регистрируемся, прикладываем файл с примером сюда[/moder]Константин
Елена, зачем же столько лишних циклов?! Вам процессор не жалко так гонять?
вот, тем же "дедовским" методом, но без лишних "телодвижений"...
[vba]
Код
Sub PlusMinusSkobka() Dim strText As String Dim lngRows As Long Dim lngRow As Long Dim i As Long Dim j As Long Dim n As Long ' если в [] нужны точные данные (с цифрами после запятой), то в этой строке смени тип с Long на Double Dim m As Long
lngRows = Cells(Rows.Count, 3).End(xlUp).Row For lngRow = 2 To lngRows m = 1 strText = Cells(lngRow, 3).Value Do i = InStr(m, strText, "[") If i Then i = i + 1 j = InStr(i, strText, "]") If j Then n = Val(Mid$(strText, i, j - i)) n = n * 2.5 ' т.е., умножить на 250% 'n = n * Val([G1]) ' а так умножать на значение в ячейке G1 strText = Left$(strText, i - 1) & IIf(n >= 0, "+", "") & n & Mid$(strText, j) m = i + Len(Abs(n) & " ") + 1 Else ' здесь нужно обрабатывать ситуацию, когда в строке есть открывающая [, но нет закрывающей ] Exit Do ' а пока, просто переходим к обработке следующей ячейки End If Else Exit Do ' необработанных конструкций [] в этой ячейке больше нет, переходим к обработке следующей ячейки End If Loop Cells(lngRow, 4).Value = strText Next End Sub
[/vba]
[p.s.]а если знак у числа в [] присутствует ВСЕГДА, то можно еще немного упростить...
Елена, зачем же столько лишних циклов?! Вам процессор не жалко так гонять?
вот, тем же "дедовским" методом, но без лишних "телодвижений"...
[vba]
Код
Sub PlusMinusSkobka() Dim strText As String Dim lngRows As Long Dim lngRow As Long Dim i As Long Dim j As Long Dim n As Long ' если в [] нужны точные данные (с цифрами после запятой), то в этой строке смени тип с Long на Double Dim m As Long
lngRows = Cells(Rows.Count, 3).End(xlUp).Row For lngRow = 2 To lngRows m = 1 strText = Cells(lngRow, 3).Value Do i = InStr(m, strText, "[") If i Then i = i + 1 j = InStr(i, strText, "]") If j Then n = Val(Mid$(strText, i, j - i)) n = n * 2.5 ' т.е., умножить на 250% 'n = n * Val([G1]) ' а так умножать на значение в ячейке G1 strText = Left$(strText, i - 1) & IIf(n >= 0, "+", "") & n & Mid$(strText, j) m = i + Len(Abs(n) & " ") + 1 Else ' здесь нужно обрабатывать ситуацию, когда в строке есть открывающая [, но нет закрывающей ] Exit Do ' а пока, просто переходим к обработке следующей ячейки End If Else Exit Do ' необработанных конструкций [] в этой ячейке больше нет, переходим к обработке следующей ячейки End If Loop Cells(lngRow, 4).Value = strText Next End Sub
[/vba]
[p.s.]а если знак у числа в [] присутствует ВСЕГДА, то можно еще немного упростить...KSV