Excel VBA Loop на столбцах
когда мы собираемся сделать цикл в строках, мы можем использовать следующий код:
i = 1
Do
Range("E" & i & ":D" & i).Select
i = i + 1
Loop Until i > 10
но что, если мы хотим сделать цикл в столбце?
Можно ли использовать тот же метод, что и выше?
в то время как столбцы в Excel являются сложными, такими как A, B, C,..., Y, Z, AA, AB, AC,... и т.д.
возникают проблемы между циклом от "Z" до "AA".
как мы делаем цикл с алфавитной колонкой от "A" до "Z", а затем продолжаем "AA", "AB" и т.д.
есть что-нибудь, что может помочь?
Ответы
Ответ 1
Да, используйте Select
в качестве примера
пример кода: Columns("A").select
Как перемещаться по столбцам:
Способ 1: (Вы можете использовать индекс для замены адреса Excel)
For i = 1 to 100
Columns(i).Select
next i
Способ 2: (с использованием адреса)
For i = 1 To 100
Columns(Columns(i).Address).Select
Next i
EDIT:
Разделите столбец для OP
columnString = Replace(Split(Columns(27).Address, ":")(0), "$", "")
например. вы хотите получить 27-й столбец → AA, вы можете получить его таким образом
Ответ 2
Другой способ опробовать.
Кроме того, select
можно заменить, когда вы устанавливаете начальный столбец в объект Range. Производительность очень помогает.
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
** Два метода для получения имени столбца с использованием номера столбца **
код
colName = Split(Range.Offset(0,i).Address, "$")(1)
код
Function myColName(colNum as Long) as String
myColName = Left(Range(0, colNum).Address(False, False), _
1 - (colNum > 10))
End Function
Ответ 3
Если вы хотите придерживаться одного и того же цикла, это будет работать:
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
ИЗМЕНИТЬ
Если на самом деле вам просто нужно прокрутить каждую ячейку в области электронной таблицы, тогда используйте что-то вроде этого:
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