【问题标题】:Selecting Multiple rows in Excel using VBA使用 VBA 在 Excel 中选择多行
【发布时间】:2014-12-04 06:11:01
【问题描述】:

我正在尝试使用 VBA 处理工作表中的一些行。我想将一组行从一张纸剪切并粘贴到另一张纸上,并努力找出我需要标识的代码并选择最后一行来标识整个范围。

我想要的行由 A 列中的值标识,假设该单元格中的值是“Dept1”,然后我需要复制该行和单元格中具有该值的任何其他行。

然后这些值将被粘贴到我与标题一起创建的另一个工作表中。

我的第一次尝试是按 A 列对数据进行排序,然后循环遍历数据,直到找到第一个带有“Dept1”的单元格,然后将此单元格地址放入变量中,但我还需要标识最后一个'dept1' 值,因此我可以获取此行号。

我目前的代码是这样的,它只将第一个单元格地址放入变量中,但还需要最后一个单元格地址来创建我想要选择和剪切的范围:

With wb.ActiveSheet


         'Call sortorder sub to sort Department field 
         SortOrder

         For i = 1 To lastcol
            'find department named column 
             If .Range(ConvertToLetter(i) & 1).Value = "department" Then      
              For j = 2 To MaxRowCount
                If .Range(ConvertToLetter(i) & j).Value = "Dept1" Then
                 'Get first cell address here to build range for 'dept1' data
                  firstRangeNumber = ConvertToLetter(i) & j
                  RHSCRange = firstRangeNumber & ":"

                ' Create code to populate LastRangeNumber variable as explained below 

                ' work out how to get last cell address number with 'dept1' 
                ' and use lastcol variable value combined with last cell row number(j) 
                ' to create last cell address for range. Finally combine first and 
                ' last variables to create complete range, select and cut range to
                ' New sheet


                End If
              Next                         
             End If
         Next
     End With

【问题讨论】:

    标签: vba select copy range


    【解决方案1】:

    通过使用 find 函数解决了这个问题,因此无需遍历行和列:

    LastRow = Cells.Find("Dept1", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    firstrow = Cells.Find("Dept1", SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
    

    如果您要使用它,请确保首先按您正在搜索的列对数据进行排序 - 在这种情况下,我要查找的部门是“Dept1”,因此您可以使用“查找”选择第一行和最后一行',然后使用第一行和最后一行编号选择整个范围(注意:不是数据的绝对第一行和最后一行数据,而是您要查找的范围):

    Range = ConvertToLetter(1) & firstRow & ":" & ConvertToLetter(lastcol) & LastRow
    

    注意:Lastcol 变量来自一个全局变量集,如下所示:

    lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    

    ConvertToLetter 函数是您可以在网上找到的一段代码,用于将数字转换为列字符 1=A。我现在并不严格需要这个(将 i 替换为 1),因为最初我使用循环遍历列(For i = 1 To lastcol..next)来查找相关列,并且还使用循环行来查找“Dept1”值。

    然后选择、剪切/复制然后粘贴范围:

    Range(Range).Select
    Selection.Cut
    'And then paste where you want it to go.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多