Страницы: 1
RSS
Преобразование формул в значения где значение больше нуля...
 
Здравстуйте,

Возможно ли с помощью макроса, после сохранения или закрытия книги преобразовать ячейки с формулами в столбце "D" в значения с условием где сумма в ячейке больше нуля 0?

П.С. Тут https://www.planetaexcel.ru/techniques/11/215/ я прочёл про это. Помогите пожалуйста решить задачу по моему условию.
Изменено: Шахин - 17.01.2020 15:38:17
По почерку принтера можно судить о том, как нервничает компьютер
 
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
ThisWorkbook.Worksheets("List1").Activate
For i = 4 To Cells(Rows.Count, 4).End(xlUp).Row
 If Cells(i, 4).Value <> 0 Then
    Cells(i, 4).Value = Cells(i, 4).Value
 End If
Next i
ThisWorkbook.Save
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Long
ThisWorkbook.Worksheets("List1").Activate
For i = 4 To Cells(Rows.Count, 4).End(xlUp).Row
 If Cells(i, 4).Value <> 0 Then
    Cells(i, 4).Value = Cells(i, 4).Value
 End If
Next i
End Sub
 
_Igor_61, Большое спасибо!  :D  :idea:  
По почерку принтера можно судить о том, как нервничает компьютер
 
_Igor_61, Здравствуйте ещё раз! На началах Ваш макрос работал безупречно, только вот когда диапазон вычисления строк увеличивается от 2 до 2000, то макрос уже считает долго. Можно с этим что то сделать? Или так должно быть?
По почерку принтера можно судить о том, как нервничает компьютер
 
Попробуйте добавить это:
   
Код
With Application
        .ScreenUpdating = False   'отключаем обновление экрана
        .Calculation = xlManual     'отключаем автоматический пересчет формул

      ЗДЕСЬ ВАШ КОД:
    For i=4 To...................
    ..................................
   ...................................
    Next i

        .Calculation = xlAutomatic  'включаем автоматический пересчет формул
        .ScreenUpdating = True     'включаем обновление экрана
End With
 
_Igor_61, Спасибо большое!  :D  :idea:  
Изменено: Шахин - 30.01.2020 15:18:37
По почерку принтера можно судить о том, как нервничает компьютер
 
Здравствуйте ещё раз уважаемые,

Помогите пожалуйста преобразовать макрос в другое условие. Условие такое, чтобы макрос преобразовал все ячейки в значения где по условие значение в ячейке больше 0.

Текущий макрос выглядит так:
Код
ThisWorkbook.Worksheets("Serfiyyat 2").Activate
With Application
        .ScreenUpdating = False   'отключаем обновление экрана
        .Calculation = xlManual     'отключаем автоматический пересчет формул
For i = 6 To Cells(Rows.Count, 10).End(xlUp).Row
 If Cells(i, 10).Value <> "" Then
    Cells(i, 10).Value = Cells(i, 10).Value
 End If
Next i
.Calculation = xlAutomatic  'включаем автоматический пересчет формул
        .ScreenUpdating = True     'включаем обновление экрана
End With
End Sub
По почерку принтера можно судить о том, как нервничает компьютер
 
Код
If Cells(i, 10).Value <>0 Then
    Cells(i, 10).Value = Cells(i, 10).Value
 End If
 
_Igor_61, Про то чтобы поменять значения на 0 я смог, но вот чтобы для всего листа?
Изменено: Шахин - 06.04.2020 12:28:56
По почерку принтера можно судить о том, как нервничает компьютер
 
У Вас таблица на весь лист?  8-0  
 
_Igor_61, Ну, там не так уж и много столбцов и строк )) Допустим надо от столбца  A1 до столбца L2000.
Изменено: Шахин - 06.04.2020 12:32:45
По почерку принтера можно судить о том, как нервничает компьютер
 
Ну так сделайте цикл по столбцам и в нем - вложенный по строкам как в #7
 
_Igor_61, Для каждого столбца по отдельности?
По почерку принтера можно судить о том, как нервничает компьютер
 
Код
Dim lc&, lr&

For lc = 1 To Cells(1, Columns.Count).End(xlToLeft).Column       'по столбцам с первого до последнего заполненного
For lr = 6 To Cells(Rows.Count, lc).End(xlUp).Row                'по строкам от шестой и до последней
  If Cells(lr, lc).Value <> 0 Then
     Cells(lr, lc).Value = Cells(lr, lc).Value
  End If
Next lr
Next lc
 
_Igor_61, Что я делаю не правильно? Формула не работает  :(
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Long
Dim lc&, lr&
ThisWorkbook.Worksheets("Sheet1").Activate
With Application
        .ScreenUpdating = False   
        .Calculation = xlManual     
For lc = 1 To Cells(1, Columns.Count).End(xlToLeft).Column       
For lr = 2 To Cells(Rows.Count, lc).End(xlUp).Row                
  If Cells(lr, lc).Value <> 0 Then
     Cells(lr, lc).Value = Cells(lr, lc).Value
  End If
Next lr
Next lc
.Calculation = xlAutomatic  
        .ScreenUpdating = True     
End With
End Sub
По почерку принтера можно судить о том, как нервничает компьютер
 
Cells(1, Columns.Count).End(xlToLeft).Column - проверка идет по первой строке а у Вас данные в третьей.
Cells(строка, столбец). Почитайте пр Cells в интернете
Либо покажите Вашу таблицу чтобы не гадать что Вы хотите
Изменено: _Igor_61 - 06.04.2020 17:42:48
 
Цитата
Шахин написал:
где по условие значение в ячейке больше 0.
если условие не выполняется, что делаем? оставляем формулу, или пусто?
 
Михаил Витальевич С., похоже что у ТС периодически возникают различные задачи, связанные с таблицами с которыми ему приходится работать, но он не может понять почему получается не тот результат который ему нужен. Отсюда и не получается правильно сформулировать задачу. Возможно начальство требует то так то этак, а возможно ТС пытается решить задачу имеющимися познаниями. Таблицы почему-то не показывает...  :)
 
Цитата
_Igor_61 написал:
Таблицы почему-то не показывает...
А это, чтобы вам жизнь медом не казалась.
Вопрос - ответ. Никакого интереса к теме.
 
Цитата
RAN написал:
это, чтобы вам жизнь медом не казалась
++++++
Да, нужно уметь держать себя в руках при любых обстоятельствах. Учусь...
Еще бы научиться понимать где действительно просят помощи  
Изменено: _Igor_61 - 07.04.2020 00:13:34
 
_Igor_61,  Я разобрался! Респект! :D  :idea:  
По почерку принтера можно судить о том, как нервничает компьютер
Страницы: 1
Наверх