2012-12-21 14 views
10

gdy mamy zamiar zrobić pętlę w wierszach, możemy użyć kodu jak poniżej:Excel VBA Pętla na kolumnach

i = 1 
Do 
    Range("E" & i & ":D" & i).Select 
    i = i + 1 
Loop Until i > 10 

ale co jeśli chcemy zrobić pętlę na kolumnie?

Czy możemy użyć tej samej metody, co powyżej?

podczas gdy kolumny w Excelu to kompleks, taki jak A, B, C, ..., Y, Z, AA, AB, AC, ..., itp. wystąpią problemy między pętlami od "Z "do" AA ".

jak mamy zapętlenie kolumnę alfabetu od „A” do „Z”, a następnie kontynuował w „AA”, „AB” i tak dalej

jest tam coś, co może pomóc?

Odpowiedz

21

Tak, użyjmy Select jako przykład

przykładowy kod: Columns("A").select

Jak pętli kolumny:

Metoda 1: (Możesz użyć indeksu zastąpić adres Excel)

For i = 1 to 100 
    Columns(i).Select 
next i 

Metoda 2: (przy użyciu adresu)

For i = 1 To 100 
Columns(Columns(i).Address).Select 
Next i 

Edycja: Gazy Kolumna OP

columnString = Replace(Split(Columns(27).Address, ":")(0), "$", "") 

np chcesz uzyskać 27. Kolumna -> AA, można je dostać w ten sposób

+0

+ 1 dla obu metod daje ... :) Chociaż 2 jeden staje się bezużyteczny, jeśli u mieć metoda 1. –

+0

wiesz, w jaki sposób możemy uzyskać indeks kolumny z pętli jako ciąg? jak "A", "B", ..., "AA", "AB", ..., itd więc mogę zastosować go do mojego pętli jak ta: 'Range (colIndex & I & ":" & colIndex & i) .Select' _ "colIndex" to zmienna pętli indeks kolumny w excel_ – wahyueka31

+1

@Rebel zobaczyć edycji – Larry

1

Jeśli chcesz trzymać się z tego samego rodzaju pętli to będzie działać:

Option Explicit 

Sub selectColumns() 

Dim topSelection As Integer 
Dim endSelection As Integer 
topSelection = 2 
endSelection = 10 

Dim columnSelected As Integer 
columnSelected = 1 
Do 
    With Excel.ThisWorkbook.ActiveSheet 
     .Range(.Cells(columnSelected, columnSelected), .Cells(endSelection, columnSelected)).Select 
    End With 
    columnSelected = columnSelected + 1 
Loop Until columnSelected > 10 

End Sub 

EDIT

Jeśli w rzeczywistości po prostu chcesz pętli każdej komórki w obszarze arkusza następnie użyć czegoś takiego:

Sub loopThroughCells() 

'============= 
'this is the starting point 
Dim rwMin As Integer 
Dim colMin As Integer 
rwMin = 2 
colMin = 2 
'============= 

'============= 
'this is the ending point 
Dim rwMax As Integer 
Dim colMax As Integer 
rwMax = 10 
colMax = 5 
'============= 

'============= 
'iterator 
Dim rwIndex As Integer 
Dim colIndex As Integer 
'============= 

For rwIndex = rwMin To rwMax 
     For colIndex = colMin To colMax 
      Cells(rwIndex, colIndex).Select 
     Next colIndex 
Next rwIndex 

End Sub 
+0

+ 1 OP ma teraz wiele opcji :) –

+0

Czy wiesz, jak możemy uzyskać indeks kolumny z pętlą jako ciągiem? jak "A", "B", ..., "AA", "AB", ..., itd więc mogę zastosować go do mojego pętli jak ta: 'Range (colIndex & I & ":" & colIndex & i). Wybierz " _" colIndex "to indeks zmiennej do pętli w indeksie excel_ – wahyueka31

+0

@Rebel, który jest taki sam jak' .Range (.Cells (i, colIndex),. Komórki (i, colIndex)). Wybierz "....", na co proponuję odpowiedzieć tylko przy użyciu bardziej zwięzłych nazw. ALE w twoim komentarzu wspomniałeś 'Range (colIndex & i &": "& colIndex & i). Wybierz" ... nie ma potrzeby, aby sekcja _repeated_ po dwukropku: 'Range (colIndex & i). Wybierz" .. ... co właściwie jest odpowiednikiem '.cells (i, colIndex)' – whytheq

7

Innym sposobem, aby spróbować o ut. Również select może zostać zmieniony po ustawieniu początkowej kolumny w obiekcie Range. Wydajność pomaga.

Dim rng as Range 

Set rng = WorkSheets(1).Range("A1") '-- you may change the sheet name according to yours. 

'-- here is your loop 
i = 1 
Do 
    '-- do something: e.g. show the address of the column that you are currently in 
    Msgbox rng.offset(0,i).Address 
    i = i + 1 
Loop Until i > 10 

** Dwa sposoby, aby uzyskać nazwę kolumny przy użyciu numer kolumny **

  • Splicie()

kod

colName = Split(Range.Offset(0,i).Address, "$")(1) 
  • manipulacji String:

kod

Function myColName(colNum as Long) as String 
    myColName = Left(Range(0, colNum).Address(False, False), _ 
    1 - (colNum > 10)) 
End Function 
+2

+ 1 dla innej metody –

+0

czy wiesz, jak możemy uzyskać indeks kolumny z pętlą jako ciągiem? jak "A", "B", ..., "AA", "AB", ..., itd więc mogę zastosować go do mojego pętli jak ta: 'Range (colIndex & I & ":" & colIndex & i). Wybierz " _" colIndex "to indeks zmiennej pętli w indeksie excel_ – wahyueka31

+0

@Rebel Jest to możliwe. Ale z ciekawości, skoro istnieje wiele skutecznych sposobów przechodzenia przez kolumny, dlaczego chcesz uzyskać String 'column name'? – bonCodigo