我正在尝试从我的工作簿中的命名范围创建少数数组,而不是手动定义这些数组。
实施例: 这是我想要创建的数组
阵列(“bardzo lekka”,“lekka”,“średnia”,“ciężka”)
在命名范围$A$5:$A$8
中定义相同的数据。我想将该范围加载到上面的数组中。
我试图这样做:
kategoria_a = ActiveWorkbook.Names("kategoria_agronomiczna_gleby").RefersToRange(1, 1)
它只创建一个对象数组。
kategoria_a = ActiveWorkbook.Names("kategoria_agronomiczna_gleby")
这样做
kategoria_a = ='Dane wyjściowe'!$A$5:$A$8
提前致谢。
答案 0 :(得分:1)
如果您的值列在您可以使用的列中:
kategoria_a = Application.Transpose(ActiveWorkbook.Names("kategoria_agronomiczna_gleby").RefersToRange.Value)
如果它们列在一行中,那么你可以使用
kategoria_a = Application.Transpose(Application.Transpose(ActiveWorkbook.Names("kategoria_agronomiczna_gleby").RefersToRange.Value))
获得一维数组
答案 1 :(得分:1)
试试这个:
Dim a As Variant
Dim i As Long
Dim rng As Range, r As Range
a = Array("bardzo lekka", "lekka", "średnia", "ciężka")
For i = LBound(a) to UBound(a)
If i = LBound(a) Then
Set rng = Range(a(i))
Else
Set rng = Union(rng, a(i))
End If
Next i
a
包含所有命名范围。要访问这些值,您可以使用:
For Each r In rng
debug.print r.value
Next r
答案 2 :(得分:0)
这将获取所有命名范围,并将它们放在一个数组(myArr
)中:
Sub get_named_ranges()
Dim rng As Range
Dim nm
Dim myArr() As Variant
ReDim myArr(1 To ThisWorkbook.Names.Count)
Dim i As Long
i = 1
For Each nm In ThisWorkbook.Names
myArr(i) = nm.Name
i = i + 1
Next nm
For i = LBound(myArr) To UBound(myArr)
Debug.Print (myArr(i))
Next i
End Sub
答案 3 :(得分:0)
如果您的意思是要将数组设置为等于命名范围中的值,而不是手动输入(例如您的示例),则只需将数组设置为等于范围即可。只要“kategoria_agronomiczna_gleby”是您的命名范围。
kategoria_a = ActiveWorkbook.Range("kategoria_agronomiczna_gleby")
您可以使用此循环检查数组中的值
For i = LBound(kategoria_a, 1) To UBound(kategoria_a, 1)
Debug.Print kategoria_a(i, 1)
Next