我有一张定期导入的数据表,长度也随之改变。
所以,我想编写一些VBA代码,删除任何额外的行,并将任何公式自动填充到最后一行。
我完成了第一部分。此代码查找最后一行,并删除其下面的任何内容。
Sub CleanData()
Dim lastrow As Long
Sheets("Open Operations").Select
Range(Cells(Rows.Count, 1).End(xlUp).Offset(1), _
Cells(Rows.Count, 1)).EntireRow.Delete
lastrow = ActiveSheet.UsedRange.Rows.Count
End Sub
我坚持的部分是,我不确定如何自动填充任何需要它的列。这些列可能正在改变,所以我希望我的代码能够处理这个。所以,我想迭代第一行中的所有单元格,从第一列到最后一列使用。然后,如果该单元格是公式,我想将公式填充到lastrow,如第一个代码块中所定义。
这是我到目前为止所拥有的:
Dim lastcolumn As Long
lastcolumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column
For Each c In ActiveSheet.Range("A1:A" & lastcolumn).Cells
If c.HasFormula = True Then
但我对VBA很陌生,而且我不确定如何将列填充到之前定义的Last Row。
编辑:澄清 - 我想迭代每列中的每个第一个单元格,直到最后一列。然后,如果该单元格包含公式,我想将整列自动填充/填充到第一个代码块中定义的lastrow。
感谢。
答案 0 :(得分:2)
我设法创建了完成上述任务的代码:
以下是感兴趣的人的代码:
Sub CleanData()
' Clean the data
Application.Calculation = xlManual
Call CleanSheet("Order Headers")
Call CleanSheet("Open Operations")
Call CleanSheet("Confirmations (SAP)")
Call CleanSheet("VA05")
Call CleanSheet("ZOOP")
Call CleanSheet("PremExped")
Application.Calculation = xlCalculationAutomatic
End Sub
Sub CleanSheet(SheetName As String)
' Cleans the Sheet specified by SheetName
' Variable Declaration
Dim NumColumns As Long
Dim NumRows As Long
Dim ColumnCounter As Long
' Find the number of rows and columns in SheetName
NumRows = Sheets(SheetName).Cells(Rows.Count, 1).End(xlUp).Row
NumColumns = Sheets(SheetName.Cells(1, Columns.Count).End(xlToLeft).Column
' Define the ranges for pulling down the formulas
Set rng1 = Worksheets(SheetName).Range("A2:A" & NumRows)
Set rng2 = Worksheets(SheetName).Range("A2")
' Delete extraneous rows of data
Sheets(SheetName).Select
Range(Cells(Rows.Count, 1).End(xlUp).Offset(1), _
Cells(Rows.Count, 1)).EntireRow.Delete
' Ensure all formulas are dragged down appropriately
For ColumnCounter = 0 To NumColumns
If rng2.Offset(0, ColumnCounter).HasFormula = True Then
rng1.Offset(0, ColumnCounter).FillDown
End If
Next ColumnCounter
End Sub
答案 1 :(得分:0)
("A1:A" & lColumn)
似乎混淆了行和列。
我想你想要:
LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
or
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
编辑:也许只是以下内容:
For Each c In ActiveSheet.UsedRange