【问题标题】:Collect numbers from a column containing empty cells using Excel VBA使用 Excel VBA 从包含空单元格的列中收集数字
【发布时间】:2011-05-13 09:32:45
【问题描述】:

我有个小问题,我偶尔会碰到这种问题,但目前还没有找到快速的解决方案。

所以,假设我们有一个 Excel 工作表,假设我们在“A”列中有几个数字,其中有一些空单元格。总而言之(为了简单起见),我们在“A”列中观察到前 10 个单元格。例如:

3
(empty cell)
(empty cell)
6
(empty cell)
4
(empty cell)
23
(empty cell)
2

现在,在下一步中,我想使用 VBA 将这些数字收集到另一列(例如,“B”列)中。显然我只想收集那些包含数字的单元格,我想忽略空单元格。所以我想得到一个这样的专栏:

3
6
4
23
2

我已经写了下面的代码,但是我卡在了这一点上。

Sub collect()
For i = 1 To 10
    if cells(i,1)<>"" then...
Next i
End Sub

有没有简单的方法来解决这个问题?

【问题讨论】:

标签: vba excel


【解决方案1】:

可能最快和最简单的方法是使用 Excel 的 高级过滤器 - 您需要进行的唯一修改是添加字段名称和条件。您甚至可以只列出独特的项目:

VBA 等效项是

Sub test()

    With Sheet1
        .Range("B1:B8").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
            "D1:D2"), CopyToRange:=.Range("F1"), Unique:=False
    End With

End Sub

【讨论】:

  • 我绝对喜欢不迭代而是使用 Excel 内置函数的解决方案。将此速度与下面的任何 vba 解决方案进行比较,您会发现它明显更快。
【解决方案2】:

您应该可以在 cmets 中使用帖子中的方法,但您也可以使用 SpecialCells(如 Range("A:A").SpecialCells(xlCellTypeConstants,xlNumbers).Copy)来获取所有已填充的单元格。

编辑:需要常量而不是公式。

【讨论】:

  • “在 cmets 的帖子中”是什么意思“在发布 cmets”“在邮局和cmets”“在 cmets 的帖子中”?还有什么? (回复editing your answer,不在 cmets 中(视情况而定)。)
【解决方案3】:

这适用于您选择的任意数量的行。它将始终在您选择开始时的下一列中输出,例如如果数据从 B10 开始,它将在 C10 中输出

Sub RemoveBlanks()
    Dim cl As Range, cnt As Long
    cnt = 0

    For Each cl In Selection
        If Not cl = vbNullString Then
            Cells(Selection.Cells(1, 1).Row, Selection.Cells(1, 1).Column).Offset(cnt, 1) = cl
            cnt = cnt + 1
        End If
    Next cl
End Sub

【讨论】:

    【解决方案4】:

    如果您希望手动循环并且不介意指定最大行数限制;

    Dim i As long, values As long
    
    For i = 1 To 10
        If cells(i, 1).Value <> "" Then
            values = (values + 1)
            ' // Adjacent column target
            cells(values, 2).value = cells(i, 1).value
        End If
    Next i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多