需要从Excel表格中删除空行,然后使用VBA调整表格大小
我编写了一个宏(主要是通过记录),它从一张工作表的某个部分复制数据,然后计算另一张工作表的表尾,并将数据粘贴到表尾(粘贴特殊,因为我粘贴的数据是一个公式,我需要粘贴值),这本身就增加了表的大小。 这很有效 我的问题是,我不确定我的原始数据范围(我正在复制)中有多少实际包含值(有一个公式给它一个值或“”),所以我选择了一个较大的范围,以防万一 所以。。。。粘贴后,我希望遍历我的表,删除所有添加的只有空字符串(“”)且没有值的行,然后调整表的大小,使其与包含数据的行一样大。 这些行可以在粘贴数据的中间或结尾。 我需要有关VBA代码的帮助才能做到这一点 我可能还需要清除表格自动添加到这些附加行的格式 这是我到目前为止的代码需要从Excel表格中删除空行,然后使用VBA调整表格大小,excel,excel-tables,vba,Excel,Excel Tables,Vba,我编写了一个宏(主要是通过记录),它从一张工作表的某个部分复制数据,然后计算另一张工作表的表尾,并将数据粘贴到表尾(粘贴特殊,因为我粘贴的数据是一个公式,我需要粘贴值),这本身就增加了表的大小。 这很有效 我的问题是,我不确定我的原始数据范围(我正在复制)中有多少实际包含值(有一个公式给它一个值或“”),所以我选择了一个较大的范围,以防万一 所以。。。。粘贴后,我希望遍历我的表,删除所有添加的只有空字符串(“”)且没有值的行,然后调整表的大小,使其与包含数据的行一样大。 这些行可以在粘贴数据的中
Range("O7:R30").Select
Selection.Copy
Sheets("deposits").Select
Dim lastRow As Long
lastRow = ActiveSheet.ListObjects("deposits").Range.Rows.Count
Range("A" & lastRow).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
如果数据有效,最好只将其放入表中,而不是在粘贴后进行清理 像这样的
Sub Demo()
Dim rDest As Range
Dim lo As ListObject
Dim wsSrc As Worksheet
Dim rSrc As Variant
Dim i As Long
Dim rng As Range
'there are better ways to get a reference to the source data, but thats not the Q here
Set wsSrc = ActiveSheet
Set rSrc = wsSrc.Range("O7:R30")
' destination sheet
With Sheets("deposits")
'get reference to table
Set lo = .ListObjects("deposits")
'Get reference to first row after the table
Set rDest = lo.DataBodyRange.Rows(lo.DataBodyRange.Rows.Count + 1)
i = 0
'loop thru source data rows
For Each rng In rSrc.Rows
'if a row has data
If Application.WorksheetFunction.CountA(rng) > 0 Then
'copy values into table
rDest.Offset(i).Value = rng.Value
i = i + 1
End If
Next
End With
End Sub
如果数据有效,最好只将其放入表中,而不是在粘贴后进行清理 像这样的
Sub Demo()
Dim rDest As Range
Dim lo As ListObject
Dim wsSrc As Worksheet
Dim rSrc As Variant
Dim i As Long
Dim rng As Range
'there are better ways to get a reference to the source data, but thats not the Q here
Set wsSrc = ActiveSheet
Set rSrc = wsSrc.Range("O7:R30")
' destination sheet
With Sheets("deposits")
'get reference to table
Set lo = .ListObjects("deposits")
'Get reference to first row after the table
Set rDest = lo.DataBodyRange.Rows(lo.DataBodyRange.Rows.Count + 1)
i = 0
'loop thru source data rows
For Each rng In rSrc.Rows
'if a row has data
If Application.WorksheetFunction.CountA(rng) > 0 Then
'copy values into table
rDest.Offset(i).Value = rng.Value
i = i + 1
End If
Next
End With
End Sub
这段代码起作用了,不优雅,但它起作用了
Sub copyToDeposits()
Dim theSheet As String
theSheet = ActiveSheet.Name
Application.ScreenUpdating = False
Range("O7:R30").Select
Selection.Copy
Sheets("deposits").Select
Dim lastRow As Long
lastRow = ActiveSheet.ListObjects("deposits").Range.Rows.Count
Range("A" & lastRow).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim lo As ListObject
Dim lRow As ListRow
Dim rng As Range
Dim delRows As Collection
Set lo = ActiveSheet.ListObjects("deposits") 'change to your table name
On Error Resume Next
For Each lRow In lo.ListRows
Set rng = Nothing
Set rng = lRow.Range.Cells(1, 2)
If Not rng Is Nothing Then
If rng = "" Then
If delRows Is Nothing Then
Set delRows = New Collection
delRows.Add lRow
Else
delRows.Add lRow, Before:=1
End If
End If
End If
Next
On Error GoTo 0
If Not delRows Is Nothing Then
For Each lRow In delRows
lRow.Delete
Next
End If
Sheets(theSheet).Select
Application.ScreenUpdating = True
End Sub这段代码工作正常,不优雅,但它工作正常
Sub copyToDeposits()
Dim theSheet As String
theSheet = ActiveSheet.Name
Application.ScreenUpdating = False
Range("O7:R30").Select
Selection.Copy
Sheets("deposits").Select
Dim lastRow As Long
lastRow = ActiveSheet.ListObjects("deposits").Range.Rows.Count
Range("A" & lastRow).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim lo As ListObject
Dim lRow As ListRow
Dim rng As Range
Dim delRows As Collection
Set lo = ActiveSheet.ListObjects("deposits") 'change to your table name
On Error Resume Next
For Each lRow In lo.ListRows
Set rng = Nothing
Set rng = lRow.Range.Cells(1, 2)
If Not rng Is Nothing Then
If rng = "" Then
If delRows Is Nothing Then
Set delRows = New Collection
delRows.Add lRow
Else
delRows.Add lRow, Before:=1
End If
End If
End If
Next
On Error GoTo 0
If Not delRows Is Nothing Then
For Each lRow In delRows
lRow.Delete
Next
End If
Sheets(theSheet).Select
Application.ScreenUpdating = True
End Sub我尝试了范围(“存款[金额]”).SpecialCells(xlCellTypeBlanks).EntireRow.Delete,它抛出了一个错误,没有找到数据。似乎即使行显示为空白,它们也不会触发xlCellTypeBlanks。另外,当我选择表格(ctl-a)然后使用F5使用特殊->空白时,它不起作用。它也没有返回任何数据。即使单元格是空白的,只有空字符串(“”),但是公式返回空字符串的单元格不是空的。是的,我明白了。当单元格中的“某物”是(“”)时,有没有办法确定它是否存在?或者有没有更好的方法告诉IF公式让单元格真正为空您可以使用
COUNTA
函数返回非空单元格的数量,甚至返回空字符串的单元格,如=“”
I trued Range(“存款[金额]”)。特殊单元格(xlCellTypeBlanks).EntireRow.Delete并引发错误,但未找到任何数据。似乎即使行显示为空白,它们也不会触发xlCellTypeBlanks。另外,当我选择表格(ctl-a)然后使用F5使用特殊->空白时,它不起作用。它也没有返回任何数据。即使单元格是空白的,只有空字符串(“”),但是公式返回空字符串的单元格不是空的。是的,我明白了。当单元格中的“某物”是(“”)时,有没有办法确定它是否存在?或者有没有更好的方法告诉IF公式让单元格真正为空您可以使用COUNTA
函数返回非空单元格的数量,即使是返回空字符串的单元格,如=”
,它也不起作用。A.它没有将它添加到表中,它只是添加到表下的底部,但没有获得表格式,等等。在表b之后添加新行通常会得到的结果。它没有删除带有数据的行之间的空行。我猜CountA返回的值可能大于0,因为行(甚至是“空白”行)中有一个复制的公式,它不起作用。A.它没有将它添加到表中,它只是添加到表下的底部,但没有获得表格式,等等。在表b之后添加新行通常会得到的结果。它没有删除带有数据的行之间的空行。我猜CountA返回的值可能大于0,因为行(甚至是“空白”行)中存在复制的公式