2012-06-14 6 views
0

Cela fait un moment que j'ai utilisé VBA sur Excel.Itération dans Excel VBA

Je veux alphabétiser le contenu de chaque colonne de la feuille.

C'est ce que j'ai:

Range("A1").Select 
    Range("A1:A19").Select 
    ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("A1"), _ 
     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Sheet2").Sort 
     .SetRange Range("A1:A19") 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Range("B1").Select 
End Sub 

Comment puis-je faire cela en une boucle qui continue à aller aussi longtemps que la gamme est active?

Répondre

0

C'est parti. Ce code suppose que vos données sont présentées dans un type de format de tableau. En outre, il suppose que vous voulez trier toute la colonne (y compris les espaces et autres). Si vous voulez rendre la gamme plus spécifique ou juste la définir avec une référence dure, ajustez le code où j'ai commenté.

Sub sortRange() 

Dim wks As Worksheet 
Dim loopRange As Range, sortRange As Range 

Set wks = Worksheets("Sheet1") 

With wks 

    'can change the range to be looped, but if you do, only include 1 row of the range 
    Set loopRange = Intersect(.UsedRange, .UsedRange.Rows(1)) 

    For Each cel In loopRange 

     Set sortRange = Intersect(cel.EntireColumn, .UsedRange) 

     With .Sort 
      .SortFields.Clear 
      .SortFields.Add Key:=sortRange 
      .SetRange sortRange 
      .Header = xlNo 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 

    Next 

End With 

End Sub 
1

Comme ça?

Option Explicit 

Sub sample() 
    Dim i As Long 

    With Sheets("Sheet1") 
     For i = 1 To .UsedRange.Columns.Count 
      .Columns(i).Sort Key1:=.Cells(1, i), Order1:=xlAscending, _ 
      Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ 
      Orientation:=xlTopToBottom, DataOption1:=xlSortNormal 
     Next i 
    End With 
End Sub 
+0

+1 joli code. Je pensais à cela, mais quand je jouais avec dans mon code, je commençais à avoir des problèmes avec l'ajout de champs de tri. Je choisis de les effacer puis de les ajouter. Maintenant, je vois, vous n'avez même pas besoin de cette méthode! –