2015-07-29 7 views
6

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

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

Dim Sample 1 as string 
Sample1 = activeworksheet.range("C17").value 

Dim Sample 2 as string 
Sample2 = activeworksheet.range("C18").value} 

и так далее

После excelfunctions.net учебника, я знаю, что я могу сократить декларацию

Dim Sample(1 to 20) as a string 

Но учебник роняет (потому что это учебник об именах), предлагая заполнить его следующим образом:

sample(1)=activesheet.range("C7").value 
sample(2)=activesheet.range("C7").value 

и т. Д.

Я нашел дискуссию ниже, чтобы быть на правильном пути, чтобы ответить на мои поиски, но у меня возникают проблемы с ее применением. (Excel VBA Array Ranges for a loop)

В качестве последующей заметки я в конечном счете пытаюсь присвоить значения этим переменным для использования в следующих процедурах, а не декларировать и назначать их каждый раз.

Спасибо!

ответ

3

Вы должны:

  • Определить диапазон, который вы хотите получить данные
  • Для каждой ячейки диапазона, получить Вашие данные

    dim tab() As string, cell as range, i as integer 
    i = 0 
    redim tab(0) 
    for each cell in ActiveWorksheet.Range("C1:C20") 
        tab(i) = cell 
        i = i + 1 
        redim preserve tab(i) 
    next 
    

редактировать: Я отступа чтобы отобразить его правильно

+1

Все наборы кода работал, код что Maxime предложил дополнительный бонус для сохранения этого выхода для последующего использования. Благодарю. – SydneyJ

5

Попробуйте некоторые вещи, как это:

Sub test() 
Dim sampleArr(1 To 20) As String 
Dim i As Integer 
Dim rng As Range, cel As Range 

i = 1 
Set rng = Range("C1:C20") 

For Each cel In rng 
    sampleArr(i) = cel.Value 
    i = i + 1 
Next cel 
For i = LBound(sampleArr) To UBound(sampleArr) 
    Debug.Print sampleArr(i) 
Next i 

Кроме того, если вы знаете диапазон, который вы хотите поместить в массив, вы можете просто установить массив в этом диапазоне:

Sub test() 
Dim sampleArr() As Variant 
Dim i As Integer 
Dim rng As Range, cel As Range 

i = 1 
Set rng = Range("C1:C20") ' Note, this creates a 2 Dimensional array 

sampleArr = rng ' Right here, this sets the values in the range to this array. 

For i = LBound(sampleArr) To UBound(sampleArr) 
    Debug.Print sampleArr(i, 1) ' you need the ",1" since this is 2D. 
Next i 

End Sub 
+0

Вторая часть ответа - это более простой метод, который я предполагаю, это то, что ожидал OP 'Dim Arr() As Variant 'объявляет нераспределенный массив.' 'Arr = Range (" A1: C5 ")' Аран является теперь выделенным массивом ' –

Смежные вопросы