Excel VBA,如何根据列中的数据选择行?

标签 excel vba

Sub SelectAllReleventText()
Do While Range(“A1”).Offset(1, 6) <> Empty
Rows(ActiveCell.Row).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub

这是我的脚本,有人告诉我它没有达到预期的效果,这是我的预期,因为这是我的第一次尝试。我想出了一个变量未定义的错误。我以为我定义了该变量,但我想它对于 Excel VBA 来说不够具体。

这就是我正在尝试做的事情。

  1. 在工作簿 1 的 B6 上有一个字母数字名称,我希望选择该行。
  2. 向下移动一行,如果有文本,请选择该行。
  3. 继续下去,直到文字不再流行。
  4. 复制选定的行。
  5. 粘贴到另一个工作簿 (Workbook2) 的选项卡 1 中,从第 2 行开始,因为第 1 行有标题。

提前致谢。请注意,我在 VBA 中使用显式选项,因为有人告诉我这是“正确的做法”...

最佳答案

是的,使用Option Explicit是一个好习惯。然而,使用 .Select 则不然:)它会降低代码的速度。还要完全证明工作表名称合理,否则代码将始终针对 Activesheet 运行,这可能不是您真正想要的。

这就是你正在尝试的吗?

Option Explicit

Sub Sample()
    Dim lastRow As Long, i As Long
    Dim CopyRange As Range

    '~~> Change Sheet1 to relevant sheet name
    With Sheets("Sheet1")
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To lastRow
            If Len(Trim(.Range("A" & i).Value)) <> 0 Then
                If CopyRange Is Nothing Then
                    Set CopyRange = .Rows(i)
                Else
                    Set CopyRange = Union(CopyRange, .Rows(i))
                End If
            Else
                Exit For
            End If
        Next

        If Not CopyRange Is Nothing Then
            '~~> Change Sheet2 to relevant sheet name
            CopyRange.Copy Sheets("Sheet2").Rows(1)
        End If
    End With
End Sub

注意

如果您有从第 2 行到第 10 行的数据,并且第 11 行为空白,然后您又从第 12 行获得了数据,那么上述代码将仅复制从第 2 行到第 10 行的数据

如果您想复制所有包含数据的行,请使用此代码。

Option Explicit

Sub Sample()
    Dim lastRow As Long, i As Long
    Dim CopyRange As Range

    '~~> Change Sheet1 to relevant sheet name
    With Sheets("Sheet1")
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To lastRow
            If Len(Trim(.Range("A" & i).Value)) <> 0 Then
                If CopyRange Is Nothing Then
                    Set CopyRange = .Rows(i)
                Else
                    Set CopyRange = Union(CopyRange, .Rows(i))
                End If
            End If
        Next

        If Not CopyRange Is Nothing Then
            '~~> Change Sheet2 to relevant sheet name
            CopyRange.Copy Sheets("Sheet2").Rows(1)
        End If
    End With
End Sub

希望这是您想要的吗?

席德

关于Excel VBA,如何根据列中的数据选择行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790924/

相关文章:

vba - 7 字节十六进制到十进制转换

vba - 如何动态地从另一个Sub调用一个Sub

java - 使用 Apache POI 库检索 excel 中属性(列)的唯一值列表

Excel:将单元格的背景颜色更改为该单元格中写入的 RGB 颜色

excel - 将文本字符串中的数字相乘。 +综述

vba - 在 VBA 中使用平滑线编写散点图

vba - 如何使用 Excel VBA 有效地对字符串进行 Base64 编码?

vba - 如何将电子表格导出为 PDF,其中的列填充整个页面宽度

html - 格式化 HTML 表格单元格以便 Excel 格式化为文本?

vba - 如何防止在检查和删除上一行时跳过行检查?