Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 宏删除包含所有0';s_String_Excel_Rows_Vba - Fatal编程技术网

String 宏删除包含所有0';s

String 宏删除包含所有0';s,string,excel,rows,vba,String,Excel,Rows,Vba,好的,这是我正在使用的桌子: 我需要一个宏来删除包含四个0的行,目前我能想到的唯一方法是要求单元格为空,即“ 0实际上是作为字符串或数字计算的,还是等同于“” 我认为问题可能与我的0中的一些是文本字符串,而另一些是数字有关,我只是认为这无关紧要。这里,我为您准备了一个。试试这个 Public Sub removeRow() Dim row As Integer 'Set the start row. row = 1 'Loop all row from s

好的,这是我正在使用的桌子:

我需要一个宏来删除包含四个0的行,目前我能想到的唯一方法是要求单元格为空,即“

0实际上是作为字符串或数字计算的,还是等同于“”


我认为问题可能与我的0中的一些是文本字符串,而另一些是数字有关,我只是认为这无关紧要。

这里,我为您准备了一个。试试这个

Public Sub removeRow()

    Dim row As Integer

    'Set the start row.
    row = 1

    'Loop all row from sheet until colum "A" cell is blank
    Do While Sheets("sheetname").Range("A" & row) <> ""

        'If all cell are 0.
        If Sheets("sheetname").Range("A" & row) = 0 And Sheets("sheetname").Range("B" & row) = 0 And Sheets("sheetname").Range("C" & row) = 0 And Sheets("sheetname").Range("D" & row) = 0 Then

            'Delete entire row
            Sheets("sheetname").Range("A" & row).EntireRow.Delete

        Else

            'Increse row
            row = row + 1

        End If

    Loop

End Sub
Public Sub-remoterow()
将行设置为整数
'设置起始行。
行=1
'从工作表循环所有行,直到列“A”单元格为空
不要在工作表(“sheetname”).范围(“A”行和“行”)
'如果所有单元格均为0。
如果图纸(“图纸名称”)范围(“A”和行)=0,图纸(“图纸名称”)范围(“B”和行)=0,图纸(“图纸名称”)范围(“C”和行)=0,图纸(“图纸名称”)范围(“D”和行)=0,则
'删除整行
图纸(“图纸名称”)。范围(“A”行和行)。EntireRow.Delete
其他的
“增加行数
行=行+1
如果结束
环
端接头

试试这个小宏……它检查每行的部分总和:

Sub RowKiller()
    Dim N As Long, i As Long, wf As WorksheetFunction
    Dim rng As Range
    N = Cells(Rows.Count, "A").End(xlUp).Row
    Set wf = Application.WorksheetFunction

    For i = N To 2 Step -1
        Set rng = Range(Cells(i, 1), Cells(i, 4))
        If wf.Sum(rng) = 0 Then
            rng.EntireRow.Delete
        End If
    Next i
End Sub

创建要删除的行字符串,然后执行一次删除。这样做时无需向后轮询,而且应该比逐行删除快得多:

Sub DeleteRows()
Dim i As Long, DelRange As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Doesn't matter which way you go when you delete in one go
    If CLng(Cells(i, 1)) = 0 And CLng(Cells(i, 2)) = 0 And CLng(Cells(i, 3)) = 0 And CLng(Cells(i, 4)) = 0 Then DelRange = DelRange & "," & i & ":" & i
Next i
Range(Right(DelRange, Len(DelRange) - 1)).Delete
End Sub
使用CLng将字符串零转换为测试的长零

不过,一个小小的警告是,如果activecell为空,CLng(activecell)将返回0,因此空白行也将被删除

编辑:当遇到字符串时,放入IsNumeric测试以计数错误(无法CLng真字符串)


那么您想删除第2.4.5.9.10行吗?我只需编写一个循环,遍历每一行,如果单元格的总和为=0I,则删除它。我得到运行时错误“13”:类型不匹配。在
Do While Sheets(“Publish”).Range(“A”&row)”行上,我必须对这个答案进行向下投票。通过向前循环而不是向后循环,此代码将跳过任何应该删除的背对背行。在本例中,此代码将丢失(而不是删除)第5行和第10行。是的,我修改了该错误的代码。现在,它运行良好。感谢您的建议。运行时错误“1004”:无法获取WorksheetFunction类的Sum属性
Sub DeleteRows()
Dim i As Long, DelRange As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Doesn't matter which way you go when you delete in one go
    If IsNumeric(Cells(i, 1)) And IsNumeric(Cells(i, 2)) And IsNumeric(Cells(i, 3)) And IsNumeric(Cells(i, 4)) Then
        If CLng(Cells(i, 1)) = 0 And CLng(Cells(i, 2)) = 0 And CLng(Cells(i, 3)) = 0 And CLng(Cells(i, 4)) = 0 Then DelRange = DelRange & "," & i & ":" & i
    End If
Next i
Range(Right(DelRange, Len(DelRange) - 1)).Delete
End Sub