在电子表格中选择非空行

use*_*930 4 excel vba range excel-vba

我将尝试尽可能地保持这个并且仍然充分解释,这里是:)

我搜索了论坛,我的VBA文献,找不到办法去做我正在尝试的事情.

我有一个rowTotal> = 60行的电子表格.这些行在每列的单元格中都有文本数据,或者行是空白的,并且设置了pattern和colorindex.

我需要一个宏来选择所有非空行.

我首先尝试循环遍历列A的单元格(如果列A中的单元格具有文本数据,则应选择其行),检查activecell.value<>是否为空.

这是jist(伪代码和代码的混合):

Range("A1").Select
loop to end
  if activeCell.value <> empty then 
    stringVar = stringVar + cstr(activeCell.row) + ":" + cstr(activeCell.row) + ","
  end if 
end loop

stringVar = Left(stringVar, (Len(stringVar) - 1))
Range(stringVar).Select
Run Code Online (Sandbox Code Playgroud)
  1. 如果我有10行,第2行和第8行有数据,stringVar将解决此问题:"2:2, 8:8".
    Range(stringVar).Select会有与写作相同的结果Range("2:2, 8:8").Select.

  2. 如果范围内的行数<= 45,则没有问题.但是,只要包含数据的行数超过45,代码就会失败Range(stringVar).Select.

我尝试了宏录制器,它通过使用该Union方法解决了这个问题.所以我想,"自我,你可以用Union()来完成这个.万岁的MacroRecorder." 但是,唉,我的喜悦是疏忽.
我以为我可以将一个大字符串拆分成一个或多个字符串; 这些较小的弦中的每一个都将低于上述45限制.然后我可以使用Union()将所有范围(这些较小的字符串)组合到一个所需的范围内.

但是,在我知道有多少45个字符串之后,我必须在代码执行期间实时"构建"我的Union()代码.

任何人都知道如何获取工作表并只选择包含数据的行; 这相当于具有一系列非连续行,其中选择了多于45行的计数.

bre*_*tdj 7

不需要循环 - 使用 SpecialCells

对于A列,仅使用:

Set rng1 = Columns("A").SpecialCells(xlCellTypeConstants).EntireRow
Run Code Online (Sandbox Code Playgroud)

代替.

Sub QuickSet()

  Dim rng1 As Range

  On Error Resume Next
  Set rng1 = Cells.SpecialCells(xlCellTypeConstants).EntireRow
  On Error GoTo 0

  If Not rng1 Is Nothing Then
    MsgBox "Your working range is " & rng1.Address(0, 0)
  Else
    MsgBox "No constants found"
  End If

End Sub
Run Code Online (Sandbox Code Playgroud)