2012-06-27 53 views
0

由於我是編寫宏的新手,我需要編寫一個宏來對單元格值「TLA」之間的一系列行進行排序。這裏有一個例子:在Excel VBA中的列中的相似單元格值之間按升序對行的範圍進行排序

Column A 
    TLA 
    23 
    6 
    32 
    TLA 
    TLA 
    5 
    21 
    16 
    40 
    TLA 

我試圖改變它,我從這個forum.But瀏覽宏,我不能夠選擇的行。任何指針或援助將對我有很大的幫助。 VB:

Sub Sort_column_TLA() 

    Dim r As Long 
    Application.ScreenUpdating = False 
    ActiveSheet.DisplayPageBreaks = False 
    r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row 
    For r = r To 2 Step -1 

     Select Case Cells(r, 1) 
     Case "TLA" 
      'do nothing 
     Case Else 
      Range(r & ":" & r).Select 

      'Rows(r).Select 
     End Select 
    Next r 
End Sub 

回答

0

你的結構看起來很奇怪:

r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row 
For r = r To 2 Step -1 

我認爲這是比較透明的,如果你從截至下來有計數器運行(具體原因到各地走另一條路?) 使用另一個計數器,例如。 lCnt(只要)。 希望它能幫助你。範圍內使用不同的例如

set oRange = thisworkbook.sheets("<Name>").usedrange 'Declare oRange as excel.range 
for each oRow in oRange.rows 
    lCnt = lCnt + 1 
    select case oRow.cells(lcnt, 1) 
     case "TLA" 
     oRow.select 
     'etc... 
    end select 
next oRange 
+0

的OP的方法來找到一列中的最後一個非空單元格都「TLA」之間的值進行排序。您的方法也可以使用,但是您正在運行1,048,576行表單中的每一行。確實,空單元格會被跳過,但是浪費迭代是非常低效的。 – 147

+0

嗯,我強烈懷疑他需要工作表中的所有行,這就是爲什麼我應用了usedrange。它限於實際使用的範圍。而且,當你使用帶計數器的.cells時,你顯然也在迭代。對於性能而言,加載到數組和循環內存將是最快的;我避免了這個,因爲我不想混淆這個人。 – Trace

+1

darn ....錯過了'.usedrange' - 好的電話 – 147

0

集我認爲沒有問題與您的代碼,除了你實際上並沒有排序值。
就選擇而言,如果您調試代碼並逐步運行,您將看到該行被選中。

以下將上升

Function a() 
    Dim r, r2 As Long 

    r2 = 0 

    Application.ScreenUpdating = False 
    ActiveSheet.DisplayPageBreaks = False 
    r = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row 
    For r = r To 1 Step -1 

     If (Cells(r, 1) = "TLA") Then 
      If (r2 <> 0) Then 
       If (r2 - r >= 2) Then 
        With Range(r + 1 & ":" & r2) 
         .Sort Key1:=Range("A" & r + 1), _ 
           Order1:=xlAscending, _ 
           Orientation:=xlTopToBottom 
        End With 
       End If 
      End If 
     r2 = r - 1 
     End If 

    Next r 
End Function 
相關問題