Как создать массив из диапазона? - PullRequest
1 голос
/ 21 июня 2019

Я использую функцию «Contains», которую я написал, чтобы определить, соответствуют ли записи в столбце данных словарю «допустимых» значений, которые предопределены.

Sub Validate_Data()

    Dim My_Dictionary As Variant
    My_Dictionary = Array("Entry1", "Entry2", "Entry3")

    Dim Destination As Range
    Set Destination = Range("C2:C10")

    For Each cell In Destination
        cell.FormulaR1C1 = Contains(My_Dictionary, cell)
    Next cell
End Sub

Этот код прекрасно работает, когда я указываю элементы моего массива, как указано выше.Однако, когда я пытаюсь создать массив из диапазона данных, согласно этой публикации, моя функция Contains больше не работает

Sub Validate_Data()

    Dim My_Dictionary As Variant
    My_Dictionary = Range("A1:A3").Value

    Dim Destination As Range
    Set Destination = Range("C2:C10")

    For Each cell In Destination
        cell.FormulaR1C1 = Contains(My_Dictionary, cell)
    Next cell
End Sub

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

1 Ответ

0 голосов
/ 21 июня 2019

Как указано выше, массив, созданный из range, является двухмерным.Поэтому вместо доступа к таким элементам, как My_Dictionary(x), это будет похоже на My_Dictionary(x, x).

. Для получения одномерного массива используйте Application.Transpose в своем столбце.

My_Dictionary = Application.Transpose(Range("A1:A3")).


Примечания

@ bigben - это правильно, я сразу запутался, потому что думал, что вы работаете с объектом Scripting.Dictionary.

Я бы изменил это имя на что-то вроде acceptableValues или acceptableEntries, чтобы сделать его более понятным из того, что оно содержит.

Какое бы имя вы ни использовали, хотя я бы удалилподчеркивание из имени и переменной.Это имеет особое значение в VBA и может привести к ошибкам в будущем.

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