如何从地址方法获取完整的返回值?

时间:2019-04-10 16:39:38

标签: excel vba string string-length

我在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个,我如何才能从“时间”列中删除需要删除的完整单元格列表,以具有连续的“数据”列?

3 个答案:

答案 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)

您可以使用AutoFilterSpecialCells方法执行此操作:

您可能必须根据表所在的位置更改代码中的工作表和单元格引用:

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的帮助。