VBA - 使用数字选择列?

时间:2014-09-30 02:29:23

标签: excel vba excel-vba

我正在寻找这个code的替代品,但是使用数字。 我想选择5列,start列是一个变量,然后从中选择5列。

Columns("A:E").Select

如何使用integers来引用列?像下面的东西?

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

感谢。 Gemmo

9 个答案:

答案 0 :(得分:25)

您可以像这样使用调整大小:

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

在您执行的任何范围操作中,始终牢记调整大小和偏移属性。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

您可以rangecells一起使用以获得您想要的效果(但如果您不必使用,最好不要使用选择)

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

答案 3 :(得分: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)

答案 4 :(得分:1)

不需要循环或类似..尝试这个..

d1            d2
id   data     id   data    
--   ----     --   ----
1    1        1    2
2    4        2    5
3    6        3    3

Result
id   list
--   ----
1    [1,2]
2    [4,5]
3    [6,3]

答案 5 :(得分:0)

您可以将地址指定为" R1C2"而不是" B2"。在文件 - >下选项 - > Formuals - >使用公式有一个切换 R1C1参考样式。可以设置,如下图所示。

enter image description here

答案 6 :(得分: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

答案 7 :(得分:-1)

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

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

答案 8 :(得分:-1)

在下面的示例代码中,我使用变量来显示该命令如何用于其他情况。

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