![](/img/trans.png)
[英]Looping every value of a cell in a column until blank and for each value use all values in a different column until blank
[英]Looping until blank column
我正在整理一些我認為需要循環的VBA代碼。 循環通常是我使用VBA的最大弱點,我需要一些幫助。
我有一個導入到Excel電子表格中的文本文件。 列和行的長度以及向下的長度每天都會變化。 例如,今天的文件可能在A-H列中有數據,明天的文件可能是A:P。每個典型的行數將在200個標記附近,因此不要太長。
本質上,我試圖從分布在多列中的所有數據中在A列中創建一個長長的列表。 我正在尋找一個循環,檢查該列中是否有數據,如果這樣做,則將數據復制到A列中的數據底部。因此出於說明目的,說數據出到G列,它將復制B1 ,xl向下,找到A中的第一個空行並粘貼,然后對C執行相同的操作,在G列之后停止。
我希望我在寫這篇文章時很清楚。 預先感謝馬特
您首先要遍歷所有列。 因此,從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
編輯3:
我寫出了完整的代碼:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.