如何使用VBA使用偏移量扩展命名范围

时间:2019-06-13 10:16:40

标签: excel vba

我在VBA for excel中使用以下代码。

它遍历my表,并根据B列(“ OSI”)和C列(即“ Reporting”)中的值创建一个命名范围

Sub Round2()

Set sht = ThisWorkbook.Worksheets("Features")

'Reporting and OSI

Set featuresRng = sht.Range(sht.Range("B1"), sht.Range("C" & sht.Rows.Count).End(xlUp))
rngArray = featuresRng
ReDim NewArr(1 To 1)
y = 1
For i = 1 To UBound(rngArray)
    If rngArray(i, 2) = "Reporting" And rngArray(i, 1) = "OSI" Then
        ReDim Preserve NewArr(1 To y)
        NewArr(y) = featuresRng.Rows(i).Offset(0, 2).Address
        y = y + 1

    End If
Next i

sRng = Join(NewArr, Application.DecimalSeparator)
ThisWorkbook.Names.Add "OSIRep", sht.Range(sRng)

End Sub () 

当我希望范围从D列到F列时,它将创建一个命名范围,该范围是两列宽(D列到E列)。

我不确定要编辑代码的哪一部分-我很欣赏这可能是一个非常简单的解决方案,但遇到了麻烦!

2 个答案:

答案 0 :(得分:1)

使用Range.Resize property调整范围的大小。 Offset仅移动范围。

例如,如果您的范围定义为

Dim rng As Range
Set rng = Range("D:E")

您想将其扩展1列到F列,您可以使用

Set rng = rng.Resize(ColumnSize:=rng.Columns.Count + 1) 'extend range by 1 column
Debug.Print rng.Address 'will return $D:$F

答案 1 :(得分:1)

更改为此

NewArr(y) = featuresRng.Rows(i).Resize(1, 5).Offset(0, 3).Address