簡體   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