2014-10-09 442 views
3

我正在尝试使用VBA处理工作表中的某些行。我想从一张纸上裁剪和粘贴一组行到另一张纸上,努力想出我需要的ID码并选择最后一行来确定整个范围。使用VBA在Excel中选择多行

我想要的行由列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 

回答

0

解决这种通过使用查找功能,因此无需遍历行和列:

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

如果你要使用这个确保你的数据首先要搜索的排序列 - 在这种情况下,部我期待的是'Dept1',所以你可以选择第一个和最后一个r

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

注:与“查找”,然后使用第一个和最后一个行号(:不是数据的绝对第一和最后一排数字,但范围的您正在寻找注)选择整个区域OW:在LASTCOL变量来自于设置这样一个全局变量:

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

而且ConvertToLetter函数是一段代码,你可以在网上找到了一些转换成列字符1 = A。我现在并不严格需要(取而代之的是1),因为我最初使用循环遍历列(For i = 1 To lastcol .... next)来查找相关列,并且还在循环行查找'Dept1'值。

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

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