从命名范围创建数组

时间:2018-04-03 14:53:57

标签: arrays excel vba

我正在尝试从我的工作簿中的命名范围创建少数数组,而不是手动定义这些数组。

实施例: 这是我想要创建的数组

阵列(“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

提前致谢。

4 个答案:

答案 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