Страницы: 1
RSS
Заменить формулы на значения и удалить нули
 
 Нашел как удалять формулы из всей книги, применил и работает, остаются только значения. Нашел и вторую часть замысла - удалить ноли, путем автозамены через макрос, пример взял с этого же сайта, но там всего дня двух столбцов было условие, а мне нужно на всю книгу. Тут я в тупике.
Первая часть:
Код
Sub DelFormula()
For Each sh In ActiveWorkbook.Sheets
 sh.UsedRange.Value = sh.UsedRange.Value
Next
End Sub

Это вот чудо удаляет формулы оставляя значения (на удивление быстро, случайно нашел макрос на форумах), в книге более 100 листов, каждый заполнен прилично. Вес книги от 10мб до 56(в среднем). Макрос работает, к нему претензий нет.

Вторая часть:
Код
Sub Del_zero()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Replace What:="0", Replacement:="", LookAt:=xlWhole
    Next
End Sub

это уже удаление нолей. Уже сам пытался нахимичить рабочую версию, но никак. Для всего листа не работает, а когда что-то пытается запуститься, то выдает ошибку, типа: "Эта команда не может выполнятся для всех листов". Может чего и путаю, но вот с этим макросом у меня проблема. Нужно, чтобы он так же как и первый выполнялся во всей книге.

Изначально выглядел данный макрос так:
Код
Sub Удалить_нули()   
   Columns("A:B").Replace What:="0", Replacement:="", LookAt:=xlWhole   
End Sub

После чего я попытался его на всю книгу применить, но увы...

Помогите, пожалуйста.
 
Решил проблему с запуском второго макроса для всей книги.
Код
Sub delzero()
For Each ws In ActiveWorkbook.Worksheets
ws.Columns("F:G").Replace What:="0", Replacement:="", LookAt:=xlWhole
Next
End Sub

В моем случае этих двух столбцов как раз достаточно, для обработки.

Теперь другой вопрос возник, а как объединить эти 2 макроса в один?

оформляйте код в сообщениях с помощью кнопки <...> [МОДЕРАТОР]
 
Код
Sub DelZero  
  Dim ws As Worksheet
  For Each sh In ActiveWorkbook.Worksheets
    sh.UsedRange.Value = sh.UsedRange.Value
    ws.UsedRange.Replace 0, Empty, LookAt:=xlWhole
  Next
End
Изменено: Ігор Гончаренко - 14.07.2019 15:17:48
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо!!! Только немного не хочет работать макрос. Ошибку выдает.
И была опечатка, видимо, после <End> не было <sub>.
 
в ошибке пишет: "Переменная объекта или переменная блока не установлены"
Run-time error 91
 
а так?))
 sh.UsedRange.Value = sh.UsedRange.Value
 sh.UsedRange.Replace 0, Empty, LookAt:=xlWhole
(ws подкрался из другого макроса)
Изменено: Ігор Гончаренко - 14.07.2019 15:37:28
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Супер!  :)
Отрабатывает как часы! 10 секунд и вся книга обработана. Огромное спасибо!
 
Все круто, и еще осталось последнее, с чем пока даже не представляю как бороться.
Мы удалили из книги все формулы, оставив значения - отлично
Мы удалили ноли из полученных значений - замечательно
Теперь сложнее. Ищем в столбцах "F" и "G" ноли(которые мы удачно удаляли из всей книги, теперь надо немного откатиться назад), и если они есть, то удаляем содержимое строки с этими нолями, но не всю строку, а только определенные ячейки из столбцов, конкретно: "B, C, D, E, F, G, H".
Можно и всю строку, но тут есть проблема, у меня есть объединенные ячейки, которые не позволят просто так это сделать, поэтому и вынужден убивать только диапазон значений по горизонтали
 
что там у Вас в данных знаете только Вы один
или точно обьясняете, что нужно сделать (и тогда кто-то сможет помочь) или делаете все сами
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Сам я в любом случае пытаюсь разобраться как и что сделать, только без помощи не обойтись.
Я не пойму какой надо макрос написать, чтобы он проверял значение в определенных столбцах (F и G) таблицы и, если это значение равно нулю, то удаляет текущую строку. Но в этой строке есть объединенные ячейки, которые не позволяют всю ее удалить. А чтобы удалить то, что мне нужно из этой строки , то достаточно удалить содержимое первых 8 ячеек этой строки. Может чего непонятно объясняю, поэтому критику воспринимаю адекватно.
 
