Такой же код, но с небольшой поправочкой: Хочу чтобы, если в выделение попадут "М/к, сталь или труб", и если ячейка справа "м", то вторая ячейка справа округлялась до трёх знаков после запятой. Иначе, все остальные варианты текста в выделенных ячейках, если ячейка справа "м", то вторая ячейка справа округлялась до одного знака после запятой. [vba]
Код
' М/к, сталь, труб в метрах до 3 знаков, остальные "М" до 1 знака For Each Rng In Selection If InStr(1, UCase(Rng), UCase("М/к")) > 0 Or InStr(1, UCase(Rng), UCase("сталь")) > 0 Or InStr(1, UCase(Rng), UCase("труб")) > 0 Then If Rng.Offset(, 1) = "м" Then Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3) Else ' If InStr(1, UCase(Rng), UCase("... здесь беда неподъёмная (как указать любой текст? "*") If Rng.Offset(, 1) = "м" Then Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End If End If End If Next Rng End Sub
[/vba]
Такой же код, но с небольшой поправочкой: Хочу чтобы, если в выделение попадут "М/к, сталь или труб", и если ячейка справа "м", то вторая ячейка справа округлялась до трёх знаков после запятой. Иначе, все остальные варианты текста в выделенных ячейках, если ячейка справа "м", то вторая ячейка справа округлялась до одного знака после запятой. [vba]
Код
' М/к, сталь, труб в метрах до 3 знаков, остальные "М" до 1 знака For Each Rng In Selection If InStr(1, UCase(Rng), UCase("М/к")) > 0 Or InStr(1, UCase(Rng), UCase("сталь")) > 0 Or InStr(1, UCase(Rng), UCase("труб")) > 0 Then If Rng.Offset(, 1) = "м" Then Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3) Else ' If InStr(1, UCase(Rng), UCase("... здесь беда неподъёмная (как указать любой текст? "*") If Rng.Offset(, 1) = "м" Then Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End If End If End If Next Rng End Sub
Sub q() Dim Rng As Range For Each Rng In Selection If Rng.Offset(, 1) = "м" Then Select Case True Case LCase(Rng.Value) Like "*м/к*", LCase(Rng.Value) Like "*сталь*", LCase(Rng.Value) Like "*труб*" Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3) Case Else Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End Select Else Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End If Next End Sub
[/vba]
[offtop]Электроды стальные видел, но чтобы толуол! [/offtop]
[vba]
Код
Sub q() Dim Rng As Range For Each Rng In Selection If Rng.Offset(, 1) = "м" Then Select Case True Case LCase(Rng.Value) Like "*м/к*", LCase(Rng.Value) Like "*сталь*", LCase(Rng.Value) Like "*труб*" Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3) Case Else Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End Select Else Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1) End If Next End Sub
[/vba]
[offtop]Электроды стальные видел, но чтобы толуол! [/offtop]RAN
Приветствую. С утра не могу собраться с мыслями и найти ответ почему этот код [vba]
Код
For Each rng In Selection If rng = "шт" Then rng.Offset(, 1) = Round(rng.Offset(, 1)) End If Next rng
[/vba] округляет 392,5 до 392 (это же не арифметично как-то)
Разобрался: Код чётные 4,5 и 6,5 и 8,5 округляет в меньшую сторону, а не чётные 3,5 и 5,5 и 7,5 округляет в большую (точнее правильную) сторону. Я читал, что это банковское округление и сделано оно для нивелирования погрешности. Но мне по душе простое арифметическое округление до целого числа.
Приветствую. С утра не могу собраться с мыслями и найти ответ почему этот код [vba]
Код
For Each rng In Selection If rng = "шт" Then rng.Offset(, 1) = Round(rng.Offset(, 1)) End If Next rng
[/vba] округляет 392,5 до 392 (это же не арифметично как-то)
Разобрался: Код чётные 4,5 и 6,5 и 8,5 округляет в меньшую сторону, а не чётные 3,5 и 5,5 и 7,5 округляет в большую (точнее правильную) сторону. Я читал, что это банковское округление и сделано оно для нивелирования погрешности. Но мне по душе простое арифметическое округление до целого числа.Yar4i
Sub Round2() Range("c1:c12").Select For Each rng In Selection If rng = "шт" Then rng.Offset(, 1) =Application.Round (rng.Offset(, 1)) End If Next rng End Sub
[/vba] Выдает: run-time error 1004 неверное число аргументов и подкрашивает жёлтым эту строку [vba]
Sub Round2() Range("c1:c12").Select For Each rng In Selection If rng = "шт" Then rng.Offset(, 1) =Application.Round (rng.Offset(, 1)) End If Next rng End Sub
[/vba] Выдает: run-time error 1004 неверное число аргументов и подкрашивает жёлтым эту строку [vba]
Просматривал старые записи и не смог понять, что я тогда "решил" (приложил неверный файл). Теперь мне он понадобился и пришлось опять тестировать Round. Теперь-то точно решил. Спасибо.
Просматривал старые записи и не смог понять, что я тогда "решил" (приложил неверный файл). Теперь мне он понадобился и пришлось опять тестировать Round. Теперь-то точно решил. Спасибо.Yar4i4