我在Excel工作表中有一列数据,其中分布有空单元格。我有一个匹配的日期/时间信息列,其中没有空单元格。我需要从日期/时间列中删除与数据列中的空单元格匹配的那些元素。 例如我需要删除5和9的时间元素。
BEGIN
使用VBA,我使用以下代码在“数据”列中生成了空白单元格列表:
Time Data
1 1
2 2
3 3
4 4
5
6 5
7 6
8 7
9
10 8
11 9
12 10
,然后使用以下代码删除时间列的随附元素。
deleteCells = sht.Columns(n).SpecialCells(xlCellTypeBlanks).Address _
RowAbsolute:=False, ColumnAbsolute:=False
(“偏移量”是指删除给定引用左侧的一列,然后在下面两行中将数据复制到一个临时位置,并在此过程中缩小在该列中创建的间隙,然后再次将其复制回。)
但是,返回的destSht.Range(deleteCells).Offset(0, n - 1).Clear
destSht.Columns(2*n-1).SpecialCells(xlCellTypeConstants).Copy _
Destination:=destSht.Columns(tempcol)
destSht.Columns(tempcol).Copy Destination:=destSht.Columns(2*n-1)`
字符串被截断为256个字符(Len(deleteCells)=> 256)。这并不涵盖我需要删除的所有单元格引用。
如何获取地址以返回更长的字符串?如果返回的字符数不超过256个,我如何才能从“时间”列中删除需要删除的完整单元格列表,以具有连续的“数据”列?
答案 0 :(得分:1)
@Rory建议您做这样的事情... 根据需要更改列字母偏移值。注意:如果您使用的负数会抵消A列之后的值,则会出现错误。
For Each cell In Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
If cell = "" Then
cell.Offset(, -1).Clear
End If
Next cell
答案 1 :(得分:0)
您可以使用AutoFilter
和SpecialCells
方法执行此操作:
您可能必须根据表所在的位置更改代码中的工作表和单元格引用:
Option Explicit
Sub delRowsWithBlanks()
Dim R As Range, WS As Worksheet
Dim rArea As Range, lrowCount As Long
Set WS = Worksheets("sheet3")
With WS
Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(columnsize:=2)
End With
R.AutoFilter field:=2, Criteria1:="="
lrowCount = 0
For Each rArea In R.SpecialCells(xlCellTypeVisible).Areas
lrowCount = lrowCount + rArea.Rows.Count
Next rArea
If lrowCount > 1 Then 'assumes header row
R.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
R.AutoFilter
End Sub
答案 2 :(得分:0)
我要发布“答案”以获取正确的格式并发布我的最终解决方案:
rngDeleteCells = sht.Columns(n).SpecialCells(xlCellTypeBlanks)
For Each delRange In rngDeleteCells.Areas
destSht.Range(delRange.Offset(0, n - 1).Address).Clear
Next delRange
我必须为每个.Address
使用delRange
,这样我才能偏移到不同工作表中的不同列进行删除。
感谢@rory和@GMalc的帮助。