在电子表格中select非空行

我会尽量保持这个尽可能短,仍然充分解释,这里去:)

我search了论坛,我的VBA文学,并找不到一种方法来做我想要的。

我有一个电子表格rowTotal> = 60行。 行或者在每列的单元格中都有文本数据,或者这些行在模式和颜色索引集中都是空白的。

我需要一个macros来select所有非空行。

我首先试着循环遍历A列的单元格(如果A列中的单元格有文本数据,那么应该select它的行),检查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 
  1. 如果我有总共10行第2行和第8行有数据, stringVar会parsing为: "2:2, 8:8"
    Range(stringVar).Select与写入Range("2:2, 8:8").Select结果相同。

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

我试过macroslogging器,它使用Union方法来解决这个问题。 所以我想,“自己,你可以用Union()。macros碁的MacroRecorder完成这个工作。 但是,唉,我的喜悦是失败的。
我想我可以把一个大string分成一个或多个string; 每个这些较小的string都会在上面提到的45限制之下。 然后我可以使用Union()将所有范围(这些较小的string)组合到一个所需的范围内。

但是,在我知道这些string有多less的情况下,我将不得不在代码执行过程中实时“构build”我的Union()代码。

任何人都知道如何制作工作表,只select包含数据的行; 这相当于具有一系列不连续的行,其中多于45行的计数被select。

不需要循环 – 使用SpecialCells

对于列A只使用:

 Set rng1 = Columns("A").SpecialCells(xlCellTypeConstants).EntireRow 

代替。

 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 

我首先build议你尝试使用Autofilter。 如果您使用的是Excel 2010(和prob 2007,但无法检查),则只需select数据,select“数据”选项卡,然后单击“filter”即可。 使用第一列中的下拉框,取消select“空格”。

在数据/筛选器菜单选项下,Excel 2003中存在完全相同的function。 尽pipe如此,我真的不记得这一切。 你必须尝试,或谷歌。

如果这不起作用:

 Sub it() Dim cell As Range Dim selectRange As Range For Each cell In ActiveSheet.Range("A:A") If (cell.Value <> "") Then If selectRange Is Nothing Then Set selectRange = cell Else Set selectRange = Union(cell, selectRange) End If End If Next cell selectRange.Select ' selectRange.EntireRow.Select 'If you want to select entire rows End Sub 

刚刚使用这个代码,它工作的一种享受 – 一直在追踪所有其他的Excel论坛,但无法find任何简化的东西。

我还补充说,选定的行被复制并粘贴到另一个表中的下一个空白行,如果有人认为这是有用的。

 Sub copypaste1() 'Find rows that contain any value in column A and copy them Dim cell As Range Dim selectRange As Range For Each cell In ActiveSheet.Range("A:A") If (cell.Value <> "") Then If selectRange Is Nothing Then Set selectRange = cell Else Set selectRange = Union(cell, selectRange) End If End If Next cell selectRange.EntireRow.Select selectRange.EntireRow.Copy 'Paste copied selection to the worksheet 'mega' on the next blank row Sheets("mega").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End Sub