繁体   English   中英

使用 Excel VBA 从包含空单元格的列中收集数字

[英]Collect numbers from a column containing empty cells using Excel VBA

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

因此,假设我们有一个 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

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

可能最快和最简单的方法是使用 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

您应该能够在评论后使用该方法,但您也可以使用像 Range("A:A"). SpecialCells Range("A:A").SpecialCells(xlCellTypeConstants,xlNumbers).Copy这样的 SpecialCells 来获取所有填充的单元格。

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

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

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

这将适用于您选择的任意数量的行。 它将始终在您选择开始时的下一列中输出,例如,如果数据从 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM