• Vba pro další přesun na další hodnotu. Příkazy smyčky ve VBA. Laboratorní práce ze základů programování

    V této lekci budeme uvažovat o práci s cyklem Pro ve VBA. Ukázka práce se smyčkou For ukáže i příklad vytváření vzorců v Excelu pomocí maker.

    Cyklus Pro funguje na principu počítadla. Pro Používá se v případech, kdy je nutné opakovat některé akce předem stanovený početkrát. Například cyklus Pročasto se používá při čtení polí.

    Cyklus Pro má následující syntaxi:
    Pro čelit = start cyklu Na konec cyklu [krok krok]
    skupina operátorů, příkazů atd.
    Konec pro
    další čelit

    • "počítadlo" - proměnná, která se změní na zadanou "krok". Pokud krok není zadán, provede se ve výchozím nastavení jeden.
    • "start cyklu", "konec cyklučísla nebo proměnné označující spodní a horní hranici počítadla. Cyklus se zastaví, když "počítadlo" >"konec cyklu" ( nebo, je-li cyklus obrácený, tzn. s krokem -1, pak "čelit"< "konec cyklu").
    • Odejít pro- příkaz k vynucení zastavení cyklu. Používá se v případech, kdy došlo k nějaké události, po které je nutné zastavit provádění příkazů ve smyčce, případně zabránit vzniku chyby.

    Podívejme se na několik příkladů použití smyčky Pro. V budoucnu se s tímto cyklem budeme setkávat poměrně často.

    Příklad 1
    Jsou dány dva sloupce C a E vyplněné čísly:

    Je třeba sečíst čísla ve sloupci C s čísly ve sloupci E takto:
    C2+E21, C3+E20, ..., C21+E2. Výsledek uveďte do sloupce D jako vzorec, tj. obsah výsledné buňky by měl být "=C2+E21".

    Kód makra vypadá takto (čteme se, kam kód napsat):

    Sub Loop_For()
    „konstanta udávající hranici cyklu, tedy do jaké hodnoty má cyklus běžet
    Const n=21
    Pro i = 2 Na n
    "Vytvořte vzorec řetězce a uložte jej do buňky
    Cells(i, 4) = "=C" & CStr(i) & "+E" & CStr((n - i) + 2)
    " pokračování při běhu ve smyčce
    další i
    " zbytek programového kódu
    konec sub

    Pojďme analyzovat napsaný kód:

    • Const n = 21 - popis konstanty n s hodnotou 21, tzn. počet řádků pro procházení Pro;
    • Pro i = 2 Na n - i je čítač, který se změní o 1 s každou iterací cyklu. Čítač začíná na 2 a končí, když i>n;
    • Cells(i, 4) - buňka oddaný list, i je číslo řádku, 4 je číslo sloupce, ve kterém je zobrazen výsledek. Všimněte si, že náš čítač i označuje číslo řádku listu Excel;
    • Příště já- operátor pro uzavření smyčky a přenos ukazatele na pro. Všechno mezi tím Pro A další běží ve smyčce;
    • CStr- funkce, která převádí číslo na text.

    Buňce přiřadíme vzorec vytvořený takto "=C" & CStr(i) & "+E" & CStr((n - i) + 2). Znaménko & - "lepení" znaků, čar. Výsledkem je vzorec "=Cn+E((n - i) + 2)", kde n = 21, i je čítač.
    děsivé? Jen to tak vypadá :)

    Všechno. Po provedení makra získáme následující sloupec (zvýrazněný) a v každé buňce vzorec:

    Příklad 2
    Nyní zvažte cyklus s uvedeným krokem. Po výpočtu posledního makra jsme dostali tři sloupce, nyní musíme odečíst D od sloupce E a ve sloupci F zobrazit vzorce pro odečítání. Kód makra je následující:

    Sub Loop_For_with_step()
    Const n=21
    Pro i = n Na 2 krok -1
    Cells(i, 6) = "=E" & CStr(i) & "-D" & CStr(i)
    další i
    konec sub

    V tomto případě je vše při starém, jen smyčka nyní "běží" ne od 2, ale od 21 do 2 s krokem (Step) -1.
    Výsledek provedení bude následující:

    Cyklus Pro, ve VBA, není jediná smyčka. V budoucnu bude zvažováno několik dalších možností pro smyčky, které jsou nepostradatelné při psaní maker v Excelu.

    Jsou volány všechny akce procedury, které se opakují zadaný početkrát nebo dokud není splněna určitá podmínka či nikoli cyklus .

    Je volán proces jednorázového provedení všech příkazů uzavřených ve struktuře smyčky opakování smyčky.

    Volají se smyčkové struktury, které se vždy spouštějí daný počet opakování smyčky s pevným počtem iterací. Jiné typy struktur smyček se opakují proměnlivý počet opakování v závislosti na určité sadě podmínek. Takové cykly se nazývají neurčité cykly.

    Zavolá se blok příkazů mezi začátkem a koncem cyklu "tělo smyčky".

    Nejjednodušší struktura smyčky je pevný cyklus .

    For..Next Loop

    Syntax

    Pro čelit = Start Na konec
    Výpisy
    Další[ čelit]

    Počítadlo - libovolná číselná proměnná VBA
    Start - libovolný číselný výraz, definuje počáteční hodnotu pro počítadlo proměnné
    End - číselný výraz, definuje konečnou hodnotu pro počítadlo proměnné


    Ve výchozím nastavení VBA zvyšuje proměnnou čelit o 1 pokaždé, když jsou provedeny příkazy v cyklu. Můžete nastavit jinou hodnotu ( SterSize- libovolný číselný výraz), na který se bude měnit čelit.

    Klíčové slovo dalšíříká VBA, že bylo dosaženo konce smyčky. volitelná proměnná čelit po klíčovém slově další musí být stejná proměnná čelit, které bylo uvedeno za klíčovým slovem Pro na začátku struktury smyčky.


    Níže je uveden seznam nejjednodušší smyčky Pro další, který počítá součet číslic od 1 do 10:



    A nyní dvě varianty cyklu Pro další pomocí jiného než jednoho kroku smyčky:



    Poznámka! Při dekrementaci počítadla cyklů Pro další smyčka se provádí, když je proměnná čítače větší nebo rovna konečné hodnotě, a když je čítač smyčky inkrementován, smyčka se provádí, když je proměnná čítače menší nebo rovna konečné hodnotě.

    Pro každou další smyčku

    Cyklus Pro každý..Další nepoužívá počítadlo cyklů. Cykly Pro každý..Další se spouštějí tolikrát, kolikrát je prvků v určité skupině, jako je kolekce objektů nebo pole (o čemž bude řeč později). Jinými slovy, cyklus Pro každý..Další se provede jednou pro každý prvek ve skupině.

    Syntax

    Pro každého živel v skupina
    Výpisy
    Další[ živel]

    Element - proměnná používaná k iteraci přes všechny prvky v určité skupině
    Skupina je objekt kolekce nebo pole
    Příkazy - jeden, několik nebo žádný příkaz VBA (tělo smyčky).

    Algoritmus smyčky For….Next je znázorněn na Obr. 5.28.

    Čelit – jakákoli numerická proměnná VBA, obvykle proměnná typu Integer nebo Long.

    Start - libovolný číselný výraz a definuje počáteční hodnotu pro proměnnou Counter.

    konec - číselný výraz, který určuje konečnou hodnotu proměnné Čelit .

    Výpisy – jeden, několik nebo žádný operátor. Tyto příkazy provádějí tělo cyklu. VBA provede každý z těchto příkazů pokaždé, když se cyklus spustí.

    Klíčové slovo další

    Counter=counter+StepSise

    Obr.9.28. Pro….Algoritmus další smyčky

    Klíčové slovo další říká VBA, že bylo dosaženo konce smyčky. Nepovinná proměnná Counter za klíčovým slovem Next musí být stejná proměnná Counter, která byla zadána za klíčovým slovem For na začátku struktury cyklu.

    Syntax:

    Pro čítač = Start To End

    Při provádění smyčkyProdalší VBApostupuje následovně:

    Přiřadí reprezentovanou hodnotu hvězda , variabilní S pod .

    Provede všechny příkazy reprezentované Výpisy dokud nedosáhne klíčového slova další . Klíčové slovo další označuje VBA, že bylo dosaženo konce těla smyčky.

    Změní proměnnou S pod podle částky velikost kroku (pokud je zahrnuto volitelné slovo Krok) Pokud není definován krok, pak VBA zvýší proměnnou čítače o 1.

    Vrátí se na začátek cyklu a porovnává aktuální hodnotu proměnné S pod s hodnotou reprezentovanou End. Pokud je hodnota S pod menší hodnotu konec , VBA pokračuje v provádění od prvního příkazu za klíčovým slovem další .

    9.2.4. Vstup-výstup jednorozměrných a dvourozměrných polí

    Pole (pole) je kolekce proměnných, které mají společný název a základní typ. Pole je pohodlný způsob, jak uložit více souvisejících datových položek do jednoho kontejneru pro větší pohodlí a efektivitu programování. Všechny datové prvky uložené v poli musí být stejného typu.

    Pole umožňuje ukládat a manipulovat s mnoha položkami dat prostřednictvím jediné proměnné. Kromě snížení celkového počtu různých názvů proměnných, které je třeba sledovat, je další hlavní výhodou použití polí to, že můžete použít smyčky ke snadnému zpracování různých prvků polí. Kombinací polí a struktur smyček (obvykle For….Next) můžete napsat malý počet příkazů, které zpracovávají velké množství dat. Provádění stejných úkolů pomocí jednotlivých proměnných může vyžadovat napsání stovek příkazů.

    Rozměr pole

    Programovací jazyky obvykle používají jednorozměrná a vícerozměrná pole, z nichž některá popisují relativně jednoduché objekty, zatímco jiná popisují složitější objekty.

    Jednorozměrná pole

    Příklad jednorozměrného pole je uveden v tabulce 9.9.

    Tabulka č. 9.9

    V programování se běžně používá číslování založené na nulách.

    Chcete-li získat přístup k datům uloženým v určitém prvku pole, zadejte název pole následovaný číslem, které se nazývá index prvku. Index je uzavřen v závorkách. Pokud je například pole v tabulce 1.1 pojmenováno DoubleArray, pak následující příkaz přiřadí číslo 45 k DoubleAny.

    DoubleAny = DoubleArray (3)

    V tomto příkazu je číslo 3 indexem pole. Protože číslování prvků začíná nulou, prvek, na který odkazuje operátor, je ve skutečnosti čtvrtým prvkem pole DoubleArray.

    Při provádění příkazu DoubleArray vybere jazyk VBA hodnotu 45 a uloží tuto hodnotu do proměnné DoubleArray.

    Stejný operátor lze použít při ukládání dat do pole:

    DoubleArray (5)=12.

    Když je tento příkaz proveden, VBA umístí hodnotu 12 do zadaného prvku pole, čímž nahradí předchozí obsah tohoto prvku.

    Jednorozměrná pole se běžně používají k reprezentaci různých seznamů dat.

    Vícerozměrná pole

    Když je potřeba prezentovat tabulky dat uspořádané do řádků a sloupců, používají se k tomu vícerozměrná pole.

    Ve dvourozměrném poli se adresa každé buňky skládá ze dvou čísel: čísla řádku (první index) a čísla sloupce (druhý index). Ve VBA můžete vytvářet pole až 60 dimenzí.

    Pokud se počet prvků v poli nemění, pak se takové pole nazývá statické.

    Statická a dynamická pole

    Pokud můžete změnit počet prvků v poli během provádění programu VBA, pak se taková pole nazývají dynamická. Operátor ReDim se používá ke změně velikosti dynamického pole.

    VBA uchovává vyhrazenou oblast paměti pro všechny prvky v poli, dokud existuje proměnná typu pole. Taková pole se nazývají statická, protože počet prvků v poli se nemění.

    OperátorVolba Základna

    VBA obvykle používá pole založená na nule. Příkaz Option Base vám umožňuje zadat 0 nebo 1 jako výchozí zdroj pro indexy pole. Pokud operátor Volba Základna nepoužívá se, VBA zahájí číslování indexů od 0 (výchozí). Před deklarováním proměnných, konstant nebo procedur musíte do oblasti deklarace modulu umístit příkaz Option Base. Příkaz Option Base nemůžete umístit do procedury. V modulu můžete mít pouze jeden příkaz Option Base.

    Syntax:

    Volba Základna 0|1

    Prohlášení pole

    Deklarace pole pomocí operátoru Ztlumit má následující syntaxi.

    Syntax:

    DimVarName()

    Dim VarName (horní, horní]….)[ Tak jako typ],

    VarName je jakýkoli název pro pole, který splňuje pravidla VBA pro pojmenování identifikátorů.

    Indexy - dimenze pole.

    Jako typ - datový typ.

    Dolní – dolní mez hodnoty indexu.

    Horní - horní hranice hodnoty indexu.

    Typ - datový typ

    Pokud vynecháte typ, všechny prvky pole budou typu Variant. VBA inicializuje prvky číselných polí na nulu a prvky řetězcových polí na prázdné řetězce.

    Dim str_array (1 až 100) jako řetězec

    Dim variant_array()

    Dim str_Multiplication (0 až 15, 0 až 15) Jako řetězec

    Použití polí

    Chcete-li získat přístup k prvku pole, musíte zadat název pole následovaný hodnotou indexu uzavřenou v závorkách.

    Přístup k prvku pole má následující syntaxi.

    Syntax.

    arrayName (validIndex1, ....)

    validIndex je název pole.

    validIndex1 je platná hodnota indexu pro první dimenzi pole.

    validIndex2 je platná hodnota indexu pro druhý rozměr pole.

    Při každém přístupu k libovolnému prvku pole musíte zadat hodnotu indexu pro každou dimenzi pole.

    I/O jednorozměrných polí

    Při zadávání jednorozměrného pole musíte postupně zadat 1., 2. atd. prvky pole, podobně proveďte výstup. Pro vstup nebo výstup pole musíte zorganizovat smyčku. Pro vstup a výstup jednorozměrného pole je nejpohodlnější použít algoritmus využívající nepodmíněnou smyčku.

    Algoritmus vstupu/výstupu pro jednorozměrné pole je znázorněn na obrázku 5.29.

    Postup je vysvětlen níže.

    Sub Array () - název procedury.

    Dim Mas (5) As Integer - deklarováno jednorozměrné pole s 5 prvky, typu integer.

    Dim s As String - deklarovaná pracovní proměnná pro konečný výstup dat z pole v dialogovém okně. As String je typ dat v proměnné, která se mají uložit.

    For i = 1 To 5 – procedura v prvním cyklu For….Next vezme celá čísla od 1 do 5 a vloží je do pole.

    Mas (i) = InputBox (i) - Zadejte celé číslo pro i-tý prvek.

    Další - přechod do druhého cyklu (prvky pole jsou vloženy do řetězce a zobrazeny v dialogovém okně pomocí operátoru MsgBox).

    Pro i = 1 až 5 - prvky v řadě od 1 do 5.

    s = s & Mas(i) & ";" - vytvoření řetězce z prvků pole. Pole je zobrazeno na jednom řádku. Prvky pole jsou odděleny symbolem „;“.

    MsgBox s - výstup dříve zadaného pole.

    Obr.5.27. Jednorozměrný I/O algoritmus

    Rýže. 9.29. Algoritmus a postup pro vstup-výstup jednorozměrného pole

    Vstup/výstup 2D pole

    Algoritmus a postup pro vstup a výstup dvourozměrného pole je znázorněn na obrázku 5.30.

    Popis tohoto postupu:

    Sub Array () - název procedury

    Deklarace proměnných, které se používají v tomto postupu:

    Dim Mas (5, 5) Jako Integer - deklarováno jako dvourozměrné pole s 5 sloupci a pěti řádky, typ čísel jsou celá čísla.

    Dim s As String - deklarovaná pracovní proměnná pro konečný výstup dat z pole v dialogovém okně. As String – typ dat v proměnné, která se mají uložit

    Další i - konec operace přiřazení proměnné

    Zadání prvků pole do paměti počítače:

    Pro i = 1 až 5 - vstup se provádí z prvního prvku prvního řádku, poté z druhého atd.

    Pro j = 1 až 5 až do konce prvního řádku, pak od prvního prvku druhého řádku atd.

    Mas(i,j) = InputBox(i,j) – operátor pro vkládání prvků pole do paměti počítače

    Rýže. 9:30. Algoritmus a postup pro vstup-výstup dvourozměrného pole

    Algoritmy řazení polí

    Jako příklad uvádíme algoritmus a postup pro řazení jednorozměrného pole metodou „bubble“

    Výstup prvků zadaného pole z paměti počítače:

    Pro i = 1 až 5 - výstup se provádí podobně jako vstup

    s = s & Mas(i,j) & “; “

    s = s & Chr (13) - posun řádku (výstup ne na jeden řádek, ale na několik, jako ve vstupním poli)

    Další i - konec příkazu For….Next

    MsgBox s - zobrazí v dialogovém okně dříve zadané pole

    End Sub - konec procedury.

    Instrukce smyčky je indikace, ze které je zřejmé, která sada instrukcí (tato sada instrukcí se nazývá tělo smyčky) se musí provádět opakovaně a jaké je pravidlo pro ukončení provádění smyčky.

    7.2.1. Parametrická smyčka pro…Další

    Tato smyčka je řízena parametrem, který při opakování těla smyčky mění svou hodnotu s daným krokem z dané počáteční hodnoty na danou konečnou hodnotu. Takový cyklus se používá v případě, kdy je předem známo, kolik opakování provedení těla je třeba provést.

    Syntaxe smyčky: Pro CPI=NHCP Na KZPC[ krok CHIC] Tělo smyčky (jeden nebo více pokynů) další[CPI]

    Slova Pro(Pro), Na(před), krok(krok), další(pak) jsou vyhrazeny.

    Použitá označení:

    CPI – název parametru cyklu (proměnná libovolného číselného typu);

    NZPC – počáteční hodnota parametru cyklu (výraz libovolného číselného typu), kterou bude mít parametr cyklu při prvním provedení těla cyklu;

    KZPC je konečná hodnota parametru cyklu (výraz libovolného číselného typu), se kterou se porovnává aktuální hodnota parametru cyklu;

    CHIC – krok změny parametru smyčky (výraz libovolného číselného typu) – volitelná část instrukce smyčky.

    Číselné hodnoty NCPC a CDPC nastavují interval, ve kterém se bude parametr cyklu měnit. Volitelný parametr SHICZ určuje krok změny čítače smyčky při každém průchodu. Ve výchozím nastavení, pokud chybí, je brána rovna 1. Nakonec po pokynech, které tvoří tělo smyčky, následuje příkaz, který označuje hranici smyčky. V případě vnořených smyček (tělo smyčky obsahuje příkaz smyčky) je užitečné uvést, ke které z nich příkaz patří. další. Toho je dosaženo přidáním za slovo další název parametru smyčky.

    Proces provádění instrukce Prodalší pro pozitivní krok je znázorněno na obrázku 7.4.

    Zvažte příklady.

    V prvním příkladu napíšeme instrukce pro výpočet součtu všech lichých celých čísel od 1 do 100.

    Dim I As Integer, Sum As Integer

    Pro i = 1 až 100 Krok 2

    Částka = Částka +i

    Následující příklad demonstruje dvě možnosti: explicitní krok smyčky a počítání zpět. Toho se dosáhne nastavením záporného kroku a tím, že počáteční hodnota parametru cyklu je větší než konečná.

    Dim N jako celé číslo

    Pro N = 100 až 60 Krok -10

    Tento kód se zobrazí v aktuálním formuláři:

    Následující instrukce způsobí, že počítač pípne 50krát. Návod Pro definuje, že parametr smyčky je proměnná X, jeho počáteční a konečné hodnoty. tým další mění počítadlo v krocích.

    Dim x jako celé číslo

    návod Pro další lze předčasně ukončit příkazem Exit For. Provedení této instrukce má za následek okamžitý odchod ze smyčky.

    7.2.2. Příkaz Do While...Loop nebo Do...Loop While

    Tady Zatímco(zatím) a smyčka(smyčka) vyhrazená slova. Typové cykly Zatímco jsou určeny pro situace, kdy není předem znám počet opakování těla smyčky (iterací). Zde je syntaxe dvou druhů smyček Zatímco:

    Dělat, zatímco Skupina příkazů ConditionRepetition smyčka

    Dělat Instrukční skupina smyčka zatímco Podmínka Opakování

    Rozdíl mezi nimi spočívá v tom, že Recurrence Condition (podmínka pro opakování provádění těla smyčky) je kontrolována v prvním případě před provedením těla smyčky (smyčka - while) a ve druhém případě - po provedení těla smyčky (smyčka - před).

    Pojďme k příkladům.

    Zvažte akci v další části programu.

    Počítadlo = 0

    Dělat Zatímco Číslo > 10

    Číslo = Číslo - 1

    Počítadlo = Počítadlo + 1

    MsgBox ("Hotovo" & Counter & _

    "smyčkové iterace.")

    Po provedení této části programu se v okně funkce MsgBox zobrazí následující:

    Bylo dokončeno 10 iterací smyčky.

    V tomto programu se podmínka kontroluje před vstupem do smyčky. Pokud je proměnná Number nastavena na 9 namísto 20, příkazy uvnitř smyčky nebudou provedeny.

    V následujícím programu jsou příkazy uvnitř smyčky provedeny pouze jednou, než podmínka není splněna.

    Počítadlo = 0

    Číslo = Číslo - 1

    Počítadlo = Počítadlo + 1

    Číslo smyčky > 10

    MsgBox ("Hotovo ve smyčce" & Counter & _

    "iterace.")

    návod Dělej...Smyčka lze dokončit v předstihu s pokyny Konec Do.

    Laboratorní práce ze základů programování

    2.1. Tabulace funkcí reprezentovaných analyticky
    a sbíhají se poblíž

    Cíl práce

    · Upevňování teoretických znalostí o základech organizace větvících a cyklických struktur.

    · Získání praktických dovedností programování s využitím větvících a cyklických struktur v systému Visual Basic.

    Ve VB existují tři druhy příkazů smyčky:

    cyklus počítání: Pro...Do...Další

    Smyčky s předpoklady: Do While...Loop, Do Until...Loop, While...WEnd

    Smyčky s dodatečnými podmínkami: Do...Loop While, Do...Loop When.

    Cyklus počítání – umožňuje procházet sadou příkazů stanovený počet opakování. Jeho syntaxe je následující:

    Pro čelit = Start Na konec

    [operátory]

    [operátory]

    Další[ čelit]

    Parametr čelit je číselná proměnná (celé číslo, reálné číslo nebo datum, varianta, měna), která se automaticky zvyšuje po každé iteraci. Počáteční hodnota čelit rovný parametru Start, a konečným parametrem je konec. Pokud není zadáno, pak je krok považován za rovný 1, hodnotu kroku lze změnit. Může to být kladné nebo záporné číslo.

    Existují čtyři syntaktické konstrukty pro Do….Loop:

    Příkazy mezi klíčovými slovy Do...Loop se provádějí stanoveným počtem opakování v závislosti na podmínce. Například v následujícím fragmentu programu, když C = 100, bude podmínka splněna a smyčka vstoupí. Uvnitř smyčky se zavolá procedura a hodnota C se sníží o 1. Poté se podmínka znovu zkontroluje (C > 0) a znovu se provedou příkazy smyčky (celkem se provedou 100krát), až do C = 0. Když se podmínka C > 0 stane nepravdivou, smyčka se zastaví.

    Proveďte, dokud C > 0

    Stejný fragment programu spuštěný pomocí smyčky předběžných podmínek v syntaxi 2:

    V tomto případě se smyčka provede, zatímco podmínka je False, na rozdíl od předchozího případu, to znamená, že pokračuje před splnění podmínky C = 0.

    Příkazy smyčky v syntaxi 3 a 4 jsou velmi podobné prvním dvěma, až na podmínku Ne se vyhodnocuje, dokud se smyčka alespoň jednou neprovede.

    V syntaxích těchto smyček můžete použít operátory nepodmíněného odchodu ze smyčky Exit For a Exit Do, které umožňují přenést řízení na operátor za smyčkou. Pokud je například v následujícím fragmentu programu počáteční hodnota C >50, smyčka se okamžitě zastaví.



    Dělejte do C<= 0

    MsgBox "Start. hodnota je větší než povolená“, „Chyba vstupu“

    Smyčka While...Wend byla používána v dřívějších verzích jazyka Visual Basic. Jeho syntaxe je následující:

    Zatímco<условие>

    <Операторы>

    Na rozdíl od cyklu Do..Loop nemá smyčka While ..Wend druhou možnost, ve které se test podmínky provádí na konci smyčky. Navíc nemá příkaz ukončení smyčky jako Exit Do.