2015-02-24 3 views
1

Я хочу иметь возможность заполнять массив строками данных за раз, а не элемент за элементом. Например, я хотел бы получить конечный продукт, как массив 3х3:
Заполнение массива VBA, по одной строке за один раз

путем заполнения его со строкой 1 2 3, то с 4 5 6, затем с 7 8 9.

В Excel у меня есть формулы, настроенные в ячейках F1: Z1, которые меняются на основе входов в ячейках A1: D1. Макрос загружает случай в A1: D1, а затем я хочу иметь возможность выбирать ячейки F1: Z1 и вставлять их в массив сразу, вместо того, чтобы перебирать отдельные элементы в F1, G1, H1, ..., Z1 , (У меня 10 000 случаев, поэтому я знаю, что в массиве будет 10 000 строк и 21 столбец.)

Есть ли способ сделать это, или мне нужно будет прокручивать каждый элемент отдельно?

ответ

0

Фактически вы можете заполнить массив одним выстрелом. Предположим, что ваш диапазон интересов составляет A1:C200 в Sheet1. Вы можете заполнить массив, используя следующее:

Dim v as Variant 
v = ThisWorkbook.Worksheets("Sheet1").Range("A1:C200").Value 

Это даст вам 2D-массив с 3 столбцами и 200 строками.

+0

+ 1. При использовании массивов используется 'Value2', а не' Value', т.е. 'v = ThisWorkbook.Worksheets (« Лист1 »). Диапазон (« A1: C200 »). Value2'. См. Это [сообщение] (https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/) Чарльза Уильямса , – brettdj

+0

Я знаю, что могу заполнить его одним выстрелом, но на самом деле это не то, что я ищу здесь. У меня есть одна строка формул, которая изменяется на основе некоторых входов. Мой макрос циклически проходит через каждую комбинацию входов, и я хочу уметь извлекать результаты из формул и помещать их в массив. – WJol

+0

Насколько я знаю, вы не можете заполнить строку сразу, вам нужно будет использовать цикл – Jeanno

0

Если кому-то нужна помощь, я искал решение той же потребности, и я нашел это прямо сейчас.

Вот решение, используя функцию «Index»:

Sub Test() 

    Dim varArray   As Variant 
    Dim varTemp    As Variant 

    varArray = ThisWorkbook.Worksheets("Sheet1").Range("A1:E10") 
    varTemp = Application.Index(varArray, 2, 0) 

End Sub 

В этом примере varTemp содержит значение числа строк «2» в диапазоне «А1: Е10».

Скажем, у нас есть, в столбцах А, В и С, от строки 1 до 10, эти значения:

1 a q 
2 b w 
3 c e 
4 d r 
5 e t 
6 f y 
7 g u 
8 h i 
9 i o 
10 j p 

затем:

Debug.Print varTemp(1) 
Debug.Print varTemp(2) 
Debug.Print varTemp(3) 

покажет:

2 
b 
w 

Посмотрите здесь: https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/

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