Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 删除空(";)行VBA_Excel_Vba - Fatal编程技术网

Excel 删除空(";)行VBA

Excel 删除空(";)行VBA,excel,vba,Excel,Vba,我现在搜索了两个小时。。。 但我没有让它工作,我看到了很多关于堆栈溢出的相关问题。。。但是没有找到正确的解决方案 我要找的是: 我有一个Excel工作簿,它是使用power query构建的。(效果很好) 我有一个VBA脚本,可以每4小时刷新一次电源查询(工作正常) 我有一个VBA脚本,可以将所有图纸提取到csv(工作非常完美) 但是有一个陷阱,这些表是用特殊的字符构建的,所以我创建了一个额外的表,包括所有你能想到的替换。。。(也可以完美地工作) 但这张额外的表格使用了3000行的信息。(基

我现在搜索了两个小时。。。 但我没有让它工作,我看到了很多关于堆栈溢出的相关问题。。。但是没有找到正确的解决方案

我要找的是:

  • 我有一个Excel工作簿,它是使用power query构建的。(效果很好)
  • 我有一个VBA脚本,可以每4小时刷新一次电源查询(工作正常)
  • 我有一个VBA脚本,可以将所有图纸提取到csv(工作非常完美)
但是有一个陷阱,这些表是用特殊的字符构建的,所以我创建了一个额外的表,包括所有你能想到的替换。。。(也可以完美地工作)

但这张额外的表格使用了3000行的信息。(基于从power query中提取的表)。电源查询是活的,有时我需要2000行,有时2800+,这就是为什么我做了3000行的基础上额外的表

根据公式:

=IFERROR(substitutions.....;"")

文件底部的单元格看起来是空的,因为我在公式中使用了“”,但实际上这些单元格不是空的。。。因此,我需要一个VBA脚本,它将查找用“……

< p>创建的空白单元格”,我找到了一个解决方案:

Sub DeleteRowsWithEmptyColumnDCell()
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.ActiveSheet.Range("A1:A3000")
With rng
    ' Loop through all cells of the range
    ' Loop backwards, hence the "Step -1"
    For i = .Rows.Count To 1 Step -1
        If .Item(i) = "" Then
            ' Since cell is empty, delete the whole row
            .Item(i).EntireRow.Delete
        End If
    Next i
End With
End Sub

但是它很慢&占用大量内存。。。我希望有人有更好的解决办法

我确实找到了解决办法:

Sub DeleteRowsWithEmptyColumnDCell()
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.ActiveSheet.Range("A1:A3000")
With rng
    ' Loop through all cells of the range
    ' Loop backwards, hence the "Step -1"
    For i = .Rows.Count To 1 Step -1
        If .Item(i) = "" Then
            ' Since cell is empty, delete the whole row
            .Item(i).EntireRow.Delete
        End If
    Next i
End With
End Sub

但是它很慢&占用大量内存。。。我希望有人有更好的解决办法

这会更快。不要删除循环中的单元格,而是在循环外部执行。这将导致仅删除一个行实例



这会更快。不要删除循环中的单元格,而是在循环外部执行。这将导致仅删除一个行实例



如果你真的在
中替换,那么你的问题就在别处。您也可以尝试
TRIM
来摆脱领先/落后的空间。另外,没有足够的信息来提供解决方案。你在哪里寻找空白单元格?哪一列?如果你真的在
中替换,那么你的问题就在别处。您也可以尝试
TRIM
来摆脱领先/落后的空间。另外,没有足够的信息来提供解决方案。你在哪里寻找空白单元格?什么列?在循环之前设置为
Application.screenUpdatement=False
,在循环之后设置为True。在循环之前设置为
Application.screenUpdatement=False
,在循环之后设置为True。不过,如果要在
DeleteMe
中添加多个单元格,最好更改
if
的顺序,使用
如果不删除我什么都不是,那么
,因为第一次之后的所有时间都将进入
如果
,然后转到
其他
部分。因此,如果颠倒顺序,则直接转到
if
。希望我有一个小小的评论,如果你想在
DeleteMe
中添加许多单元格,最好更改
if
的顺序,使用
if note DeleteMe Is Nothing then
,因为第一次之后的所有时间都会进入
if
然后进入
Else
部分。因此,如果颠倒顺序,则直接转到
if
。希望我讲得通