有时候,我们必须在Excel for loop中删除文件中的空白行或列,我们将编写vba宏/代码。我们需要使用的代码因情况而异。有时我们可能必须删除一行或一列,而有时我们需要根据一个或多个条件删除整个范围的行或列,有时甚至是行/列。

如果您只需要删除一个或多个特定的行或列,我们使用VBA excel进行循环,则可以使用以下代码-_Option Explicit Sub macro1()

Application.DisplayAlerts = False与工作表(“ Sheet1”)

Rows(“ 5:6”)。Delete .Columns(“ A:D”)。Delete End with Application.DisplayAlerts = True End Sub_您可以看到已复制到Module1代码窗口中的代码。要复制代码,请在文件上按Alt + F11。在左侧,您将看到Microsoft Excel对象。右键单击并选择插入,然后单击模块。代码窗口将出现在右侧。复制代码。见下图-

img1

Application.DisplayAlerts = False

我们将显示警报设置为false,并使用所需的文件名保存文件。然后将显示警报设置为true,就在End Sub之前。

With Worksheets(“ Sheet1”)是一个With循环,以End With结尾。

如果将其用于循环VBA Excel,则此循环中使用该对象的所有语句都不必以“ Worksheets(“ Sheet1”)”开头。相反,它们可以直接以点(。)开头。

_.Rows(“ 5:6”)。Delete_仅删除第5行和第6行。

_Columns(“ A:D”)。Delete_将删除列A至D。在这种情况下,仅指定的行/列将被删除。

但是,有时您可能必须根据某些条件删除行/列。例如让我们假设我们要删除文件中所有包含“ Test”作为标题的列。在这种情况下,我们需要一个循环,该循环将从一列检查到另一列,并在满足条件时将其删除。

我们可以使用这样的代码。请注意,每个人都会以自己熟悉的方式编写代码。这只是可以编码的方法之一,而不是唯一的方法。

_Option显式子macro2()

与工作表一样长的昏暗,与工作表一样长的lcol。DisplayAlerts= False与工作表(“ Sheet1”)

lcol = .Range(“ A1”)。End(xlToRight).Column for i = lcol to 1步骤-1如果.Cells(1,i).Value =“”,则退出If .Cells(1,i)。值=“测试”然后.Columns(i)。删除下一个i以Application.DisplayAlerts = True结尾Sub_请参见下图

中的代码,保存在模块1中。这里lcol是工作表中的最后一列,其中包含数据。如果您碰巧在空白文件上测试此代码,则根据您的excel版本,lcol的值为16384或最后一列的列号。然后,我们从最后一列循环到第一列,每次都向后移动一步。我们向后移动,因为只有当您从最后一行或最后一列开始删除时,删除代码才能正常工作。如果从1 ^ st ^行/列开始,则代码容易出错。

img2

如果在空白文件上运行宏,则在其中输入1 ^ st ^ if条件。在Excel中,宏将从最后一列(在这种情况下为16384)一直循环到第1列,这可能需要相当长的时间。因此,如果代码找到空白列,它将通过exit For语句立即终止循环。 2 ^ nd ^ if条件检查值是否为“ Test”,如果找到“ Test”,则删除该列。

如果要删除行而不是列,则代码将更改为– _Option Explicit Sub macro3()

尽可能长的暗淡,只要应用程序的长大借用。DisplayAlerts= False与工作表(“ Sheet1”)

lrow = .range(“ A”&.Rows.Count).End(xlUp).Row for i =借给2步骤-1如果.Cells(i,1).Value =“”,则退出If If.Cells( i,1).Value =“测试”然后.Rows(i)。删除下一个i以Application.DisplayAlerts = True End Sub_结尾请参见下面的代码-

您可能已经观察到在上面的代码中_.Cells(i,1).value_更改为_.Cells(i,1).value_。发生这种情况的原因是,在第一个代码中,我们要删除列,因此变量“ i”必须遍历各列,而在2 ^ nd ^代码中,它需要遍历各行。在这里,我们将从最后一行循环到2 ^ nd ^行,因为1 ^ st ^行包含需要保留的标头。

img3

根据代码要求,您甚至可以将删除行和删除列代码合并为1个代码。您甚至可以根据要删除的行/列设置多个条件。考虑一下,我们想删除1 ^ st ^列包含Test或Dummy之类的文本的所有行,那么代码将像这样– _Option Explicit Sub macro4()

尽可能长的暗淡,只要应用程序的长大借用。DisplayAlerts= False与工作表(“ Sheet1”)

lrow = .range(“ A”&.Rows.Count).End(xlUp).Row for i =借给2步骤-1如果.Cells(i,1).Value =“”,则退出If If.Cells( i,1).Value =“测试”或.Cells(i,1).Value =“虚拟”然后.Rows(i)。删除下一个i以Application.DisplayAlerts = True结尾Sub_

同样,您可以添加到此代码或根据要求添加的代码。您可以为行甚至列添加多个条件。

img4

image 48