在电子表格中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
-
如果我有总共10行第2行和第8行有数据,
stringVar
会parsing为:"2:2, 8:8"
。
Range(stringVar).Select
与写入Range("2:2, 8:8").Select
结果相同。 -
如果在该范围内的行数<= 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