![](/img/trans.png)
[英]Excel VBA: Delete multiple columns using variable containing column numbers
[英]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.