Масиви (Arrays). За какво се използват масивите (Arrays) ?

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Тест за преминаване към следващия урок

 
Записаните данни в масива НЕ могат да се променят
Твърдението НЕ е вярно
Твърдението е вярно
 
Колко елемента има масива test (0 To 18) ?
19
18
0
 
Изберете коректното име на масив
test(18)
test_18
(18)test
(18)_test

Въпроси и отговори

  • Ventsislav:

    Открих си грешката. Проблема беше в променливата "s". :)

    Димитринка Вълкова:

    Здравейте, Венцислав. Май не винаги е полезно бързо да отговарям :-)
    Когато сам откривате грешките си, се получават по-добри резултати!
    Ако имате и други въпроси, готова съм да помагам.

    Георги Ангелов:

    Здравейте, аз имам същия проблем като колегата, но не виждам къде в променливата "s" е грешката.

    Георги Ангелов:

    Открих моята грешка. Беше в оператора For each, където вместо rng_cell.value = array_names(i) изписвах rng.value=array_names(i)

    Димитринка Вълкова:

    Венцислав, Георги, много добре се справяте - сами откривате грешката! Сгрешено име на променлива е често срещана грешка в практиката! Написали сте процедура, която прави изключително сложни неща, логиката е перфектна и една малка грешка като тази (сгрешено име на променлива) обърква изпълнението. За да си спестите време и чудене "Какво не е наред в тази процедура", задавайте Option Explicit - задължително деклариране на променливите, припомнете си урок 2 от модул 4.

  • Защо рейнджа в новия шийт започва от втори ред втора колона до два реда + горната граница на масива?

    Cvetelina Raykova:

    Защо рейнджа в новия лист започва от втори ред втора колона до два реда + горната граница на масива? Та горната граница на масива е нула. Тогава се получава, че рейнджът е от втори ред, първа колона до втори ред първа колона. В същото време макросът работи правилно, значи аз не разбирам нещо.

    Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 + UBound(array_names), 1)) Логично е да е : Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 + LBound(array_names), 1))

    Както и защо i = LBound(array_names), логично е да i = UBound(array_names) и после i = i+1

    Димитринка Вълкова:

    Здравей, Цветелина. LBound е функция, която определя долната граница на масива, т.е. индексът на първия елемент на масива. По подразбиране първият елемент на масива има индекс 0. Горната граница на масива се определя с UBound, т.е. това е индексът на последния елемент в масива. Например, ако масивът има 5 елемента, Ubound=4 или както е в примера от урока: масивът има 10 елемента и затова Ubound=9. Диапазонът (обект Range) започва от втори ред първа колона (Cells(2,1)), а последната клетка в този диапазон има референция Cells(2 + UBound(array_names),1) ==> това означава следното: UBound(array_names) определя горната граница на масива, т.е. индексът на последния елемент в масива = 9. Така се определя референцията на последната клетка в диапазона 2+9 = 11 за реда, а колоната е 1. Да разгледаме твоето предложение: Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 +LBound(array_names), 1)) LBound=0, защото LBound определя долната граница на масива, т.е. индексът на първия елемент в масива, а той = 0. По тази логика обект Range има следната референция: LBound(array_names)=0 Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 +0, 1)). По същата логика i = LBound(array_names) --> LBound(array_names)=0, rng_cell.Value = array_names(i) което означава, че на първата клетка в диапазона (обект Range) се присвоява първият елемент от масива и т.н. Това с масивите наистина е малко объркващо отначало, но се надявам, че съм помогнала да го разбереш. Ако има нещо, което не е ясно, пиши.

    Cvetelina Raykova:

    Сега разбрах. Говоря английски и тълкувах Low Bound като долна граница = 9, а Upper Bound = 0, а то било обратното.

    Cvetelina Raykova:

    Пак Low Bound e долна граница, но се има предвид ниската граница, а не последната граница, затова е долна и е равна на 0.

    Димитринка Вълкова:

    Цветелина, радвам се, че успях да помогна. Не се притеснявай да питаш, когато нещо не ти е ясно!