使用VBA在Excel中选择多行

3
我正在使用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
1个回答

1
通过使用查找函数解决了此问题,因此无需遍历行和列:
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。我现在并不需要这个(用1替换i),因为最初我正在使用循环遍历列(对于 i = 1 到 lastcol….下一个)来查找相关列,并且还在使用行循环查找“Dept1”值。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接