2014-10-09 339 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.