在Excel中,让我在B2到B7和C2到C7中有数据。在VBA中,我可以编写一个宏来选择它:
authorization:'enabled'
如何重写代码以便自动选择非空的单元格? 如果我删除单元格B7和C7中的数据,那么我希望宏只选择范围(B2:C6) 如果我将数据添加到Cell B8和C8,那么我希望宏选择Range(B2:C8)。
我的数据将始终以B2,C2开头,而且数据之间没有任何可用空间。
答案 0 :(得分:5)
您的数据始终从B2,C2开始,中间没有空单元格?如果是这样,你可以将变量设置为"最后填充的行"
lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Range("B2:C" & lastRow).Select
并定义从B2到C"最后一行"
的范围答案 1 :(得分:2)
使用循环:
Sub qwerty()
Dim rng As Range, r As Range, rSel As Range
Set rng = Range("B2:C7")
Set rSel = Nothing
For Each r In rng
If r.Value <> "" Then
If rSel Is Nothing Then
Set rSel = r
Else
Set rSel = Union(rSel, r)
End If
End If
Next r
If Not rSel Is Nothing Then rSel.Select
End Sub
如果要扩展正在测试的区域,请使用:
Range("B2:C7").CurrentRegion
答案 2 :(得分:0)
使用选择对象的“ SpecialCells”功能
Sub Macro1()
Range("B2:C7").Select
For Each self in Selection.SpecialCells(xlCellTypeConstants)
Debug.Print(self)
Next
End Sub
答案 3 :(得分:0)
为了获得所有非空白单元格,您还必须收集包含公式的单元格:
Function getNonBlankCells(myRange As Range) As Range
Dim tmpRange As Range, resultRange As Range
Set resultRange = Nothing
Set tmpRange = myRange.Cells.SpceialCells(xlCellTypeConstants)
If Not tmpRange Is Nothing Then Set resultRange = tmpRange
Set tmpRange = myRange.Cells.SpceialCells(xlCellTypeFormulas)
If Not tmpRange Is Nothing Then
If resultRange Is Nothing Then
Set resultRange = tmpRange
Else
Set resultRange = Union(resultRange, tmpRange)
End If
End If
Set getNonBlankCells = resultRange
End Function