2014-09-30 228 views
12

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

Columns("A:E").Select 

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

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

谢谢。 Gemmo

回答

19

可以使用调整像这样:

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

在任何范围操纵你做的,始终保持在你的脑海里调整和抵消财产。

+0

嗨,如果我想使用列数 – 2016-09-16 10:50:38

+0

@JaydeepShil你能更多地讨论你想要做什么,得到的只是一个特定列的列范围是多少? – L42 2016-09-20 06:50:27

0

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

enter image description here

3

可以使用rangecells得到你想要的效果(但它是最好不要使用选择,如果你没有)

For n = 1 to 5 
range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select 
do sth 
next n 
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) 
-1

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

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

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

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

这应该是我认为的评论。 – ketan 2016-03-15 04:17:40

0

无需循环或类似..试试这个..

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..* 
+0

这似乎只为我选择了这些列中的第一行。 – jep 2016-06-20 15:40:05

4
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