我正在整理一些我认为需要循环的VBA代码。循环通常是我对VBA的最大弱点,我需要一些帮助。
我有一个文本文件,我导入到Excel电子表格中。每列的行数和行数的长度会有所不同。 例如,今天的文件可能包含A - H列中的数据,明天它可能是A:P。每个典型的行数都在200左右,所以不会很长。
从本质上讲,我试图在A列中创建一个长列表,其中包含遍布多列的所有数据。 我正在寻找一个循环,检查列中是否有数据,如果是,则将数据复制到A列数据的底部。 因此,为了说明的目的,数据输出到G列,它将复制B1,xl向下,找到A中的第一个空行并粘贴,然后对C执行相同操作,在G列之后停止。
我希望我写这篇文章时已经很清楚了。 提前致谢 马特
答案 0 :(得分:0)
您首先要遍历所有列。所以从B列到LastColumn的FOR循环(有一个函数用于。)然后你想循环遍历该列中的所有行以找到第一个空行,然后减去一个到达带有数据的最后一列。
If Cells(row,col) = "" Then
LastRowCopy = row -1
然后你想要将所有内容复制到A1,并跟踪你发布的最后一行。所以你想拥有一个重要的变量。类似的东西:
LastRowPaste = LastRowPaste + row
我可以为它编写代码,但也许您可以通过自己搞清楚来了解更多信息。
编辑:也许有关查找最后一行和/或列的有趣读物是:http://www.rondebruin.nl/win/s9/win005.htm
Edit2:您当然也可以使用相同的方法来查找最后一列作为我用于查找最后一行的方法。然后你只需循环遍历列,看看是否:
If Cells(1, col) = "" Then
LastCol = col -1
EDIT3:
我写出了整个代码:
Sub copypaste()
Dim LastRowCopy As String
Dim LastRowPaste As String
Dim LastCol As String
Dim col As Integer
Dim row As Integer
LastCol = ActiveSheet.UsedRange.Columns.Count
LastRowCopy = ActiveSheet.UsedRange.Rows.Count
LastRowPaste = ActiveSheet.UsedRange.Rows.Count
For row = 1 to LastRowPaste
If Cells(row, 1) = "" Then
LastRowPaste = row
Exit For
End if
Next row
For col = 2 To LastCol
If Application.WorksheetFunction.CountA(Columns(col)) = 0 Then
LastCol = col -1
End If
Next col
For col = 2 To LastCol
For row = 1 To LastRowCopy
If Not Cells(row, col) = "" Then
Cells(LastRowPaste, 1) = Cells(row, col)
LastRowPaste = LastRowPaste + 1
End If
Next row
Next col
End Sub