2016-12-29 57 views
1

enter image description here我有两个vba代码,我想合并为单个进程。请需要某人帮忙。清零零公式和非公式单元格

第一代码

Sub DelAllZeros() 

    Application.Calculation = xlCalculationManual 

    Dim ws As Worksheet 
    For Each ws In Worksheets 
     On Error Resume Next 

     Set frange = ws.Cells.SpecialCells(xlCellTypeFormulas) 
     On Error GoTo 0 
     If Not frange Is Nothing Then 
      For Each c In frange 
       If c.Value = 0 Then 
        c.Formula = ClearContents 
       End If 
      Next c 
     End If 
     Set frange = Nothing 
    Next ws 

End Sub 

第二代码:

Sub DelAllZeros1() 

Dim ws As Worksheet 

    For Each ws In Worksheets 
     On Error Resume Next 
     ws.Select 
     Cells.Replace What:="0", Replacement:="", LookAt:=xlWhole, SearchOrder _ 
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Next ws 

End Sub 

第一代码将从式细胞和秒代码清除 “0” 将清除非公式的单元格。

+0

所以你想要清除所有细胞(公式或非公式)“0”?你的源范围是什么,整个工作表? –

+0

我想清除整个工作簿中的所有零值。如果任何单元格包含零(公式或非公式),应该清除(如空白) –

+0

好的,请尝试在我的答案下面的代码,让我知道它是否适合你 –

回答

0

尝试下面的代码(代码注释里面修改)

Option Explicit 

Sub DelAllZerosCombined() 

    Application.Calculation = xlCalculationManual 

    Dim ws As Worksheet, c As Range, Rng As Range 

    For Each ws In Worksheets 
     ' set range to occupied range in worksheet (save time in loop) 
     Set Rng = ws.Range("A1:" & ws.Cells.SpecialCells(xlCellTypeLastCell).Address) 

     If Not Rng Is Nothing Then 
      For Each c In Rng 
       If c.Value = 0 Then 
        ' unmerge "merged" cells 
        If c.MergeCells Then c.UnMerge 

        c.ClearContents 
       End If 
      Next c 
     End If 
     Set Rng = Nothing 

    Next ws 
    ' resume setting 
    Application.Calculation = xlCalculationAutomatic 

End Sub 
+0

感谢您的帮助,但我越来越运行“我们不能这样做到合并单元格” –

+0

@ayyappankm现在尝试(添加一个部分来检查单元格是否合并) –

+0

非常感谢Shai Rado,它的工作正常,但它的变化格式也需要,我需要不要清除我的单元格格式。请帮助改变这种情况。 –

0

试试这个代码。这将在不改变格式的情况下从工作表中的使用范围中清除0。

更新时间:

Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
    ws.Cells.Replace what:=0, Replacement:="", _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
    SearchFormat:=False, ReplaceFormat:=False 
Next ws 
+0

没有它的不工作,我需要清除整个工作簿中的0是否具有公式或者没有公式 –

+0

我已更新代码以在工作簿中的所有工作表中替换0。 – sn152

+0

嗨你的代码是从非公式单元格中删除0,我需要这个公式和非公式单元格。我已经有了代码(阅读我的问题),但它有2vba代码。 1将从非公式中清除0,另一个是从公式单元格中清除。 –

0

使用的文件>选项>高级设置,取消选中 “显示零...” 设置。此设置在每片的基础上,所以,至自动执行它的整个工作簿,把这个代码到的ThisWorkbook模块

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    ActiveWindow.DisplayZeros = False 
End Sub 

现在零将不会在任何片显示。

+0

代码是所有excel工作所必需的workbooj –

+0

您是否尝试过?当**任何**表被激活时,它将隐藏所有的零。点击任何表单。你能看到任何零值吗? – teylyn