Цитата
victorSwild написал:
если это значение равно нулю,
в F и G 2 значения
удалять - это удалить или очистить (последствия этих действий очень разные, сделайте вручную - увидите)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Нашел вот такой макрос:
Код
Sub DELETE()

Dim AllRows As Object, FirstCell As Object, FoundCell As Object

    Application.ScreenUpdating = False

    Set FirstCell = Columns("F:G").Find(what:=0, LookAt:=xlWhole)
    If FirstCell Is Nothing Then Exit Sub

    Set AllRows = Rows(FirstCell.Row)
    Set FoundCell = FirstCell

    Do
        Set FoundCell = Columns("F:G").FindNext(After:=FoundCell)
        Set AllRows = Union(Rows(FoundCell.Row), AllRows)
        If FoundCell.Address = FirstCell.Address Then Exit Do
    Loop
    AllRows.DELETE
End Sub
работает на страницу, но удаляет не всю строку, а только часть
Удаляет. только вот как раз "удаляет" строку. А надо очищать))
Изменено: victorSwild - 14.07.2019 16:48:30
 
Цитата
Ігор Гончаренко написал:
в F и G 2 значения. удалять - это удалить или очистить (последствия этих действий очень разные, сделайте вручную - увидите)
прошу прощения - очистить, если быть точнее. Чтобы содержимое ячеек было пустым

Код
Sub DELETE()

Dim AllRows As Object, FirstCell As Object, FoundCell As Object

    Application.ScreenUpdating = False

    Set FirstCell = Columns("F:G").Find(what:=0, LookAt:=xlWhole)
    If FirstCell Is Nothing Then Exit Sub

    Set AllRows = Rows(FirstCell.Row)
    Set FoundCell = FirstCell

    Do
        Set FoundCell = Columns("F:G").FindNext(After:=FoundCell)
        Set AllRows = Union(Rows(FoundCell.Row), AllRows)
        If FoundCell.Address = FirstCell.Address Then Exit Do
    Loop
    AllRows.Clear
End Sub
Вот этот макрос работает. оказывается и строку может очищать.
Сейчас буду пробовать на всю книгу так же пилить. Может получится.  
 
Попытался сообразить макрос на всю книгу, но ничего не выходит. Он-то работает и ячейки разъединяет для удаления, все как надо, но на всю книгу никак не получается сделать. Скину код, который на данный момент получился. Не доработан, но рабочий. Прошу помощи с этим вопросом. Сам - никак не в силах. На текущий лист только работает
Код
Sub DELETE()
For Each sh In ActiveWorkbook.Worksheets
Dim AllRows As Object, FirstCell As Object, FoundCell As Object
 
    sh.Application.ScreenUpdating = False
 
    Set FirstCell = Columns("F:G").Find(what:=0, LookAt:=xlWhole)
    If FirstCell Is Nothing Then Exit Sub
 
    Set AllRows = Rows(FirstCell.Row)
    Set FoundCell = FirstCell
 
    Do
        Set FoundCell = Columns("F:G").FindNext(After:=FoundCell)
        Set AllRows = Union(Rows(FoundCell.Row), AllRows)
        If FoundCell.Address = FirstCell.Address Then Exit Do
    Loop
    AllRows.UnMerge
        AllRows.Clear
        Next
End Sub
Изменено: victorSwild - 14.07.2019 18:47:37
 
Код
Sub DELETE()
  Dim sh As Worksheet, rg As Range
  Application.ScreenUpdating = False
  For Each sh In Worksheets
    sh.UsedRange.Value = sh.UsedRange.Value
    Do
      Set rg = sh.Range("F:G").Find(0, lookat:=xlWhole)
      If rg Is Nothing Then Exit Do
      rg.EntireRow.UnMerge:  rg.EntireRow.ClearContents
    Loop
  Next
  Application.ScreenUpdating = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Вот спасибо!!! Работает! Благодарю Вас! Всегда знал, что на этом сайте есть люди, которые реально знают свое дело :)  
 
victorSwild, Ігор Гончаренко, при использовании инструмента ""Найти и Заменить" лучше прописывать все аргументы, т.к. настройки инструмента запоминаются и непрописанные явно будут заменены на последние использованные. Тема
Изменено: Jack Famous - 15.07.2019 09:00:14
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Огромное спасибо за помощь!!! Тема закрыта!
Страницы: 1
Наверх