Příklady použití funkcí VBA. Vestavěné funkce Oracle Vba excelové funkce pro práci s řetězci

  • A.S.C. () - tato funkce umožňuje vrátit číselný kód pro předaný 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 inverzní operaci - vrátí znak podle jeho vysílaného číselného kódu Varianty této funkce jsou AscB() A AscW():
    • AscB () - vrací pouze první bajt číselného kódu znaku.
    • AscW () - vrátí kód znaku v kódování 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 vytisknout servisní znak (například uvozovky - "), protože Do kódu VBA nemůžete jen zadávat uvozovky (musíte dát dvojnásobek). Toto je funkce, kterou obvykle používám.

    Dim sWord As String sWord = Chr(34) & "Slovo v uvozovkách" & Chr(34)

    Pro tuto funkci existují možnosti - ChrB() A ChrW(). Pracujte podobně jako stejné možnosti pro funkci Asc().

  • InStr () A InStrRev () - jedna z nejoblíbenějších funkcí. Umožňuje detekovat znak nebo sekvenci 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 je přítomno!" Else MsgBox "Hledané slovo chybí!" End If

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

  • 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!" MsgBox Mid(sStr, 1, 5)

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

  • Len () - schopnost získat počet znaků v řádku. Často se používá se smyčkami, operacemi nahrazení atd.
  • 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ž není při porovnávání důležité velikost písmen (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 a chybějící znaky jsou nahrazeny mezerami.
  • 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é zadáte;
    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 porovnávat dva řetězce.
  • StrConv () - schopnost převést řetězec (do Unicode a zpět, na velká a malá písmena, 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řevádí řetězcové znaky z jednobajtových na dvoubajtové
    • *vbNarrow: Převádí řetězcové znaky z dvoubajtových na jednobajtové
    • **vbKatakana: Převede znaky Hiragana na znaky Katakana
    • **vbHiragana: Převede znaky Katakana na znaky Hiragana
    • ***vbUnicode: Převede řetězec na Unicode pomocí výchozí kódové stránky systému
    • ***vbFromUnicode: Převede řetězec Unicode na výchozí kódovou stránku systému
    • * 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šší. Ukázku použití funkce, stejně jako další způsoby otáčení slova, naleznete v tomto článku: Jak otočit slovo?
  • Tab () je další funkce, která se používá k formátování výstupu konzoly. Reprodukuje znaky tabulátoru v počtu, který zadáte. Pokud není zadáno žádné množství, 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 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().

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

Možnost 1

strW= (="KOROTEEV DMITRY VLADIMIROVICH") 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 VLADIMIROVICH KOROTEEV" Mass = StrConv(TXT, vbFromUnicode) For n = 0 To UBound(Mass) If hmotnost(n)<>34 a hmotnost (n)<>61 Then Zam = Zam + Chr$(Mass(n)) Next MsgBox Zam End Sub

Volba

Nebo filtrování s mid:

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

Řádek 6 lze nahradit husky:
Kód Visual Basic
1
Pokud L jako „[!“”=]” Pak Zam = Zam + L

Volba

Také prostřednictvím vyhledávání pozic a rekurze:

Sub test() Dim n As Long, txt As String txt = "=""DMITRY VLADIMIROVICH KOROTEEV" txt = Change(txt, "=") txt = Change(txt, """") MsgBox txt End Sub Function Change( txt jako řetězec, co jako řetězec, volitelná pozice = 1) Dim n as long if pos<>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 také použít 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 také 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řevést řetězec (na Unicode a zpět, 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ří hodnot řetězce „Peter“ & » » & „Ivanovich“ bude řetězec „Peter Ivanovič“. Pro operaci zřetězení je také možné použít jiný operátor, například: „deset“ + „tisíc“. 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”) vyplývá a=9
Vlevo, odjet (<строка>, <длина>) Výňatky z argumentace<строка>zadaný počet znaků vlevo Left("1234string", 4) ="1234″
Že jo(<строка>, <длина>) Výňatky z argumentace<строка>zadaný počet znaků vpravo Right(" 1234string", 6) "string"
Střední(<строка>, <старт> [, <длина>]) Výňatky z argumentace<строка>podřetězec se zadaným počtem znaků počínaje pozicí<старт> Mid("12345678″, 4.3) ="456"
Střední(<строка>, <старт>) Extrahuje se podřetězec z pozice<старт>na konec řádku Mid("12345678″, 4) ="45678"
LTrim(<строка>) Odstraní mezery na začátku řádku LTrim("print") ="tisk"
RTrim (<строка>) Odstraní mezery na konci řetězce RTrim("print ") = "print"
Oříznout(<строка>) Odstraní mezery na začátku a na konci ř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>na linku<строка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> [, <сравнение>]) Vyhledá podřetězec v řetězci, ale spustí vyhledávání na konci řetězce a vrátí 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 v řetězci jiným. Tato funkce hledá všechny výskyty argumentu<строкаПоиск>v hádce<строка>a nahrazuje je<строкаЗамена>

K porovnání hodnot řetězců můžete použít běžné číselné porovnávací operátory, protože při porovnávání znaků se porovnávají jejich binární kódy. Operátor Like se také používá k porovnání hodnot řetězců, což umožňuje odhalit nepřesnou shodu, například výraz "Input" Like "Input*" bude vyhodnocen jako True, protože porovnávaný řetězec začíná slovem "Input". 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);
  • [<список>] – znak, který odpovídá jednomu ze znaků v seznamu;
  • [!<список>] – znak, který neodpovídá žádnému ze znaků v seznamu.
  • A.S.C.() - tato funkce umožňuje vrátit číselný kód pro předaný 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 inverzní operaci - vrátí znak podle jeho vysílaného číselného kódu Varianty této funkce jsou AscB() A AscW():
    • AscB() - vrací pouze první bajt číselného kódu znaku.
    • AscW() - vrátí kód znaku v kódování 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 vytisknout servisní znak (například uvozovky - "), protože Do kódu VBA nemůžete jen zadávat uvozovky (musíte dát dvojnásobek). Toto je funkce, kterou obvykle používám.

    Dim sWord As String sWord = Chr(34) & "Slovo v uvozovkách" & Chr(34)

    Pro tuto funkci existují možnosti - ChrB() A ChrW(). Pracujte podobně jako stejné možnosti pro funkci Asc().

  • InStr() A InStrRev() - jedna z nejoblíbenějších funkcí. Umožňuje detekovat znak nebo sekvenci 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 je přítomno!" Else MsgBox "Hledané slovo chybí!" End If

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

  • 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!" MsgBox Mid(sStr, 1, 5)

  • Len() - schopnost získat počet znaků v řádku. Často se používá se smyčkami, operacemi nahrazení atd.
  • 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ž není při porovnávání důležité velikost písmen (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 a chybějící znaky jsou nahrazeny mezerami.
  • 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é zadáte;
    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 porovnávat dva řetězce.
  • StrConv() - schopnost převést řetězec (do Unicode a zpět, na velká a malá písmena, 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řevádí řetězcové znaky z jednobajtových na dvoubajtové
      • *vbNarrow: Převádí řetězcové znaky z dvoubajtových na jednobajtové
      • **vbKatakana: Převede znaky Hiragana na znaky Katakana
      • **vbHiragana: Převede znaky Katakana na znaky Hiragana
      • ***vbUnicode: Převede řetězec na Unicode pomocí výchozí kódové stránky systému
      • ***vbFromUnicode: Převede řetězec Unicode na výchozí kódovou stránku systému

    * 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šší. Ukázku použití funkce, stejně jako další způsoby otáčení slova, naleznete v tomto článku: Jak otočit slovo?
  • Tab() je další funkce, která se používá k formátování výstupu konzoly. Reprodukuje znaky tabulátoru v počtu, který zadáte. Pokud není zadáno žádné množství, 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 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ů. Ve výchozím nastavení se jako oddělovač používá mezera. Tato funkce je vhodná pro rozdělení věty na slova. V této funkci však můžete zadat jakýkoli jiný oddělovač. Například Split(3, "Toto je testovací věta") vrátí pole tří řetězcových hodnot: "Toto", "test", "věta". Připojit (<массивСтрок> [, <разделитель>]) – převede pole řetězců na jeden řetězec se zadaným oddělovačem. Filtr(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – prohledá pole hodnot řetězců a vyhledá 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ý určuje, zda budou vrácené řádky obsahovat hledaný podřetězec nebo naopak budou vráceny pouze ty řádky pole, které hledaný řetězec jako podřetězec neobsahují;<сравнение>– parametr definující metodu porovnávání řetězců. Další tři funkce poskytují převod řetězce: LCase(<строка>) – převede všechny znaky v řetězci na malá písmena, např. funkce LCase("MAIL") vrátí řetězec "mail"; UCase(<строка>) – převede všechny znaky v řetězci na velká písmena; StrConv(<строка>, <преобразование>) – provádí několik typů transformací řetězců v závislosti na druhém parametru. Tento parametr je popsán vestavěnými konstantami, například funkce StrConv("Russia", VbProperCase) vrací hodnotu "Russia".

A poslední dvě funkce generují řetězce znaků

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

Příklad

Vytvoř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 (3. řádek) na velká písmena; 3. štítek: zobrazuje obsah prvního a druhého textového pole (řádky 1 a 2) společně.

Technologie provedení

  • Otevřete Word, uložte dokument a přejděte do editoru VBA.
  • Vytvořte tvar podobný obrázku níže.
  • Napište obslužnou rutinu události pro tlačítko OK.
  • Zkompilujte program.
  • Spusťte formulář.

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(с) Label8.Caption=k b=TextBox2.Text d=a + " " + b Label9.Caption=d End Sub

Úkol

Je nutné, aby v Excelu v buňce A1 bylo provedeno vyhledání slov napsaných oddělenými čárkami ve sloupci A2 a zapsán výsledek a nalezená slova s ​​počtem jejich opakování (pokud je to možné) ve hledaném textu. v další, třetí, buňce. (ještě lepší by bylo, kdyby byly nějakým způsobem zvýrazněny (nebo podtrženy) v první buňce..., aby byly hned vidět. Takto dá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 Pak m = Split(Replace(Cells(1, 2).Value, " ", ""), " "") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If

A pak ve smyčce vyhledáváte všechna slova (opět ve smyčce, vnořená) 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 hledat nikoli od začátku slova, ale podle části slova. — přidat další cyklus Do-Loop. Posuňte pouze začátek (ST) doleva na mezeru (http://www.cyberforum.ru/vba/thread567588.html)

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

Kontrola souladuřetězce do šablony String Data Type (Visual Basic) - Like operátor (Visual Basic) . levý operand operátoru Like je řetězcový výraz a pravý operand je řetězec šablony Like vrací booleovskou hodnotu

Kontrola postavy

? - libovolný symbol

  • 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 postava a poté jedna z postav A, C nebo E

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

  • myString = počet znaků a potom 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 jak s řetězcem pole nulové délky (""). umožňuje zkontrolovat, zda je řetězec prázdný

Znak ze seznamu nebo žádný znak

  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 nic neumisťujte na místo šeku Příklad: kontrola sedmimístného telefonního čísla phoneNum, které musí obsahovat přesně tři číslice, za nimi mezera, pomlčka, tečka nebo žádný znak a poté čtyři číslice. (první tři číslice nesmí být odděleny od posledních čtyř - „žádný znak“) Null , došlo k chybě. Pokud je uveden argument typ_porovnání , argument počáteční_pozice je povinná. řádek_1 Požadované. Řetězcový výraz, která se hledá. řádek_2 Požadované. Řetězcový výraz, který hledáte. typ_porovnání Volitelný. Definuje typ srovnání řetězců. Pokud je hodnota argumentu typ_porovnání je Null, dojde k chybě. Pokud argument typ_porovnání vynechán, typ porovnání je určen parametrem Význam Sthrůza. 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í parametry:

    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 najít 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í hodnotu 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 důsledku odečtení 1 se určí počet znaků předcházejících prvnímu bodu, v tomto případě - 2. Poté funkce Vlevo, odjet extrahuje tyto znaky z levé strany pole „IPAddress“ a vrátí hodnotu 10.

    Pomocí funkce InStr v kódu Visual Basic for Applications (VBA).

    POZNÁMKA. Následující příklady ilustrují použití modulu Visual Basic for Applications (VBA). Chcete-li získat další informace o práci s VBA, vyberte Reference 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 používá se 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 , HledatChar , 1) " Binární porovnání začínající na pozici 1. Vrací 9. MyPos = Instr( 1, SearchString , HledatChar , 0) " Porovnání je ve výchozím nastavení binární " (poslední argument je vynechán). MyPos = Instr( SearchString , HledatChar ) " Vrátí 9. MyPos = Instr( 1, SearchString , "W" ) "Vrátí 0.

Řádky v programu často obsahují zbytečné mezery na konci nebo začátku řádku, které je třeba odstranit, protože cizí počáteční nebo koncové mezery v řádku mohou způsobit problémy s programem.

VBA má tři funkce navržené k odstranění úvodních a koncových mezer z řetězce: LTrim, RTrim, trim. Mějte na paměti, že tyto funkce ve skutečnosti neupravují původní řetězec, ale spíše vracejí kopii řetězce s odstraněnými nadbytečnými mezerami.

Určení délky řetězce

Obvykle potřebujete znát délku řetězce při formátování zpráv pro uživatele nebo při formátování řetězcových dat zadaných procedurou do listu aplikace Excel nebo dokumentu aplikace Word. VBA používá funkci pro tyto účely Len. V níže uvedeném seznamu jsou mezi závorkami a slovem dvě mezery.



Měli byste být opatrní se šňůrami s pevnou délkou. Protože řetězec pevné délky má vždy stejnou délku, funkce Len vždy vrátí deklarovanou délku řetězce, bez ohledu na skutečnou délku řetězce. Pokud například řetězcová proměnná s pevnou délkou StrokeName, která je dlouhá 15 znaků, ve skutečnosti obsahuje slovo „slunce“, pak funkce Len(název tahu) vrátí výsledek 15. V tomto případě, abyste zjistili skutečnou délku řetězce (v našem případě - 6), musíte použít následující kombinaci funkcí: Len(Trim(Název tahu)).

Porovnávání a hledání řetězců

VBA má dvě funkce, které vám pomohou porovnávat řetězce: StrComp, InStr.

Funkce StrComp

Syntax


StrComp(Řetězec1, Řetězec2[, Porovnat])


Řetězec1, Řetězec2 – libovolné dva řetězcové výrazy, které je třeba porovnat.

Po provedení StrComp se vrátí jedna z následujících hodnot:

  • -1, pokud je Řetězec1 menší než Řetězec2;
  • 0, pokud jsou Řetězec1 a Řetězec2 stejné;
  • 1, pokud je Řetězec1 větší než Řetězec2.


Výše uvedený seznam porovnává dva řetězce v textovém režimu: "Výchozí řetězec" a "Výchozí řetězec". Výsledek srovnání = 1, tzn. "Výchozí řetězec" je větší než "Výchozí řetězec".

Experimentujte s různými řetězci, abyste lépe pochopili, jak funkce StrComp funguje.

Funkce InStr

Funkce InStr umožňuje určit, zda jeden řetězec obsahuje jiný řetězec.

Syntax


StrComp(Řetězec1, Řetězec2[, Porovnat])


Řetězec1, Řetězec2 – všechny platné řetězcové výrazy. Funkce kontroluje, zda je řetězec1 obsažen v řetězci2.

Porovnat je volitelný argument, kterým může být kterákoli z následujících předdefinovaných konstant (pokud je vynechán, použije se aktuální nastavení Porovnání možností):

  • vbBinaryCompare - binární porovnání dvou řetězců;
  • vbTextCompare - textové porovnání dvou řetězců;
  • vbDatabaseCompare - používá se pouze v aplikaci Microsoft Access.

Start - volitelný argument, je číselný výraz a určuje pozici znaku v řetězci1, od které má kontrola začít.


InStr vrací číslo udávající pozici znaku v Řetězec1, kde byl Řetězec2 nalezen. Pokud InStr nenajde Řetězec2 v Řetězci1, vrátí se 0. Pokud má Řetězec1 (nebo Řetězec2) hodnotu Null, pak funkce také vrátí Null.



Dělení čar

Někdy je nutné rozdělit strunu na jednotlivé části. Ve VBA řeší tento problém tři funkce: Vlevo, vpravo, uprostřed.

Funkce vlevo

Syntax


Vlevo (řetězec, délka)


Funkce vrací kopii řetězce, počínaje prvním znakem a včetně počtu znaků zadaného pomocí Délka. Pokud je délka číslo větší než skutečná délka řetězce, vrátí se celý výraz řetězce.

Správná funkce

Syntax


Vpravo (řetězec, délka)


Řetězec je jakýkoli platný řetězcový výraz.

Délka - libovolná číselná hodnota.


Funkce vrací kopii řetězce, počínaje posledním znakem a včetně počtu znaků zadaných pomocí délky zprava doleva. Pokud je délka číslo větší než skutečná délka řetězce, vrátí se celý výraz řetězce. Funkce Right vždy kopíruje znaky od konce řetězce na začátek.

Střední funkce

Syntax


Střed (řetězec, začátek, [, délka])


Řetězec je jakýkoli platný řetězcový výraz.

Délka, Začátek - libovolné číselné hodnoty.


Funkce Mid vrací kopii řetězce začínající na pozici znaku v řetězci určeném argumentem Start. Volitelný argument Délka určuje počet znaků, které se mají zkopírovat z řetězce do středu. Pokud Start obsahuje větší číslo, než je skutečná délka řetězce, vrátí se prázdný řetězec.



Znaky, které nelze zadat z klávesnice

Často se stává, že potřebujete zadat znak, pro který na klávesnici není žádná klávesa (například symbol autorských práv). Jiná situace je, když potřebujete do řetězce zahrnout znak služby VBA (nejčastějším případem je zahrnutí dvojitých uvozovek).

Chcete-li do řetězce zahrnout znaky, které nelze zadat z klávesnice nebo které mají pro jazyk VBA zvláštní význam, použijte funkci Chr.

Syntax


Chr (kód znaku)


Charcode – jakýkoli číselný výraz, který je platným kódem pro znakovou sadu používanou počítačem. Musí být celé číslo mezi 0 a 255.

Funkce Chr bere jako argument jednoznakový kód a vrací řetězec obsahující znak odpovídající tomuto kódu. Tato funkce se používá ve výše uvedených seznamech k podávání řádku při zobrazení zprávy na obrazovce Chr (13).


Protože znaky používané k zahájení nového řádku jsou tak důležité při formátování zpráv a dalších řetězcových dat manipulovaných rutinami VBA, existuje pro tyto znaky několik předdefinovaných konstant, aby nebylo nutné používat funkci Chr:

  • vbCr je znak návratu vozíku. Ekvivalent Chr(13)
  • vbLf - posun znaku o jeden řádek. Ekvivalent Chr(10)
  • vbCrLf - návrat vozíku + posun znaku o jeden řádek. Ekvivalent Chr(13)+ Chr(10)
  • vbTab - znak tabulátoru. Chr(9) ekvivalent

Chcete-li zobrazit seznam kód-symbol musíte otevřít systém nápovědy VBA a na požádání "sady postav" Zobrazí se odpovídající tabulka.



Formátování datových hodnot

Velmi často nám z toho či onoho důvodu formát dat na výstupu programu úplně nevyhovuje. Tento problém je řešen funkcí Formát.

Funkce Formát VBA je totožná s funkcí Formát v Excelu a používá stejné zástupné symboly pro formátování dat.

Syntax


Formát (výraz [, formát[, první den týdne [, první týden roku]]])


Výraz – jakýkoli platný výraz (povinný argument).

Formát je platný výraz pojmenovaného nebo uživatelem definovaného formátu.

Firstdayofweek je konstanta, která určuje první den v týdnu.

Firstweekofyear - konstanta, která definuje první týden v roce.


Chcete-li použít funkci Formát, musíte buď nastavit předdefinovaný formát nebo vytvořit obrázek konkrétního formátu pomocí zástupných znaků.


Pojmenované formáty pro použití s ​​funkcí Formát

Pojmenovaný formát Akce
Obecné datum Formátuje informace o datu a čase na sekvenční číslo data pomocí nastavení formátu data a času pro tento počítač.
Dlouhé rande Naformátuje pouze část data na sekvenční datum pomocí nastavení formátu dlouhého data v počítači.
Střední datum Formátuje pouze část data jako sekvenční datum pomocí nastavení středního formátu data v počítači.
Krátké datum Naformátuje pouze část obsahující datum na sekvenční datum pomocí nastavení počítače pro formát Krátké datum.
Dlouho Naformátuje pouze časovou část na sekvenční datum pomocí nastavení Long time format v počítači.
Střední čas Naformátuje pouze časovou část na sekvenční datum pomocí nastavení středního formátu času v počítači.
Krátká doba Naformátuje pouze časovou část na sekvenční datum pomocí nastavení počítače pro Krátký časový formát.
Obecné číslo Formátuje číslo do řetězce bez jakýchkoli speciálních znaků.
Měna Formátuje číslo se symbolem měny, oddělovačem tisíců a pouze na dvě desetinná místa.
Pevný Naformátuje číslo tak, aby vždy byla alespoň jedna číslice před desetinnou čárkou a alespoň dvě číslice za ní.
Standard Naformátuje číslo s oddělovačem tisíců tak, aby před oddělovačem desetinných míst byla alespoň jedna číslice a za ním alespoň dvě číslice.
Procent Formátuje číslo jako procento vynásobením 100 a přidáním symbolu procenta.
Vědecký Formátuje číslo do běžného exponenciálního formátu.
Ano ne Řetězec "Ano" je vrácen, pokud je formátované číslo nenulové, jinak - "Ne".
Pravda/nepravda Řetězec "True" je vrácen, pokud je formátované číslo nenulové, jinak - "False".
Zapnuto vypnuto Řetězec "On" je vrácen, pokud je formátované číslo nenulové, jinak - "Off".

Zástupné symboly pro vytváření vlastních formátů

Zástupný znak Akce (jako příklad použijte číslo 1234.45)
0 Číselný znak, který zobrazuje číslici, pokud je na dané pozici jedna, nebo 0, pokud není. Symbol 0 můžete použít k zobrazení úvodních nul pro celá čísla a koncových nul pro desetinná místa: 00000,000 zobrazí 01234,450
# Číselný symbol zobrazuje číslici, pokud je na této pozici nějaká, jinak nezobrazuje nic. Výplňový znak # je ekvivalentní 0, kromě toho, že úvodní a koncové nuly se nezobrazují: #####.### zobrazuje 1234,45
$ Zobrazuje znak dolaru: $###,###.00 zobrazuje 1 234,45 $
. Desetinný zástupný znak, zobrazí desetinnou čárku na určené pozici v řetězci zástupných znaků 0: #.##.## zobrazí 1234,45
% Symbol procenta, vynásobí hodnotu 100 a přidá znak procenta na pozici označenou zástupnými symboly 0:#.#0,00% zobrazí číslo 0,12345 jako 12,35 % (dojde k zaokrouhlení)
, Oddělovač tisíců, přidává čárky jako oddělovače tisíců v zástupných řetězcích 0 a #: ###,###,###.00 zobrazí 1 234,45
E-e- Zobrazuje hodnotu v exponenciálním formátu s exponentem pouze pro záporné hodnoty: #.####E-00 zobrazuje 1.23445E03
E+ e+ Zobrazí hodnotu v exponenciálním formátu s exponentem pro záporné i kladné hodnoty: #.####E+00 zobrazí 1.23445E+03
/ Odděluje den, měsíc a rok pro formátování hodnot data.
m Určuje způsob zobrazení měsíců v datech: m zobrazuje 1, mm - 01, mmm - leden, mmmm - leden
d Určuje způsob zobrazení dnů v datech: d zobrazuje 1, dd - 01, ddd - Ne, dddd - neděle
y Zobrazuje den v roce jako číslo od 1 do 366
yy Určuje, jak zobrazit roky v datech: yy - 66, yyyy - 1966
q Zobrazuje čtvrtletí roku jako číslo od 1 do 4
w Zobrazuje den v týdnu jako číslo (1 - neděle)
ww Zobrazuje týden v roce jako číslo od 1 do 54
: Odděluje hodiny, minuty a sekundy v hodnotách formátu času: hh:mm:ss - 01:01:01, h:m:s - 1:1:1
h Určuje způsob zobrazení hodin: hh - 01, h - 1
m Určuje způsob zobrazení minut: mm - 01, m - 1
s Určuje způsob zobrazení sekund: ss - 01, s - 1
DOPOLEDNE ODPOLEDNE Zobrazuje čas ve 12hodinovém formátu s přidanými AM nebo PM
@ Zástupný znak znaku, který zobrazuje mezeru, pokud ve formátovaném řetězci není žádný odpovídající znak.
Zobrazí všechny znaky velkými písmeny.
> Zobrazí všechny znaky malými písmeny.
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$ odpovídajícím způsobem 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ýčára
ChrW vrátí znak Unicode, ale na systémech bez Unicode je jeho chování podobné 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 dlouhá hodnota, 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, tabelator atd.). Kódy 0-31 odpovídají standardním řídicím znakům ASCII. Například, Chr(10) vrací znak nového řádku Příklad Dim retval retval = Chr(65) Debug.Print retval " vrací A Kategorie

V části o otázce Lidé prosím podrobně vysvětlete, co znamená funkce ord(x) a její inverzní chr(x) v Pascalu? daný autorem Nick Brown nejlepší odpověď je Existuje speciální tabulka znaků (rozšířený ASCII kód, kdy každý znak má číselnou hodnotu, celkem je v tabulce 255 hodnot, to znamená, že každému znaku je přiřazeno číslo,
chr(0..254) převede číslo (jeden bajt) na znak, ke kterému toto číslo patří, například chr(71) výsledkem bude písmeno "G", také stisk kláves na klávesnici vytváří vlastní kód, to je přesně ten kód, když se umístí do tohoto operátoru a dá výsledek, která klávesa je stisknuta, to jsem například já. Ale operátor ORD(x) provádí tento proces v opačném pořadí.
Nastavíme znak hodnoty a získáme číslo od 0 do 254 (jeden bajt)
například ORD("G") nám dá výsledek 71 (v desítkovém formátu)
To se zdá vše!!!

Odpověď od Katyonachik[nováček]
Je to jednoduché, opravdu)
Ord ("X") - vrátí kód znaku X z tabulky ASKII.
Výsledkem inverzní funkce bude symbol, který odpovídá zadanému kódu (ze kterého je funkce převzata) ze stejné ASCII tabulky.


Odpověď od Juri[guru]
Nejedná se o reciproční funkce!
Funkce Ord vrací pořadovou hodnotu výčtového typu.
Počítání začíná od nuly.
U typu byte funkce vrátí skutečnou hodnotu - pořadové číslo se shoduje s hodnotou.
U typu char funkce vrátí pořadové číslo znaku, které (číslo je náhodné) se shoduje s ASCII kódem.
Funkce chr vrací znak s daným ASCII kódem.
Závěr: Prostě s ohledem na symbolické hodnoty skutečně fungují jako převrácené...
Můžeme tedy říci, že funkce ord je inverzí funkce chr, ale ne naopak - funkce chr není inverzní funkce ord, protože rozsah funkce ord není omezen na práci se symboly!