我在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列)。
我不确定要编辑代码的哪一部分-我很欣赏这可能是一个非常简单的解决方案,但遇到了麻烦!
答案 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