我正在寻找一个替代这个code
的方案,但是它需要使用数字。
我想选择5列数据,起始列是一个变量,并从此列开始选择5列数据。
Columns("A:E").Select
我该如何使用整数
来引用列呢?就像下面这样?
For n = 1 to 5
Columns("n : n + 4") .select
do sth
next n
您可以像这样使用resize:
For n = 1 To 5
Columns(n).Resize(, 5).Select
'~~> rest of your code
Next
在进行任何范围操作时,始终将调整大小和偏移量属性保留在脑海中。
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
您可以使用range
和cells
来实现所需的效果(但如果不必要,最好不要使用select
)
For n = 1 to 5
range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select
do sth
next n
FirstCol = 1
LastCol = FirstCol + 5
Range(Columns(FirstCol), Columns(LastCol)).Select
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..*
.EntireColumn
可以获取更多不仅仅是单元格的内容,像这样:Range(Cells(, startColumn), Cells(, endColumn)).EntireColumn.Select
- BenRange(Columns(startColumn), Columns(endColumn)).Select
。 - Ben尝试使用以下代码,其中n
是您的变量,x是您的偏移量(在此示例中为4):
LEFT(ADDRESS(1,n+x,4),1)
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行找到最后一列,然后选择包括最后一列在内的前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
通过这种方式,您可以开始选择“Z”列后面的数据并选择许多列。
Sub SelectColumNums()
Dim xCol1 As Integer, xNumOfCols as integer
xCol1 = 26
xNumOfCols = 17
Range(Columns(xCol1), Columns(xCol1 + xNumOfCols)).Select
End Sub