![](/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.