这是我第一次尝试VBA,所以我为我的无知道歉。情况如下:我有一个由4列和629行组成的电子表格。当我试图做的是遍历每行中的4个单元格并检查空白单元格。如果有一行包含空白单元格,我想从Sheet1剪切它并将其粘贴到Sheet2的第一个可用行中。Excel - 将包含空单元格的行移动到另一个工作表
(理想情况下的列数和行数是动态的,基于每个电子表格上,但我不知道如何通过行和列迭代动态)
Sub Macro1()
'
' Macro1 Macro
' Move lines containing empty cells to sheet 2
'
' Keyboard Shortcut: Ctrl+r
'
Dim Continue As Boolean
Dim FirstRow As Long
Dim CurrentRow As Long
Dim LastRow As Long
Dim EmptySheetCount As Long
Dim Counter As Integer
'Initialize Variables
LContinue = True
FirstRow = 2
CurrentRow = FirstRow
LastRow = 629
EmptySheetCount = 1
'Sheets(Sheet1).Select
'Iterate through cells in each row until an empty one is found
While (CurrentRow <= LastRow)
For Counter = 1 To 4
If Sheet1.Cells(CurrentRow, Counter).Value = "" Then
Sheet1.Cells(CurrentRow).EntireRow.Cut Sheet2.Cells(EmptySheetCount, "A")
EmptySheetCount = EmptySheetCount + 1
Counter = 1
CurrentRow = CurrentRow + 1
GoTo BREAK
Else
Counter = Counter + 1
End If
Counter = 1
BREAK:
Next
Wend
End Sub
当我运行它,我通常在Sheet1.Cells(CurrentRow,Counter).Value =“”区域出现错误,所以我知道我错误地引用了工作表。我试过了表格(Sheet1),工作表(“Sheet1”),似乎没有任何工作。但是,当我切换到工作表(“Sheet1”)时,它会运行并冻结Excel。
我知道我在做多件事情是错误的,我只知道方式太少知道什么。
非常感谢。对不起,废话格式化。
这是极好的,tospig,它精美的作品。我一直在为此工作几个小时,并在几分钟之内就完成了。通过代码进行调试和步进绝对是一个很好的调用。我理解你所做的大部分工作,只有一些例外。在下面的字符串:wksData.Range(“XFD1”),我认为这是特定于Excel的东西?与下一行中的字符串相同? – coreytrevor 2015-02-10 22:06:00
@coreytrevor'XFD'是Excel工作表(2007版)中的最后一列。 '1048576'是最后一行。 'End(xlup)'在说,去最后一行(1048576),然后'上',直到找到一些数据。这个数据的行就是'lastRow'。 – tospig 2015-02-10 22:16:45
真棒,你一直非常有帮助。再次感谢您抽出时间。 – coreytrevor 2015-02-10 22:26:41