VBA - 如何使用数字选择列?

21

我正在寻找一个替代这个code的方案,但是它需要使用数字。 我想选择5列数据,起始列是一个变量,并从此列开始选择5列数据。

Columns("A:E").Select

我该如何使用整数来引用列呢?就像下面这样?

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

29

您可以像这样使用resize:

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

在进行任何范围操作时,始终将调整大小和偏移量属性保留在脑海中。


你好,如果我想要通过列号获取特定列的列范围,该怎么办? - Jaydeep Shil
@JaydeepShil 你能详细说明你想要完成什么吗? - L42

12
Columns("A:E").Select

可以直接替换为

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

1可以被替换为一个变量

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

我认为最好处理一块列而不是循环处理从n到n+4的列,因为这样更有效率。

此外,使用选择会使您的代码变慢。因此,不要选择您的列然后对所选内容执行操作,而是直接执行操作。以下是一个将A-E列的颜色更改为黄色的示例。

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

4

您可以使用rangecells来实现所需的效果(但如果不必要,最好不要使用select

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

1
在下面的示例代码中,我使用变量只是为了展示该命令如何用于其他情况。
FirstCol = 1
LastCol = FirstCol + 5
Range(Columns(FirstCol), Columns(LastCol)).Select

1
无需循环或类似的东西...尝试这个..
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..* 

这似乎只选择了这些列中的第一行。 - jep
我点赞了这个答案,因为使用Range和Cells似乎是最容易阅读的。使用.EntireColumn可以获取更多不仅仅是单元格的内容,像这样:Range(Cells(, startColumn), Cells(, endColumn)).EntireColumn.Select - Ben
2
一个更易于阅读的版本是 Range(Columns(startColumn), Columns(endColumn)).Select - Ben

1

尝试使用以下代码,其中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)

0

我在寻找类似的东西。 我的问题是基于第5行找到最后一列,然后选择包括最后一列在内的前3列。

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn - 3), Columns(lColumn)).Select

消息框是可选的,因为它更多的是控制检查。如果您想选择最后一列之后的列,则只需反转范围选择。

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn), Columns(lColumn + 3)).Select

0
您可以将地址指定为“R1C2”而不是“B2”。在文件->选项->公式->使用公式下,有一个切换R1C1引用样式的选项。如下图所示,可以进行设置。

enter image description here


-1

通过这种方式,您可以开始选择“Z”列后面的数据并选择许多列。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接