Страницы: 1
RSS
Найти строки с определенным значением, и в нужном столбце округлить значение вверх до кратного 3
 
Доброе утро,

ищу решение для такой задачи: нужно в таблице найти строки с определенным значением, и в нужном столбце округлить значение вверх до кратного 3.

Для примера, в столбце B есть позиции "труба d20", "труба d32". В столбце G стоит количество, например, "2,7", "4,1". Нужно их округлить соответственно до 3 и 6.

Подскажите пожалуйста, как это можно реализовать, наверное макросом? В книге множество однотипных листов.
 
Доброе
Пример, конечно, малоинформативен, что и как Вы хотите. Вариант как понял я
 
Код
Sub Round3()
  Dim a, r&
  With Worksheets(1)
    a = .UsedRange
    For r = 1 To UBound(a)
      If a(r, 2) Like "Труба*" Then
        If Round(a(r, 7), 0) <> a(r, 7) Or a(r, 7) Mod 3 <> 0 Then _
          a(r, 7) = (Int(a(r, 7) / 3) + 1) * 3
      End If
    Next
    .UsedRange = a
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Конкретно в этом примере можно так, но как уже написали выше - мало информации.
Код
=IF(MOD(G2;3)=G2;CEILING.MATH(G2;1);CEILING.MATH(G2;2))
 
Цитата
написал:
ДоброеПример, конечно, малоинформативен, что и как Вы хотите. Вариант как понял я
Ну математика такая. Но хочу заменить значения напротив позиции "труба" в столбце G по всей книге.
Изменено: Семен Владимиров - 27.05.2022 10:10:18
 
Ігор Гончаренко,

Большое спасибо.  
 
Только что-то туплю, как это применить ко всем листам?
 
Код
Sub Round3()
  Dim a, r&, ws as worksheet
  for each ws in Worksheets
    a = ws.UsedRange
    For r = 1 To UBound(a)
      If a(r, 2) Like "Труба*" Then
        If Round(a(r, 7), 0) <> a(r, 7) Or a(r, 7) Mod 3 <> 0 Then _
          a(r, 7) = (Int(a(r, 7) / 3) + 1) * 3
      End If
    Next
    ws.UsedRange = a
  next
End Sub


и аккуратно, этот макрос снесет ВСЕ ФОРМУЛЫ со  всех листов активного файла.
выполните не в том файле и готово.! по Ctrl-Z действия макроса не откатить обратно, только закрыть файл не сохраняя изменения))
Изменено: Ігор Гончаренко - 27.05.2022 11:40:28
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Премного благодарен, формул к счастью пока нет.
 
Столкнулся с побочным эффектом. У меня в следующем столбце H стоит значение массы типа 2,444 в формате "число в этой ячейке отформатировано как текст, или перед ним стоит апостроф". После исполнения макроса оно стало превращаться в 2444. Я потом через формат ячеек проставляя кол-во знаков после запятой возвратил их в нормальное состояние.

В общем я тут почитал, покопался, в частности тут
https://www.planetaexcel.ru/forum/?FID=8&PAGE_NAME=read&TID=7179

И написал свой второй в жизни макрос:

Код
Sub round3m()
For Each cc In [b2:b24]
If cc.Value Like "Труба*" Then 
        cc.Offset(, 5) = WorksheetFunction.RoundUp((cc.Offset(, 5).Value / 3), 0) * 3
End If
Next
End Sub
Вроде работает. Но вот не знаю, не будет ли тут каких-то подводных камней тоже? И как его запилить сразу на всех листах пока не допёр.
Страницы: 1
Наверх