VBA - выбор столбцов с помощью чисел?

Я ищу альтернативу этому code, но используя числа. Я хочу выбрать 5 столбцов, начальный столбец - это переменная, а затем выбирает из этого 5 столбцов.

Columns("A:E").Select

Как использовать integers вместо ссылки на столбцы? Что-то вроде ниже?

For n = 1 to 5
Columns("n : n + 4") .select
do sth
next n

Спасибо. Gemmo

Ответ 1

Вы можете изменить размер следующим образом:

For n = 1 To 5
    Columns(n).Resize(, 5).Select
    '~~> rest of your code
Next

В любом диапазоне, который вы делаете, всегда сохраняйте в своем сознании свойство Resize and Offset.

Ответ 2

Columns("A:E").Select

Может быть заменен на

Columns(1).Resize(, 5).EntireColumn.Select

Где 1 можно заменить переменной

n = 5
Columns(n).Resize(, n+4).EntireColumn.Select

По-моему, вам лучше всего иметь дело с блоком столбцов, а не с циклом от столбцов n до n + 4, поскольку он более эффективен.

Кроме того, использование select приведет к замедлению вашего кода. Поэтому вместо того, чтобы выбирать столбцы, а затем выполнять действие над выбором, попробуйте вместо этого выполнить действие напрямую. Ниже приведен пример изменения цвета столбцов A-E на желтый.

Columns(1).Resize(, 5).EntireColumn.Interior.Color = 65535

Ответ 3

вы можете использовать range с cells, чтобы получить желаемый эффект (но лучше не использовать select, если вам не нужно)

For n = 1 to 5
range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select
do sth
next n

Ответ 4

Попробуйте использовать следующее, где n - ваша переменная, а x - ваше смещение (в этом случае 4):

LEFT(ADDRESS(1,n+x,4),1)

Это вернет письмо этого столбца (так что для n = 1 и x = 4 оно вернет A + 4 = E). Затем вы можете использовать INDIRECT() для ссылки на это:

COLUMNS(INDIRECT(LEFT(ADDRESS(1,n,4),1)&":"&LEFT(ADDRESS(1,n+x,4),1)))

который при n = 1, x = 4 становится:

COLUMNS(INDIRECT("A"&":"&"E"))

и так:

COLUMNS(A:E)

Ответ 5

Вы можете указать адреса как "R1C2" вместо "B2". В разделе Файл → Параметры → Формы → Работа с формулами есть стиль ссылки R1C1. который можно установить, как показано ниже.

enter image description here

Ответ 6

В приведенном ниже примере кода я использую переменные, чтобы показать, как команда может использоваться для других ситуаций.

FirstCol = 1
LastCol = FirstCol + 5
Range(Columns(FirstCol), Columns(LastCol)).Select

Ответ 7

нет необходимости в циклах или таких.. попробуйте это.

dim startColumnas integer

dim endColumn as integer

startColumn = 7

endColumn = 24

Range(Cells(, startColumn), Cells(, endColumn)).ColumnWidth = 3.8 ' <~~ whatever width you want to set..* 

Ответ 8

Таким образом, вы можете начать выбирать данные даже за столбцом "Z" и выбирать много столбцов.

Sub SelectColumNums()
    Dim xCol1 As Integer, xNumOfCols as integer
    xCol1 = 26
    xNumOfCols = 17
    Range(Columns(xCol1), Columns(xCol1 + xNumOfCols)).Select
End Sub