2012-12-21 23 views
10

, wenn wir eine Schleife tun in den Reihen gehen, wir Code wie die folgenden verwenden:Excel VBA Schleife auf Spalten

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

aber was, wenn wir wollen, tun, auf einer Säule eine Schleife?

Können wir die gleiche Methode wie oben verwenden?

während die Spalten in Excel ist ein Komplex wie A, B, C, ..., Y, Z, AA, AB, AC, usw. Probleme entstehen zwischen Schleife von der "Z "zum" AA ".

wie wir Alphabet Spalte von "A" bis "Z" do Looping und dann weiter in den "AA", "AB" und so weiter

ist es etwas, das helfen kann?

Antwort

21

Ja, lassen Sie uns Select als Beispiel

Beispielcode: Columns("A").select

Wie durch Spalten-Schleife:

Methode 1: (Sie können Index verwenden, um die Excel-Adresse zu ersetzen)

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

Methode 2: (Mit der Adresse)

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

EDIT: Streifen der Spalte für OP

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

z.B. Sie wollen die 27. Spalte bekommen -> AA, können Sie es auf diese Weise bekommen

+0

+ 1 für beide Methoden geben ... :) Obwohl 2. ein nutzlos wird, wenn u-Methode haben 1. –

+0

wissen Sie, wie wir den Spaltenindex mit Schleife als String bekommen? wie "A", "B", ..., "AA", "AB", ... usw. so kann ich es auf meine Schleife wie folgt anwenden: 'Range (colIndex & i & ":" & colIndex & i) .Select' _ "colIndex" ist eine Variable Spaltenindex Schleife in excel_ – wahyueka31

+1

@Rebel bearbeiten – Larry

1

Wenn Sie mit der gleichen Art von Schleife halten wollen, dann wird diese Arbeit:

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

Wenn in Wirklichkeit wollen Sie nur eine Schleife durch jede Zelle in einem Bereich der Tabelle so etwas wie dieses dann verwenden:

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 hat jetzt viele Optionen :) –

+0

Wissen Sie, wie wir den Spaltenindex mit Schleife als String bekommen können? wie "A", "B", ..., "AA", "AB", ... usw. so kann ich es auf meine Schleife wie folgt anwenden: 'Range (colIndex & i & ":" & colIndex & i) .Select " _" colIndex "ist eine Variable zum Schleifenspaltenindex in excel_ – wahyueka31

+0

@Rebel, die mit' .Range (.Cells (i, colIndex),. Zellen (i, colIndex)). Wählen Sie "....", was ich in meine vorgeschlagene Antwort nur mit aussagekräftigeren Namen geschrieben habe. ABER in Ihrem Kommentar erwähnten Sie 'Range (colIndex & i &": "& colIndex & i) .Select' .... keine Notwendigkeit für den _repeated_ Abschnitt nach dem Doppelpunkt: 'Range (colIndex & i) .Select' .. ..wos ist eigentlich nur äquivalent zu '.cells (i, colIndex)' – whytheq

7

eine andere Methode, um zu versuchen o ut. Auch select könnte ersetzt werden, wenn Sie die anfängliche Spalte in ein Range-Objekt festlegen. Leistungsmäßig hilft es.

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 

** Zwei Methoden, um die Spaltennamen Spaltennummer zu erhalten **

  • Split()

Code

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

Code

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

+ 1 für eine andere Methode –

+0

Wissen Sie, wie wir den Spaltenindex mit Schleife als String bekommen können? wie "A", "B", ..., "AA", "AB", ... usw. so kann ich es auf meine Schleife wie folgt anwenden: 'Range (colIndex & i & ":" & colIndex & i) .Wählen Sie " _" colIndex "ist eine Variable zum Schleifenspaltenindex in excel_ – wahyueka31

+0

@Rebel Es ist möglich. Aber aus Neugier, warum gibt es viele effektive Möglichkeiten, um die Spalten zu durchlaufen, warum wollen Sie den String 'Spaltennamen '? – bonCodigo

Verwandte Themen