Visual Basics - 使用列号而非字母的范围选择方法

时间:2014-02-25 04:45:59

标签: excel-vba vba excel

您好我已经动态更改了列号。我需要使用该列号选择2个单元格。因为我不能使用单元格命令来选择多个单元格而我不能使用Range,因为我不知道关于字母的列,请帮我找到相同的解决方案。

提前致谢

例如我的代码是:

Dim Row_num as integer

for x=1 to 100
    Thisworkbook.Sheets("Sheet1").range((Row_num,x),(Row_num,x+1)).select
    selection.merge
next

2 个答案:

答案 0 :(得分:2)

正确用法是:

<WorkBook>.<WorkSheet>.Range(<CornerCell>, <OpositeCornerCell>)

您的代码片段中还有其他几个问题。请参阅此代码中的注释

Dim Row_num as Long ' Use Long as there may be more than 32767 rows, and its faster
Dim x as Long ' Dim all your variables

With Thisworkbook.Worksheets("Sheet1") ' Use With so you can refer to this part repeatedly
    For x = 1 to 100 Step 2 ' Maybe you meant every second cell, otherwise ranges will overlap
        ' Refer to two corners of the required Range
        ' Don't use Select 
        Range(.Cells(Row_num, x), .Cells(Row_num, x + 1)).Merge
    Next
End With

答案 1 :(得分:1)

除了克里斯的优秀答案之外,我还要添加Range对象的两个小但非常有用的方法:.Offset.Resize

使用Range.Offset,您可以“移动”一个单元格,即Range("A1").Offset(3, 2)将导致B3.Resize将按照名称说明,调整范围,即Range("A1").Resize(3, 2)将导致A1:B3

两个元素可以组合,例如Range("A1").Offset(1, 1).Resize(3, 2)会产生B2:C4

在您的情况下,您可以使用:

Option Explicit 'always use Option Explicit, as it forces you to declare variables

Sub MergeFields
    Dim lngRow As Long
    Dim rngTopLeft As Range

    Set rngTopLeft = Thisworkbook.Worksheets("Sheet1").Range("A1") 'change A1 accordingly!

    For lngRow = 1 To 100
        rngTopLeft.Offset(lngRow).Resize(1, 2).Merge
    Next lngRow
End Sub