Получение массива строк из ячеек в Excel - VBA - PullRequest
0 голосов
/ 20 марта 2020

Я работаю над программой, которая должна считывать массив значений из ячеек в другом листе в той же книге. Я в состоянии прочитать одно значение просто отлично, но когда я пытаюсь прочитать несколько, я не могу вернуть массив.

Вот что я пытаюсь сделать:

    Dim list() As Variant
    list = ActiveWorkbook.Worksheets("Sheet2").Range("A2:C2").value
    Debug.Print TypeName(list)
    Debug.Print UBound(list)
    Debug.Print LBound(list)
    Debug.Print TypeName(list(UBound(list)))

Для который выводится:

Variant()
 1 
 1 
Subscript out of range

Однако, если я попробую это там, где я ожидаю одну строку, вместо массива строк

    Dim value As String
    Let value = ActiveWorkbook.Worksheets("Site IDs and CJONs").Range("A2").value
    Debug.Print TypeName(value)
    Debug.Print value

, для которого я получаю вывод

String
Expected Value

Согласно этот вопрос Я мог бы просто вернуть массив из функции диапазона (пример из ответа ниже), но, похоже, он не работает для меня. Что я делаю не так?

    Dim DirArray As Variant
    DirArray = Range("a1:a5").Value

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Хотя это и не очевидно, это:

Dim DirArray As Variant
DirArray = Range("a1:a5").Value

на самом деле похоже на:

Dim DirArray(1 To 5, 1 To 1) As Variant

DirArray(1, 1) = Range("A1").Value
DirArray(2, 1) = Range("A2").Value
DirArray(3, 1) = Range("A3").Value
DirArray(4, 1) = Range("A4").Value
DirArray(5, 1) = Range("A5").Value

При вытягивании набора ячеек в массив обычно получается 2-D массив.

ПРИМЕЧАНИЕ:

Если вы хотите go из массива в ячейки таблицы, то, например:

Sub ytrewq()
    Dim DirArray(1 To 5, 1 To 1) As Variant

    DirArray(1, 1) = "Larry"
    DirArray(2, 1) = "Moe"
    DirArray(3, 1) = "Curly"
    DirArray(4, 1) = "Shepp"
    DirArray(5, 1) = "James"

    Range("B9").Resize(5, 1) = DirArray
End Sub

enter image description here

1 голос
/ 20 марта 2020

Я мог бы также написать свой комментарий как ответ:

Option Explicit
Sub test()    
Dim list As Variant
    list = Application.Transpose(Application.Transpose(ActiveWorkbook.Worksheets("Sheet1").Range("A2:C2").Value))
    Debug.Print TypeName(list)
    Debug.Print UBound(list)
    Debug.Print LBound(list)
    'Debug.Print UBound(list, 2) Error
    'Debug.Print LBound(list, 2) Error
    Debug.Print TypeName(list(UBound(list)))
    Debug.Print list(UBound(list))
End Sub

Дает вывод:

Variant()
 3 
 1 
String
x

, где C2 содержит букву x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...