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

时间:2011-05-13 09:32:45

标签: vba excel-vba excel

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

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

有没有一种简单的方法可以解决这个问题?

提前致谢,

的Laszlo

4 个答案:

答案 0 :(得分:3)

可能最快捷,最简单的方法是使用Excel的高级过滤器 - 您需要做的唯一修改是添加字段名称和标准。您甚至可以仅列出唯一商品 enter image description here

等效的VBA是

Sub test()

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

End Sub

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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 ff
next i

答案 3 :(得分:0)

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