• Řetězcové funkce Vba excel. Příklady použití funkcí VBA. Řetězcové operace

    Pro zjednodušení práce s řetězci je k dispozici řada vestavěných funkcí, které výrazně usnadňují operace jako je převod řetězců na data jiného typu, vyhledání podřetězce v řetězci, určení délky řetězce atd. V tomto článku jsme bude zvažovat nejběžnější funkce pro práci s řetězci.

    1) Funkce pro určení délky řetězce LENGTH(řetězec), vrací počet znaků v řetězci včetně mezer na konci.

    SELECT LENGTH('string') FROM DUAL vrátí hodnotu 7.

    2) Funkce pro převod znakových registrů UPPER(řetězec), LOWER(řetězec), INITCAP(řetězec). Funkce UPPER() se používá k převodu znaků na velká písmena.

    SELECT UPPER('string') FROM DUAL vrátí STRING.

    Pokud je potřeba převést znaky řetězce na malá písmena, použije se funkce LOWER().

    SELECT LOWER('STRinG') FROM DUAL vrátí řetězec.

    Funkce INITCAP převede každý první znak slova na velká písmena a všechny ostatní znaky na malá písmena za předpokladu, že oddělovacím znakem mezi slovy je mezera.

    SELECT INITCAP('řetězec1 řetězec2') FROM DUAL vrátí řetězec Řetězec1 Řetězec2.

    3) Funkce pro ořezávání úvodních a koncových mezer LTRIM(řetězec), RTRIM(řetězec), TRIM(řetězec). Podle toho první funkce ořízne všechny počáteční mezery řetězce, druhá ořízne všechny koncové mezery a třetí všechny počáteční a koncové mezery.

    SELECT LTRIM(' str1') FROM DUAL vrátí řetězec str1,
    SELECT RTRIM('str2 ') FROM DUAL vrátí řetězec str2,
    SELECT TRIM(‘ str3 ’) FROM DUAL vrátí řetězec str3.

    4) Funkce nahrazení části řetězce jiným řetězcem REPLACE(původní_řetězec, dílčí řetězec k nahrazení, dílčí řetězec k nahrazení). Pro větší přehlednost si uvažte příklad, číslo je uloženo v nějakém textovém poli tabulky. Navíc je v některých polích oddělovač mezi celočíselnou a zlomkovou částí „.“ a pro další zpracování dat potřebujeme, aby byl ve všech polích „,“. K tomu použijeme funkci REPLACE následovně. REPLACE(pole1, '.', ',') a všechny "." v poli pole bude nahrazeno symbolem ",".

    SELECT REPLACE('My_string','_','@') FROM DUAL vrátí řetězec [e-mail chráněný]

    5) Funkce pro převod dat na jiné datové typy. TO_CHAR(číslo) převede číslo na text. TO_NUMBER(řetězec) převede text na číslo. TO_DATE(řetězec, formát data) převede řetězec na datum zadaného formátu.

    SELECT TO_CHAR(123) FROM DUAL vrátí řádek 123,
    SELECT TO_NUMBER('12345') FROM DUAL vrátí číslo 12345,
    SELECT TO_DATE('01.01.2010','dd.mon.yyyy') FROM DUAL vrátí datum 01.JAN.2010.

    6) Funkce pro určení výskytu podřetězce v řetězci INSTR(zdrojový_řetězec, podřetězec, číslo_znaku). Tato funkce umožňuje určit číslo znaku ve zdrojovém řetězci, od kterého hledaný podřetězec začíná (pokud existuje). Jinak je vrácena 0. Potřebujeme například určit všechny pozice v tabulce Tabulka1, v jejímž názvu se vyskytuje podřetězec „manager“. Následující operátor se k tomu docela hodí.

    VYBERTE * Z TABULKY 1 WHERE INSTR(POST, 'správce', 1) > 0.

    To znamená, že příkaz SELECT zobrazí pouze ty záznamy z tabulky TABLE1, kde bude nalezen hledaný podřetězec "manager". Kromě toho bude vyhledávání prováděno od prvního znaku. Pokud má být vyhledávání provedeno z jiné pozice, je číslo znaku pro zahájení vyhledávání specifikováno ve třetím parametru.

    SELECT INSTR('Malý řetězec', 'řetězec', 1) FROM DUAL vrátí hodnotu 7,
    SELECT INSTR('Malý řetězec', 'Řetězec', 1) FROM DUAL vrátí hodnotu 0.

    7) Funkce extrahování podřetězce SUBSTR (zdrojový_řetězec, číslo_počátečního_symbolu, počet_znaků) ve zdrojovém řetězci. Uvažujme takový příklad, v uživatelské tabulce je adresa uložena ve tvaru název sídla, název ulice, číslo domu. Navíc s jistotou víme, že pro název obce je přiděleno striktně 20 znaků (pokud je název obce menší než 20 znaků, pak je zbytek vyplněn mezerami), pro název ulice 30 znaků, např. číslo domu 3 znaky. Dále musíme přenést všechny adresy z naší tabulky do jiné a zároveň musí být všechny 3 složky adresy v různých polích. K extrakci složek adresy použijeme funkci SUBSTR().

    SELECT SUBSTR(TABLE_1.ADDRESS, 1, 20) MĚSTO, SUBSTR(TABLE_1.ADDRESS, 21, 30) STREET, SUBSTR(TABLE_1.ADDRESS, 52, 3) MĚSTO Z TABLE_1

    Pro přenos dat musíte samozřejmě použít příkaz INSERT, ale uvažovaný příklad je docela vhodný pro pochopení fungování funkce SUBSTR.
    SELECT SUBSTR('Můj_řetězec', 4, 3) FROM DUAL vrátí řetězec str.

    Výše popsané funkce lze použít ve vstupních parametrech. Pokud tedy potřebujeme vybrat všechny znaky po určitém, pak lze číslo požadovaného znaku z funkce INSTR předat funkci SUBSTR. Pokud například potřebujete přenést všechny znaky z pole tabulky, které jsou umístěny za ",", můžete použít tuto konstrukci
    SELECT SUBSTR(Můj_řetězec, INSTR(Můj_řetězec, ',', 1), LENGTH(Můj_řetězec)- INSTR(Můj_řetězec, ',', 1)+1) Z DUAL.
    Pro určení počátečního znaku zavoláme funkci INSTR(), která vrátí číslo znaku prvního výskytu podřetězců ",". Dále definujeme počet znaků do konce řetězce jako rozdíl mezi délkou řetězce a počtem prvního výskytu podřetězce.

    8) Pro určení kódu znaku se používá funkce ASCII(string), která vrací kód 1 znaku řetězce. Například

    SELECT ASCII(W) FROM DUAL vrátí hodnotu 87.

    9) Inverzní funkce pro převod kódu znaku na znak CHR (číslo).

    SELECT CHR(87) FROM DUAL vrátí znak W.

    Funkce pro práci s čísly v Oracle.

    Oracle má řadu funkcí pro práci s čísly. Patří mezi ně funkce zvýšení čísla na mocninu POWER(), zaokrouhlení ROUND() atd.

    1) Funkce ABS(číslo) vrací absolutní hodnotu argumentu.
    SELECT ABS(-3) FROM DUAL vrátí hodnotu 3.

    2) Funkce CEIL(číslo) vrací nejmenší celé číslo větší nebo rovné předávanému parametru.
    SELECT CEIL(4.5) FROM DUAL vrátí hodnotu 5.

    3) Funkce FLOOR(číslo) vrátí největší celé číslo menší nebo rovné předávanému parametru.
    SELECT FLOOR(3.8) FROM DUAL vrátí hodnotu 3.

    4) Funkce MOD(číslo_1, číslo_2) vrátí zbytek dělení prvního parametru druhým.
    SELECT MOD(5, 3) FROM DUAL vrátí 2. Poznámka. Pokud je druhý parametr 0, pak funkce vrátí první parametr.

    5) Funkce zaokrouhlení ROUND(číslo_1, číslo_2). Zaokrouhlí první argument předaný na počet číslic předaný ve druhém argumentu. Není-li druhý parametr zadán, je považován za rovný 0, to znamená, že se zaokrouhluje na celočíselnou hodnotu. Příklady
    SELECT ROUND(101,34) FROM DUAL vrátí hodnotu 101,
    SELECT ROUND(100,1268; 2) FROM DUAL vrátí 100,13
    SELECT ROUND(1234000,3254, -2) FROM DUAL vrátí 1234000,
    SELECT ROUND(-100,122, 2) FROM DUAL vrátí -100,12.

    6) Funkce zkrácení hodnoty TRUNC(číslo_1, číslo_2). Vrátí hodnotu prvního parametru zkrácenou na počet desetinných míst zadaný ve druhém parametru. Příklady
    SELECT TRUNC(150,58) FROM DUAL vrátí hodnotu 150
    SELECT TRUNC(235,4587; 2) FROM DUAL vrátí 235,45
    SELECT TRUNC(101,23; -1) FROM DUAL vrátí hodnotu 100

    7) Oracle DBMS má řadu goniometrických funkcí SIN(číslo), COS(číslo), TAN(číslo) a jejich převrácené hodnoty ACOS(číslo), ASIN(číslo), ATAN(číslo). Vracejí hodnotu goniometrické funkce odpovídající názvu. U přímých funkcí je parametrem hodnota úhlu v radiánech a u inverzních funkcí hodnota funkce. Příklady
    SELECT COS(0,5) FROM DUAL vrátí hodnotu 0,877582561890373
    SELECT SIN(0,5) FROM DUAL vrátí hodnotu 0,479425538604203
    SELECT TAN(0,5) FROM DUAL vrátí hodnotu 0,546302489843791
    SELECT ACOS(0,5) FROM DUAL vrátí hodnotu 1,0471975511966
    SELECT ASIN(0,5) FROM DUAL vrátí 0,523598775598299
    SELECT ATAN(0,5) FROM DUAL vrátí hodnotu 0,463647609000806

    8) Hyperbolické funkce. SINH(číslo),
    COSH(číslo), TANH(číslo). SINH() vrací hyperbolický sinus předávaného parametru, COSH() vrací hyperbolický kosinus předávaného parametru, TANH() vrací hyperbolický tangens předávaného parametru. Příklady
    SELECT COSH(0,5) FROM DUAL vrátí hodnotu 1,12762596520638
    SELECT SINH(0,5) FROM DUAL vrátí hodnotu 0,521095305493747 SELECT TANH(0,5) FROM DUAL vrátí hodnotu 0,46211715726001

    9) Funkce umocňování POWER(číslo_1, číslo_2). Příklady
    SELECT POWER(10, 2) FROM DUAL vrátí 100
    SELECT POWER(100, -2) FROM DUAL vrátí hodnotu 0,0001

    10) Logaritmické funkce. LN(číslo) vrací přirozený logaritmus předávaného parametru, LOG(číslo_1, číslo_2) vrací logaritmus druhého předávaného parametru na základ daný prvnímu parametru. Navíc první parametr musí být větší než nula a ne roven 1. Příklady
    SELECT LN(5) FROM DUAL vrátí hodnotu 1,6094379124341
    SELECT LOG(10, 3) FROM DUAL vrátí hodnotu 0,477121254719662

    11) Funkce extrahování druhé odmocniny SQRT(číslo). Příklad
    SELECT SQRT(4) FROM DUAL vrátí hodnotu 2.

    12) Funkce zvýšení čísla e na mocninu EXP (čísla). Příklad
    SELECT EXP(2) FROM DUAL vrátí 7,38905609893065.

    Funkce data v Oracle

    V praxi je velmi často potřeba analyzovat data ve formě dat, provádět s nimi nějaké operace, měnit formát. Všechny tyto operace jsou již implementovány jako vestavěné funkce. Podívejme se na nejzákladnější z nich.

    1) ADD_MONTHS(datum, počet_měsíců) vrátí datum, které je od data předaného v prvním parametru odděleno počtem měsíců zadaným ve druhém parametru. Příklady
    SELECT ADD_MONTHS('01-JAN-2010', 2) FROM DUAL vrátí datum '03/01/2010'
    SELECT ADD_MONTHS('01-JAN-2010', -3) FROM DUAL vrátí datum '10/01/2009'
    SELECT ADD_MONTHS('30-JAN-2010', 1) FROM DUAL vrátí datum '28.02.2010'

    2) Funkce SYSDATE slouží k určení aktuálního data a času. Záběr této funkce je mnohem širší, než by se na první pohled mohlo zdát. V první řadě je to kontrola nad vkládáním dat do databáze. V mnoha tabulkách je vyhrazeno samostatné pole pro uložení data poslední úpravy. Velmi vhodné je také ovládání určitých vstupních parametrů pro sestavy, zejména pokud by neměly být větší než aktuální datum. Tato funkce kromě data vrací také čas na nejbližší sekundu. Příklad
    SELECT SYSDATE FROM DUAL vrátí datum '22.05.2010 14:51:20'

    3) Pokud potřebujete určit poslední den v měsíci, tak se k tomu docela hodí funkce LAST_DAY (datum). Lze jej použít k určení počtu dnů zbývajících v měsíci.
    SELECT LAST_DAY(SYSDATE) – SYSDATE FROM DUAL.
    V důsledku provedení tohoto výpisu se zobrazí počet dní od aktuálního data do konce měsíce. Příklad
    SELECT LAST_DAY('15-FEB-2010') FROM DUAL vrátí datum '28.02.2010'.

    4) Funkce pro určení počtu měsíců mezi daty MONTHS_BETWEEN(datum_1, datum_2). Příklady
    SELECT MONTHS_BETWEEN('01-JUL-2009', '01-JAN-2010') FROM DUAL vrátí -6
    SELECT MONTHS_BETWEEN('01-JUL-2009', '10-JAN-2010') FROM DUAL vrátí -6,29032258064516.
    Poznámka. Pokud jsou dny v měsících stejné, pak funkce vrátí celé číslo, jinak bude výsledkem zlomek a počet dní v měsíci bude 31.

    5) Funkce NEXT_DAY(datum, den v týdnu) umožňuje určit další datum z data zadaného v prvním parametru, které odpovídá dni v týdnu zadanému ve druhém parametru. Příklad
    SELECT NEXT_DAY('01-JUL-2009', 'pon') FROM DUAL vrátí datum '07/06/2009', tj. příští pondělí po 1. červenci 2009 je 6. den.

    6) Zaokrouhlení data ROUND(datum, formát). Druhý parametr je volitelný, pokud není zadán, pak se bere jako 'DD', to znamená, že se zaokrouhluje na nejbližší den. Příklady
    SELECT ROUND (SYSDATE) FROM DUAL vrátí datum '5/23/2010'
    SELECT ROUND(SYSDATE, MONTH) FROM DUAL vrátí datum '06/01/2010', zaokrouhlené nahoru na nejbližší první den v měsíci.

    7) Zkrácení data. Funkce TRUNC(datum, formát). Jak je uvedeno výše, nemusí mít druhý parametr. V tomto případě bude zkrácení provedeno do následujícího dne. Příklady
    SELECT TRUNC(SYSDATE) FROM DUAL vrátí datum '5/22/2010'
    SELECT TRUNC(SYSDATE, 'WW') FROM DUAL vrátí datum '5/1/2010'
    SELECT TRUNC(SYSDATE, 'Day') FROM DUAL vrátí datum '5/16/2010'.

    Funkce transformace dat v Oracle

    Tato část je věnována úvahám o převodu dat do různých formátů. V praxi jsou zcela běžné situace, kdy je potřeba zacházet s řetězcovými hodnotami jako s čísly a naopak. I přes malý počet funkcí jsou jejich schopnosti dostačující pro řešení velmi složitých aplikovaných problémů.

    1) TO_CHAR(data, formát). Syntaxe je na první pohled vcelku jednoduchá, ale vzhledem k druhému parametru lze velmi přesně popsat, do jakého formátu data převést. Takže datum i číselná hodnota mohou být převedeny na řetězec. Zvažte možnost převodu data na řetězec. Hodnoty nejběžnějších formátů jsou uvedeny v tabulce, podrobnější informace jsou obsaženy v technické dokumentaci.

    Tabulka hodnot formátu pro převod čísla na řetězec.

    SELECT TO_CHAR(SYSDATE, 'D-MONTH-YY') FROM DUAL vrátí řetězec '7-MAY -10'
    SELECT TO_CHAR(SYSDATE, 'DDD-MM-RRRR') FROM DUAL vrátí řetězec '142-05-2010'
    SELECT TO_CHAR(SYSDATE, 'Q-D-MM-RRRR') FROM DUAL vrátí řetězec '2-7-05-010'
    SELECT TO_CHAR(1050; '9.99EEEE) FROM DUAL vrátí řetězec ' 1.050E+03'
    SELECT TO_CHAR(1400, '9999V999') FROM DUAL vrátí řetězec '1400000'
    SELECT TO_CHAR(48, 'RM') FROM DUAL vrátí řetězec ' XLVIII'

    2) Funkce převodu řetězce na datum TO_DATE(řetězec, formát). Možné hodnoty formátu již byly diskutovány výše, takže uvedu několik příkladů použití této funkce. Příklady
    SELECT TO_DATE('01/01/2010', 'DD.MM.YYYY') FROM DUAL vrátí datum '01/01/2010'
    SELECT TO_DATE('01.JAN.2010', 'DD.MON.YYYY') FROM DUAL vrátí datum '01.01.2009'
    SELECT TO_DATE('15-01-10', 'DD-MM-YY') FROM DUAL vrátí datum '1/15/2010'.

    3) Funkce převodu řetězce na číselnou hodnotu TO_NUMBER(řetězec, formát). Nejběžnější hodnoty formátu jsou uvedeny v tabulce, proto zvažte použití této funkce na příkladech. Příklady
    SELECT TO_NUMBER('100') FROM DUAL vrátí číslo 100
    SELECT TO_NUMBER('0010.01', '9999D99') FROM DUAL vrátí číslo 10,01
    SELECT TO_NUMBER("500,000","999G999") FROM DUAL vrátí číslo 500000.

    (http://www.cyberforum.ru/vba/thread638743.html)

    Možnost 1

    strW= (="KOROTEEV DMITRY") strB=Nahradit(Nahradit(strW, Chr(61), ""), Chr(34), "")

    Volba

    Můžete také použít bajtové pole:

    Sub n() Dim Mass() As Byte, n As Long, Zam As String, TXT As String TXT = "=""DMITRY KOROTEEV" Mass = StrConv(TXT, vbFromUnicode) For n = 0 To UBound(Mass) If mass (n)<>34 a hmotnost (n)<>61 Then Zam = Zam + Chr$(Mass(n)) Next MsgBox Zam End Sub

    Volba

    Nebo střední filtrování:

    Sub nn() Dim n As Long, TXT As String, L As String, Zam As String TXT = "=""DMITRY KOROTEEV" For n = 1 To Len(TXT) L = Mid$(TXT, n, 1) If L<>"""" A L<>"=" Pak Zam = Zam + L Další MsgBox Zam End Sub

    Řádek 6 lze nahradit takto:
    Kód Visual Basic
    1
    Pokud L jako "[!""=]" Pak Zam = Zam + L

    Volba

    Stále přes vyhledávání pozic a rekurzi:

    Sub test() Dim n As Long, txt As String txt = "=""DMITRY KOROTEEV" txt = Change(txt, "=") txt = Change(txt, """") MsgBox txt End Sub Function Change( txt) As String, What As String, volitelná Poz. = 1) Dim n As Long If Poz<>0 Potom n = InStr(Pos, txt, Co) Změna = Mid$(txt, Poz, IIf(n - Poz.< 0, Len(txt), n - Pos)) + Change(txt, What, IIf(n = 0, 0, n + 1)) End If End Function

    Můžete použít i regulární výrazy, ale já je neznám.

    Volba

    Prostřednictvím vyhledávání a rekurze zprava doleva:

    Kód Visual Basic
    1 2 3 4 5 6 7 8 Function Change(txt As String, What As String, Optional Pos As Long) Dim n As Long If Pos = 0 Then Pos = Len(txt) If Poz<>-1 Potom n = InStrRev(txt, Co, Poz) Změna = Změna(txt, Co, IIf(n = 1, -1, n - 1)) + Mid$(txt, n + 1, Poz - n) Konec Pokud End Function

    Volba

    A existuje Rozdělit A Připojit

    Strb = Join(Split(Join(Split(strW, "="), ""), """"), "")

    Mimo téma: Ale to je pro sadisty

    Velká a malá písmena

    S ActiveDocument.Range "uppercase.Text = Ucase(.Text) "lowercase.Text = Lcase(.Text) End With

    nebo StrConv() - převod řetězce (do az Unicode, na velká a malá písmena, velké první písmeno slov atd.) - viz níže

    Řetězcové operace

    Pro data typu String existuje pouze jedna operace - zřetězení (union). Například výsledkem operace zřetězení tří řetězcových hodnot „Peter“ & „“ & „Ivanovich“ bude řetězec „Peter Ivanovič“. Pro operaci zřetězení je možné použít i jiný operátor, například: "deset" + "tisícina". Rozdíl mezi těmito výrazy je v tom, že v prvním případě mohou být operandy hodnoty libovolného typu (budou jednoduše převedeny na řetězce) a ve druhém případě musí být oba operandy typu String. Existuje velké množství funkcí pro práci s řetězci (tabulka. Funkce pro práci s řetězci).

    Tabulka "Funkce pro práci s řetězci"

    Funkce Popis Příklad
    Len(str) Určuje délku řetězce Z a=len("Znaky") následuje a=9
    Vlevo, odjet (<строка>, <длина>) Výňatek z argumentu<строка>zadaný počet znaků vlevo Left(" 1234string", 4) "1234"
    Že jo(<строка>, <длина>) Výňatek z argumentu<строка>zadaný počet znaků vpravo Right(" 1234string", 6) "string"
    Střední(<строка>, <старт> [, <длина>]) Výňatek z argumentu<строка>podřetězec se zadaným počtem znaků počínaje pozicí<старт> Mid("12345678", 4.3) ="456"
    Střední(<строка>, <старт>) Vyberte podřetězec z pozice<старт>na konec řádku Mid("12345678", 4) ="45678"
    LTrim (<строка>) Odstraní mezery na začátku řetězce LTrim("print") ="tisk"
    RTrim(<строка>) Odstraní mezery na konci řetězce RTrim("print") ="print"
    oříznout (<строка>) Odebere mezery ze začátku a konce řetězce Trim("print") ="print"
    InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) Hledá podřetězec v řetězci. Vrátí pozici prvního výskytu řetězce<строка2>do provázku<строка1>, <старт>— pozice, ze které vyhledávání začíná. Pokud je tento argument vynechán, hledání začne od začátku řetězce Instr("C:Temp test.mdb", "Test")=9 Pokud hledaný řetězec není v zadaném řetězci, funkce vrátí 0
    InStrRev([<старт>, ] <строка1>, <строка2> [, <сравнение>]) Hledá podřetězec v řetězci, ale začíná na konci řetězce a vrací pozici posledního výskytu podřetězce. Volitelný argument<сравнение>definuje typ srovnání mezi dvěma řetězci
    Nahradit(<строка>, <строкаПоиск>, <строкаЗамена>) Umožňuje nahradit jeden podřetězec jiným v řetězci. Tato funkce hledá všechny výskyty argumentu<строкаПоиск>v hádce<строка>a nahradí je<строкаЗамена>

    Pro porovnání řetězcových hodnot můžete použít obvyklé porovnávací operátory pro číselné hodnoty, protože při porovnávání znaků se porovnávají jejich binární kódy. Pro porovnání hodnot řetězců se také používá operátor Like, který umožňuje detekovat nepřesnou shodu, například výraz "Vstupní signál" Jako "Vstup *" bude mít hodnotu True, protože porovnávaný řetězec začíná slovem "Vstup" . Hvězdička (*) v řetězci nahrazuje libovolný počet znaků. Další znaky, které jsou zpracovány operátorem Like v porovnávaném řetězci:

    • ? – libovolný znak (jeden);
    • # - jedna číslice (0-9);
    • [<список>] je znak, který odpovídá jednomu ze znaků v seznamu;
    • [!<список>] je znak, který neodpovídá žádnému ze znaků v seznamu.
    • ASC() - tato funkce umožňuje vrátit číselný kód pro přenášený znak. Například ASC("D") vrátí 68. Tato funkce je užitečná pro určení dalšího nebo předchozího písmene. Obvykle se používá ve spojení s funkcí Chr(), který provede obrácenou operaci - vrátí znak podle jeho číselného kódu. Varianty této funkce - AscB() A AscW():
      • AscB() - vrací pouze první bajt číselného kódu znaku.
      • AscW() - vrátí kód pro znak Unicode
    • Chr() - vrátí znak podle jeho číselného kódu. Lze použít ve spojení s funkcí Asc(), ale nejčastěji se používá, když potřebujete vypsat servisní znak (např. uvozovky - "), protože uvozovky se do kódu VBA prostě nezadávají (musíte dát dvojnásobek). Obvykle tuto funkci používám.

      Dim sWord As String sWord = Chr(34) & "Uvedené slovo" & Chr(34)

      Existují varianty této funkce - ChrB() A ChrW(). Fungují podobně jako stejné možnosti pro funkci Asc().

    • InStr() A InStrRev() je jednou z nejoblíbenějších funkcí. Umožňuje najít znak nebo posloupnost znaků v těle řetězcové proměnné a vrátit jejich pozici. Pokud sekvence není nalezena, vrátí se 0.

      Dim sStr As String sStr = "w" If InStr(1, "Ahoj svět!", sStr, vbTextCompare) > 0 Pak MsgBox "Hledané slovo existuje!" Else MsgBox "Hledané slovo chybí!" End If

      Rozdíl mezi funkcemi je v tom, že InStr() hledá zadané slovo od začátku řetězce a InStrRev() od konce řetězce

    • Vlevo, odjet() , Že jo() , Střední() - schopnost převzít počet znaků, které určíte, z existující řetězcové proměnné vlevo, vpravo nebo uprostřed.

      Dim sStr As String sStr = "Ahoj, světe!" MsgBoxMid(sStr; 1, 5)

    • Len() - schopnost získat počet znaků v řetězci. Často se používá se smyčkami, operacemi nahrazení a podobně.
    • LCase() A UCase() - převést řetězec na malá a velká písmena. Často se používá k přípravě hodnoty pro srovnání, když se při porovnání nerozlišuje malá a velká písmena (příjmení, názvy firem, měst atd.).
    • LSet() A RSet() - schopnost naplnit jednu proměnnou symboly jiné, aniž by se změnila její délka (vlevo a vpravo). Nadbytečné znaky jsou oříznuty, mezery jsou nahrazeny chybějícími.
    • LTrim() , RTrim() , oříznout() - schopnost odstranit mezery vlevo, vpravo nebo vlevo a vpravo.
    • Nahradit() - schopnost nahradit jednu sekvenci znaků v řetězci jinou.

      Dim sStr As String sStr = "Ahoj, světe!" MsgBox Nahradit(sStr, "Ahoj", "Bay")

    • Prostor() - získat řetězec z počtu mezer, které jste zadali;
      Další podobnou funkcí je Spc() , který se používá k formátování výstupu konzole. Vynásobí mezery na základě šířky příkazového řádku.
    • StrComp() - Schopnost porovnat dva řetězce.
    • StrConv() - schopnost převést řetězec (do az Unicode, na velká a malá písmena, na velké první písmeno slov atd.):

      Dim sStr As String sStr = "Ahoj, světe!" MsgBox StrConv("Ahoj, světe!", vbUpperCase)

      Jako druhý parametr parametru lze použít konstanty:

        • vbUpperCase: Převede všechny textové znaky na VELKÁ PÍSMENA
        • vbLowerCase: Převede všechny textové znaky na malá písmena
        • vbProperCase: Převede první znak každého slova na velká písmena
        • *vbWide: Převede znaky řetězce z jednobajtových na dvoubajtové
        • *vbNarrow: Převede znaky řetězce z dvoubajtových na jednobajtové
        • **vbKatakana: Převede znaky Hiragana na znaky Katakana
        • **vb Hiragana: Převede znaky Katakana na znaky Hiragana
        • ***vb Unicode: Převede řetězec na Unicode pomocí výchozí kódové stránky systému
        • ***vbFromUnicode: Převede řetězec z Unicode na výchozí systémovou kódovou stránku

      * platí pro lokalizace na Dálném východě
      ** platí pouze pro Japonsko
      *** není podporováno v operačních systémech Macintosh

    • StrReverse() - "převrátit" řetězec umístěním jeho znaků v opačném pořadí. Funkce funguje pouze od Excelu 2000 a vyšší. Příklad použití funkce, stejně jako další metody pro překlopení slova, naleznete v tomto článku: Jak přehodit slovo?
    • Tab() je další funkce, která se používá k formátování výstupu konzoly. Vynásobí tolik znaků tabulátoru, kolik určíte. Pokud není zadáno žádné číslo, jednoduše vloží znak tabulátoru. Konstantu můžete také použít k vložení znaku tabulátoru do hodnoty řetězce vbTab.
    • Tětiva() - umožňuje získat řetězec ze zadaného počtu znaků (které opět určíte vy). Obvykle se používá k formátování výstupu ve spojení s funkcí Len().

    Následující tři funkce umožňují pracovat s polem řetězců

    Rozdělit (<строка> [, <разделитель>]) - Převede řetězec na pole podřetězců. Výchozím oddělovačem je mezera. Tato funkce je užitečná pro rozdělování vět na slova. V této funkci však můžete zadat jakýkoli jiný oddělovač. Například Split(3, "Toto je testovací nabídka") vrátí pole tří řetězcových hodnot: "Toto", "test", "nabídka". Připojit se(<массивСтрок> [, <разделитель>]) - převede pole řetězců na jeden řetězec se zadaným oddělovačem. Filtr(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) - iteruje polem hodnot řetězců a hledá v něm všechny podřetězce, které odpovídají danému řetězci. Tato funkce má čtyři argumenty:<строкаПоиск>- vyhledávací řetězec;<включение>– parametr (booleovská hodnota), který udává, zda vrácené řetězce budou obsahovat hledaný podřetězec nebo naopak budou vráceny pouze ty řetězce pole, které hledaný řetězec jako podřetězec neobsahují;<сравнение>– parametr, který definuje metodu porovnání řetězců. Další tři funkce poskytují převod řetězce: LCase(<строка>) - převede všechny znaky řetězce na malá písmena, např. funkce LCase("MAIL") vrátí řetězec "mail"; UCase(<строка>) - převede všechny znaky řetězce na velká písmena; StrConv(<строка>, <преобразование>) - provádí několik typů převodů řetězců v závislosti na druhém parametru. Tento parametr je popsán vestavěnými konstantami, například funkce StrConv("Poccia", VbProperCase) vrací hodnotu "Russia".

    A poslední dvě funkce generují znakové řetězce

    Prostor(<число>) - vytvoří řetězec sestávající ze zadaného počtu mezer; Tětiva(<число>, <символ>) - vytvoří řetězec skládající se z počtu znaků zadaných v prvním argumentu. Samotný symbol je uveden ve druhém argumentu.

    Příklad

    Napište program, který pracuje s řetězcovými proměnnými. Chcete-li to provést, vytvořte formulář, jehož štítky obsahují následující zprávy: 1 štítek: je hlášena délka řetězce zadaného do prvního textového pole (1 řádek); 2 štítek: převede všechny znaky třetího textového pole (řádek 3) na velká písmena; 3 štítek: vytiskne společně obsah prvního a druhého textového pole (řádky 1 a 2).

    Technologie provedení

    • Otevřete aplikaci Word, uložte dokument a přepněte se do editoru VBA.
    • Vytvořte formulář stejným způsobem, jak je znázorněno na obrázku.
    • Napište obslužnou rutinu události pro tlačítko OK.
    • Zkompilujte program.
    • Spusťte formulář pro provedení.

    Private Sub CommandButton1_Click() Dim a As String Dim b As String Dim c As String Dim k As String Dim d As String Dim n As Integer a=TextBox1.Text n=Len(a) Label7.Caption="délka prvního řádek je" & n & "znaky" c=TextBox3.Text k=Ucase(c) Label8.Caption=k b=TextBox2.Text d=a + » » + b Label9.Caption=d End Sub

    Úkol

    Je nutné, aby Excel v buňce A1 hledal slova napsaná čárkou ve sloupci A2 a výsledek a nalezená slova s ​​počtem jejich opakování (pokud je to možné) ve hledaném textu zapsal do dalšího, třetího, buňka. (ještě lepší by bylo, kdyby byly nějakým způsobem zvýrazněny (dobře, nebo podtrženy) v první buňce ... aby byly okamžitě viditelné. Takto vložíte slova do pole:

    Kód Visual Basic
    1 2 3 4 5 6 Dim m() As String If InStr(1, Cells(1, 2).Value, ",") > 0 Then m = Split(Replace(Cells(1, 2).Value, " ", ""), " ,") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If

    A pak v cyklu pro všechna slova, která hledáte (opět v cyklu. ve vnořených) Přidáno po 23 minutách

    Kód Visual Basic
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Možnost Porovnat text Možnost Explicit Sub QWERT() Dim R, N, K Dim m() As String If InStr(1, Cells(1, 2).Value, ",") > 0 Then m = Split(Replace(Cells() 1, 2).Value, " ", ""), ",") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If For R = 0 To UBound( m) N = 1 If InStr(1, Cells(1, 1).Hodnota, m(R)) > 0 Pak K = InStr(N, Cells(1, 1).Value, m(R)) Do COLOR K , Délka(m(R)) N = K + Délka(m(R)) K = InStr(N, Buňky(1, 1).Hodnota, m(R)) Smyčka Zatímco K > 0 Konec Pokud Další R Konec Sub Sub COLOR(ST, LN) S buňkami(1, 1).Znaky(Začátek:=ST, Délka:=LN).Font .Barva = RGB(0, 0, 255) .Tučné = True End With End Sub

    Přidáno po 15 minutách A takto bude hledat na začátku slova a vybrat celé slovo

    Kód Visual Basic
    1 2 3 4 5 6 7 8 9 10 11 Sub COLOR(ST, LN) LN = LN - 1 Proveďte LN = LN + 1 smyčka Zatímco VBA.Mid(Cells(1, 1).Value, ST + LN, 1)<>" " With Cells(1; 1).Characters(Start:=ST, Length:=LN).Font .Color = RGB(0, 0, 255) .Tučné = True End With End Sub

    Můžete dělat, co byste hledali, a ne od začátku slova, ale podle části slova. - přidat další Do-Loop. Posuňte pouze začátek (ST) doleva, dokud nebude mezera (http://www.cyberforum.ru/vba/thread567588.html)

    Jak: Porovnat řetězec se vzorem (Visual Basic)

    Kontrola souladuřetězec do šablony Datový typ řetězce (Visual Basic) - Podobný operátor (Visual Basic) . levý operand operátoru Like je řetězcový výraz a pravý operand je řetězec šablony Like vrací hodnotu typu Boolean

    Kontrola symbolů

    ? - jakákoliv jedna postava

    • myString se skládá ze znaku W následovaného libovolnými 2 znaky

      Dim sMatch As Boolean = myString Jako "W?"

    Libovolný znak ze seznamu a rozsahu

    Jakýkoli znak a poté jeden ze znaků A, C nebo E

      Dim sMatch As Boolean = myString Jako "?" citlivý na velká písmena

    • myString = počet znaků a poté jeden znak z rozsahu: i, j, k, l, m nebo n:

      Dim sMatch As Boolean = myString Jako "num" citlivý na velká písmena

    Like funguje s jako s řetězcem pole nulové délky (""). umožňuje zkontrolovat, zda je řetězec prázdný

    Postava ze seznamu nebo absence postavy

    1. Operátor Like se používá dvakrát a výsledky se kombinují pomocí operátoru Or (Visual Basic) nebo OrElse Operator (Visual Basic) .
    2. Do první šablony výpisu vložte seznam znaků v hranatých závorkách ().
    3. V druhé šabloně výpisu na místo testu nic nedávejte Příklad: Testování sedmimístného telefonního čísla phoneNum, které musí obsahovat právě tři číslice, za nimi mezeru, pomlčku, tečku nebo žádný znak a poté čtyři číslice. (první tři číslice nesmí být odděleny od posledních čtyř - "žádný znak") Null , dojde k chybě. Pokud je uveden argument typ_porovnání , argument počáteční_pozice je povinná. řádek_1 Požadované. řetězcový výraz Na kterém hledat. řádek_2 Požadované. Požadovaný řetězcový výraz. typ_porovnání Volitelný. Určuje typ srovnání řetězců. Pokud je hodnota argumentu typ_porovnání je Null, dojde k chybě. Pokud argument typ_porovnání vynecháno, typ porovnání definovaný parametrem Význam Stavenue. Chcete-li použít pravidla porovnání určená v nastavení jazyka, zadejte platný parametr LCID (LocaleID).

      Možnosti

      Argument typ_porovnání používá následující možnosti:

      Návratové hodnoty

      Poznámky

      Funkce InStrB používá se s bajtovými daty obsaženými v řetězci. Funkce InStrB vrátí pozici bajtu, nikoli pozici znaku, prvního výskytu jednoho řetězce v jiném.

      Příklady

      Použití funkce InStr ve výrazu Pokaždé, když použijete výrazy, můžete použít funkci InStr. Pokud například chcete určit polohu prvního bodu ( . ) v poli, které obsahuje IP adresu (s názvem "IPAddress"), můžete funkci použít InStr hledat to:

      InStr(1,,"."")

      Funkce InStr podívá se na každou hodnotu v poli "IPAddress" a vrátí pozici prvního bodu. Pokud je tedy hodnota prvního oktetu IP adresy 10. , funkce vrátí 3.

      Můžete použít další funkce, které využívají výsledek funkce InStr, chcete-li extrahovat hodnotu oktetu IP adresy před první tečkou, například:

      Left(,(InStr(1,."")-1))

      V tomto příkladu funkce InStr(1,,"."") vrátí polohu prvního bodu. Výsledkem odečtení 1 je počet znaků předcházejících první tečce, v tomto případě - 2. Potom funkce Vlevo, odjet extrahuje tyto znaky z levé strany pole „IPAddress“ a vrátí hodnotu 10.

      Využití funkce InStr v kódu Visual Basic for Applications (VBA).

      POZNÁMKA. Následující příklady ilustrují, jak používat možnosti modulu Visual Basic for Applications (VBA). Chcete-li získat další informace o práci s VBA, vyberte Průvodce vývojáře v rozevíracím seznamu vedle tlačítka Vyhledávání a poté do vyhledávacího pole zadejte jedno nebo více klíčových slov.

      V tomto příkladu funkce InStr se používá k získání pozice prvního výskytu jednoho řetězce v jiném.

      Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" " Řetězec pro vyhledávání. SearchChar = "P" " Hledat "P". " Textové srovnání začínající na pozici 4. Vrací 6. MyPos = Instr( 4, SearchString , vyhledávací znak , 1) " Binární porovnání začínající na pozici 1. Vrací 9. MyPos = Instr( 1, SearchString , vyhledávací znak , 0) " Porovnání je ve výchozím nastavení binární " (poslední argument je vynechán). MyPos= Instr( SearchString , vyhledávací znak ) Vrátí 9. MyPos = Instr( 1, SearchString , "W" ) Vrátí 0.

    Pokračujeme tedy v našich lekcích Pascalu pro začátečníky. V minulé lekci jsme diskutovali o , ale tam jsme se zmínili o znacích, takže než hlouběji prostudujeme datový typ, seznámíme se s typem Char. Typ dat znaků Char je datový typ, jehož hodnoty jsou jednotlivé znaky. Tento typ může obsahovat pouze jeden libovolný znak (Například: "*", "/", ".", "!" a další). Každý takový znak zabírá 8 bitů paměti, celkem jde o 256 osmibitových znaků. Všechny znaky používané znakovým typem Char jsou zapsány v tabulce znaků ASCII (American Standard Code for Information Interchange) nebo American Standard Code for Information Interchange.

    Znakové konstanty jsou uzavřeny v apostrofech, například ".", "*", "7", "s". Znakovou konstantu lze také zapsat pomocí symbolu - "mřížka", například # 185 - zobrazí znak na čísle 185 z tabulky ASCII (toto je znak "#").

    Pro typ postavy lze použít 5 funkcí: Ord, Chr, Pred, Succ a Upcase.

    Funkce Ord převede znak na jeho číselný kód ASCII tabulky. Například pro znak "#" vrátí hodnotu 185. Funkce Chr je inverzní funkce Ord. Funkce Chr převede číselný kód znaku na znak samotný, například pokud vezmete číselný kód 64, pak funkce Chr (64) vrátí znak „@“.

    Příklad programu v Pascalu s funkcí Ord:


    Začátek //Spuštění programu

    writeln(ord(x)); //Zobrazení čísla v tabulce ASCII
    konec. // Konec programu

    Příklad programu Pascal využívajícího funkci Chr:

    varx:integer; // Popis proměnných (x - celočíselný typ)
    Začátek //Spuštění programu
    readln(x); //Čtení proměnné
    writeln(chr(x)); //Zobrazení znaku po čísle v tabulce ASCII
    konec. // Konec programu

    Funkce Pred vrací hodnotu předchozího znaku z ASCII tabulky, např. pro znak "P" (Pred(P)) tato funkce vrátí znak "O". Funkce Succ je inverzí funkce Pred. Pro znak "P" vrátí funkce Succ(P) znak "Q", což je další znak z výše uvedené tabulky ASCII.

    Příklad programu Pascal využívajícího funkce Pred a Succ:

    varx:char; // Popis proměnných (x - typ znaku)
    Začátek //Spuštění programu
    readln(x); //Čtení proměnné
    writeln(pred(x)); //Vypíše předchozí znak do ASCII tabulky
    writeln(succ(x)); //Vypíše další znak do ASCII tabulky
    konec. // Konec programu

    Funkce UpCase je použitelná pouze pro malá anglická písmena. Tato funkce převádí malá anglická písmena na velká.

    Příklad programu Pascal využívajícího funkci UpCase:

    Dodatek k lekci - tabulky znaků ASCII:

    Lekce pro dnešek skončila. Pamatuj si to pascal programování jednoduché a je základem mnoha programovacích jazyků.

    • ASC () - tato funkce umožňuje vrátit číselný kód pro přenášený znak. Například ASC("D") vrátí 68. Tato funkce je užitečná pro určení dalšího nebo předchozího písmene. Obvykle se používá ve spojení s funkcí Chr(), který provede obrácenou operaci - vrátí znak podle jeho číselného kódu. Varianty této funkce - AscB() A AscW():
      • AscB () - vrací pouze první bajt číselného kódu znaku.
      • AscW () - vrátí kód pro znak Unicode
    • Chr () - vrátí znak podle jeho číselného kódu. Lze použít ve spojení s funkcí Asc(), ale nejčastěji se používá, když potřebujete vypsat servisní znak (např. uvozovky - "), protože uvozovky se do kódu VBA prostě nezadávají (musíte dát dvojnásobek). Obvykle tuto funkci používám.

      Dim sWord As String sWord = Chr(34) & "Uvedené slovo" & Chr(34)

      Existují varianty této funkce - ChrB() A ChrW(). Fungují podobně jako stejné možnosti pro funkci Asc().

    • InStr () A InStrRev () je jednou z nejoblíbenějších funkcí. Umožňuje najít znak nebo posloupnost znaků v těle řetězcové proměnné a vrátit jejich pozici. Pokud sekvence není nalezena, vrátí se 0.

      Dim sStr As String sStr = "w" If InStr(1, "Ahoj svět!", sStr, vbTextCompare) > 0 Pak MsgBox "Hledané slovo existuje!" Else MsgBox "Hledané slovo chybí!" End If

      Rozdíl mezi funkcemi je v tom, že InStr() hledá zadané slovo od začátku řetězce a InStrRev() od konce řetězce

    • Vlevo, odjet () , Že jo () , Střední () - schopnost převzít počet znaků, které určíte, z existující řetězcové proměnné vlevo, vpravo nebo uprostřed.
      Dim sStr As String sStr = "Ahoj, světe!" MsgBoxMid(sStr; 1, 5)

      Dim sStr As String sStr = "Ahoj, světe!" MsgBoxMid(sStr; 1, 5)

    • Len () - schopnost získat počet znaků v řetězci. Často se používá se smyčkami, operacemi nahrazení a podobně.
    • LCase () A UCase () - převést řetězec na malá a velká písmena. Často se používá k přípravě hodnoty pro srovnání, když se při porovnání nerozlišuje malá a velká písmena (příjmení, názvy firem, měst atd.).
    • LSet () A RSet () - schopnost naplnit jednu proměnnou symboly jiné, aniž by se změnila její délka (vlevo a vpravo). Nadbytečné znaky jsou oříznuty, mezery jsou nahrazeny chybějícími.
    • LTrim () , RTrim () , oříznout () - schopnost odstranit mezery vlevo, vpravo nebo vlevo a vpravo.
    • Nahradit () - schopnost nahradit jednu sekvenci znaků v řetězci jinou.
      Dim sStr As String sStr = "Ahoj, světe!" MsgBox Nahradit (sStr, "Ahoj" , "Bay" )

      Dim sStr As String sStr = "Ahoj, světe!" MsgBox Nahradit(sStr, "Ahoj", "Bay")

    • Prostor () - získat řetězec z počtu mezer, které jste zadali;
      Další podobnou funkcí je Spc () , který se používá k formátování výstupu konzole. Vynásobí mezery na základě šířky příkazového řádku.
    • StrComp () - Schopnost porovnat dva řetězce.
    • StrConv () - schopnost převést řetězec (do az Unicode, na velká a malá písmena, na velké první písmeno slov atd.):
      Dim sStr As String sStr = "Ahoj, světe!" MsgBox StrConv("Ahoj, světe!" , vbUpperCase)

      Dim sStr As String sStr = "Ahoj, světe!" MsgBox StrConv("Ahoj, světe!", vbUpperCase)

      Jako druhý parametr parametru lze použít konstanty:

      • vbUpperCase: Převede všechny textové znaky na VELKÁ PÍSMENA
      • vbLowerCase: Převede všechny textové znaky na malá písmena
      • vbProperCase: Převede první znak každého slova na velká písmena
      • *vbWide: Převede znaky řetězce z jednobajtových na dvoubajtové
      • *vbNarrow: Převede znaky řetězce z dvoubajtových na jednobajtové
      • **vbKatakana: Převede znaky Hiragana na znaky Katakana
      • **vb Hiragana: Převede znaky Katakana na znaky Hiragana
      • ***vb Unicode: Převede řetězec na Unicode pomocí výchozí kódové stránky systému
      • ***vbFromUnicode: Převede řetězec z Unicode na výchozí systémovou kódovou stránku
      • * platí pro lokalizaci Dálného východu
        ** platí pouze pro Japonsko
        *** není podporováno v operačních systémech Macintosh

    • StrReverse () - "převrátit" řetězec umístěním jeho znaků v opačném pořadí. Funkce funguje pouze od Excelu 2000 a vyšší. Příklad použití funkce, stejně jako další metody pro překlopení slova, naleznete v tomto článku: Jak přehodit slovo?
    • Tab () je další funkce, která se používá k formátování výstupu konzoly. Vynásobí tolik znaků tabulátoru, kolik určíte. Pokud není zadáno žádné číslo, jednoduše vloží znak tabulátoru. Konstantu můžete také použít k vložení znaku tabulátoru do hodnoty řetězce vbTab.
    • Tětiva () - umožňuje získat řetězec ze zadaného počtu znaků (které opět určíte vy). Obvykle se používá k formátování výstupu ve spojení s funkcí Len().
    Chr

    Funkce Chr

    Chr(Kód znaku)
    Chr$ (Kód znaku)
    ChrB (Kód znaku)
    ChrW(Kód znaku)

    Funkce Chr(Ch aracte r) umožňuje získat znak podle hodnoty jeho číselného kódu ANSI nebo Unicode

    Návratová hodnota

    Funkce Chr, ChrB, ChrW vrátí hodnotu podtypu String typu Variant obsahující znak odpovídající zadanému kódu znaku ANSI nebo Unicode. Funkce Chr$, ChrB$, ChrW$ vrátí hodnotu typu String

    Poznámka

    Chr A Chr$ vrátí znak podle jeho kódování ANSI
    ChrB A ChrB$ vrátit se jednobajtový tětiva
    ChrW vrátí znak Unicode, ale na systémech bez Unicode se chová stejně Chr
    Použít v parametru CharCode hodnoty vyšší než 255 generují chyby za běhu 5: Neplatné volání procedury nebo argument nebo 6: Přetečení

    Možnosti CharCode Požadovaný argument je Long, který specifikuje znak. Obvykle funkce Chr používá se při vkládání netisknutelných znaků do textových řetězců (carriage return, line feed, tab atd.). Kódy 0-31 odpovídají standardním řídicím znakům ASCII. Například, Chr(10) vrátí znak nového řádku Příklad Dim retval retval = Chr(65) Debug.Print retval " vrací A Kategorie