Защо в скобите на масива arr_data2(i,2) слагаме като втори индекс 2, нали индексите стартират от нула?
Да започна по-отдалече. С оператора For i = 0 To rng_row казваме "третирай масива от долен индекс нула до горен - броя на редовете"(вярно ли разбирам?), а със следващите два записа казваме копирай от масива arr_data2 (i,2) в wks.Range ("B"&i+2). Защо в този запис дефинираме второто измерение на масива с 2? Това не реферира ли по-скоро към колона? И още нещо, защо не декларираме i като променлива? И последно - защо не използваме Rows, за да оперделим броя на редовете за динамичия масив, не ни ли трабва брой редове, а не номер на реда?
Масивите съхраняват повече променливи, които се присвояват на техните елементи. Всеки елемент на масива се определя с индекс. В примера използвам двумерен масив. Оператор For единственото нещо, което прави е да повтори инструкциите, докато броячът (i) = rng_row. Първата и втората инструкция в оператор For означават съответно: запиши в елементa на масива arr_data2(i,2) стойността, която се намира в клетката wks.Range("B" & i + 2) и запиши в елементa на масива arr_data2(i,3) стойността, която се намира в клетката wks.Range("C" & i + 2). Променливата (i) е декларирана с оператор Dim, виж началото на процедурата. В случая Row, съответно Column определят индексите съответно за реда и колоната. Според мен ще бъде полезно за Вас да изгледате още веднъж внимателно урока, но този път до край, целия урок. Така сама ще намерите отговорите на въпросите. Ако нещо не е ясно, винаги съм насреща, да помогна.