Példák a VBA függvények használatára. Az Oracle Vba excel funkcióinak beépített funkciói a karakterláncokkal való munkához

  • A.S.C. () - ez a funkció lehetővé teszi az átadott karakter numerikus kódjának visszaadását. Például az ASC("D") 68-at ad vissza. Ez a függvény hasznos a következő vagy előző betű meghatározásához. Általában a funkcióval együtt használatos Chr(), amely az inverz műveletet hajtja végre - egy karaktert ad vissza a továbbított numerikus kódja szerint. AscB() És AscW():
    • AscB () - a karakter numerikus kódjának csak az első bájtját adja vissza.
    • AscW () - Unicode kódolású karakter kódját adja vissza
  • Chr () - egy karaktert numerikus kódjával tér vissza. Az Asc() függvénnyel együtt használható, de leggyakrabban akkor használják, ha szervizkaraktert kell nyomtatni (például idézetek - "), mert A VBA-kódban nem írhat be csak idézőjeleket (kettőt kell tenni). Általában ezt a funkciót használom.

    Dim sWord As String sWord = Chr(34) & "Szó idézőjelben" & Chr(34)

    Vannak lehetőségek ehhez a funkcióhoz - ChrB() És ChrW(). A funkció ugyanazon opcióihoz hasonlóan működjön Asc().

  • InStr () És InStrRev () - az egyik legnépszerűbb funkció. Lehetővé teszi egy karakter vagy karaktersorozat észlelését egy karakterláncváltozó törzsében, és visszaadja a pozícióját. Ha a sorozat nem található, akkor 0 kerül vissza.

    Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Akkor MsgBox "A keresőszó jelen van!" Else MsgBox "A keresett szó hiányzik!" Vége Ha

    A függvények közötti különbség az, hogy az InStr() a sor elejétől, az InStrRev() pedig a sor végétől keresi a megadott szót.

  • Bal () , Jobb () , Középső () - az Ön által megadott számú karakter átvétele egy meglévő karakterlánc-változóból a bal, jobb vagy középső oldalon.
    Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5)

    Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5)

  • Len () - képesség, hogy a karakterek számát egy sorban. Gyakran használják hurkokkal, helyettesítő műveletekkel stb.
  • LCase () És UCase () - konvertálja a karakterláncot kis- és nagybetűssé. Gyakran használják egy érték elkészítésére összehasonlításhoz, amikor a kis- és nagybetű nem fontos az összehasonlítás során (vezetéknevek, cégek neve, város stb.).
  • LSet () És RSet () - az a képesség, hogy egy változót egy másik szimbólumaival töltsön fel anélkül, hogy megváltoztatná a hosszát (balra és jobbra). A további karakterek le vannak vágva, és a hiányzó karaktereket szóközök helyettesítik.
  • Ltrim () , RTrim () , Vágás () - lehetőség a szóközök eltávolítására a bal, a jobb vagy a bal és a jobb oldalon egyaránt.
  • Cserélje ki () - a karaktersorozat egyik karaktersorozatának egy másikkal való helyettesítésének képessége.
    Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello" , "Bay")

    Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello", "Bay")

  • Hely () - kap egy karakterláncot a megadott számú szóközből;
    Egy másik hasonló funkció az Spc () , amely a konzol kimenetének formázására szolgál. A parancssor szélessége alapján megszorozza a szóközöket.
  • StrComp () - két karakterlánc összehasonlításának képessége.
  • StrConv () - karakterlánc konvertálásának képessége (Unicode-ra és vissza, nagy- és kisbetűkre a szavak első betűjét nagybetűvel írjuk stb.):
    Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!" , vbUpperCase)

    Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!", vbUpperCase)

    Második paraméterparaméterként a konstansok használhatók:

    • vbUpperCase: Az összes szöveges karaktert NAGYBETŰvé alakítja
    • vbLowerCase: Az összes szöveges karaktert kisbetűvé alakítja
    • vbProperCase: Minden szó első karakterét nagybetűssé alakítja
    • *vbWide: A karakterlánc karaktereit egybájtosról kétbájtosra alakítja
    • *vbNarrow: A karakterlánc karaktereit kétbájtosról egybájtosra konvertálja
    • **vbKatakana: A hiragana karaktereket Katakana karakterekké alakítja
    • **vbHiragana: A katakana karaktereket hiragana karakterekké alakítja
    • ***vbUnicode: A karakterláncot a rendszer alapértelmezett kódlapja segítségével Unicode-dá alakítja
    • ***vbFromUnicode: A Unicode karakterláncot a rendszer alapértelmezett kódlapjává alakítja
    • * Távol-Kelet lokalizációjára vonatkozik
      ** Csak Japánra vonatkozik
      *** Macintosh operációs rendszereken nem támogatott

  • StrReverse () - „fordítson meg” egy karakterláncot a karaktereinek fordított sorrendbe helyezésével. A funkció csak Excel 2000 és újabb verziókban működik. Ebben a cikkben található egy példa a függvény használatára, valamint a szófordítás egyéb módszereire: Hogyan lehet megfordítani egy szót?
  • Tab () egy másik funkció, amelyet a konzol kimenetének formázására használnak. Tabulátor karaktereket reprodukál a megadott számban. Ha nincs megadva mennyiség, egyszerűen beszúr egy tabulátor karaktert. A konstans segítségével tabulátor karaktert is beszúrhat egy karakterlánc értékébe vbTab.
  • Húr () - lehetővé teszi, hogy egy megadott számú karakterből álló sztringet kapjon (amiket ismét Ön határoz meg). Általában a kimenet formázására használják a funkcióval együtt Len().

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

1.opció

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

választási lehetőség

Használhat bájttömböt is:

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 UBound(Mass) Ha Tömeg(n)<>34 És mise(n)<>61 Ezután Zam = Zam + Chr$(Tömeg(n)) Következő MsgBox Zam End Sub

választási lehetőség

Vagy szűrés középsővel:

Sub nn() Dim n As Long, TXT 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) Ha L<>"""" És én<>"=" Majd Zam = Zam + L Következő MsgBox Zam End Sub

A 6. sor helyettesíthető huskyval:
Visual Basic Code
1
Ha L-nek tetszik „[!”=]”, akkor Zam = Zam + L

választási lehetőség

Pozíciókereséssel és rekurzióval is:

Alteszt() Dim n As Long, txt As String txt = "=""DMITRY VLADIMIROVICH KOROTEEV" txt = Változás(txt, "=") txt = Módosítás(txt, """") MsgBox txt Vége Alfüggvény változás( txt karakterláncként, mi karakterláncként, opcionális pozíció = 1) halványítás n hosszú, ha poz.<>0 Akkor n = InStr(Pos, txt, What) Change = Mid$(txt, Pos, IIf(n - Pos< 0, Len(txt), n - Pos)) + Change(txt, What, IIf(n = 0, 0, n + 1)) End If End Function

Használhatsz reguláris kifejezéseket is, de nem ismerem őket.

választási lehetőség

Jobbról balra történő kereséssel és rekurzióval:

Visual Basic Code
1 2 3 4 5 6 7 8 Funkció módosítása (txt karakterláncként, mi karakterláncként, opcionális pozíció hosszú) dim n hosszú, ha Pos = 0 akkor Pos = Len(txt) ha poz.<>-1 Akkor n = InStrRev(txt, mi, poz.) Változás = Változás(txt, Mit, IIf(n = 1, -1, n - 1)) + Közép$(txt, n + 1, Pos - n) Vége Ha Funkció befejezése

választási lehetőség

És van olyan is HasítottÉs Csatlakozik

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

Off topic: De ez a szadistáknak szól

Kis- és nagybetűk

Az ActiveDocument.Range "nagybetű.Szöveg = Ucase(.Text) "kisbetűs.Szöveg = Lcase(.Text) Vége ezzel:

vagy StrConv() - karakterlánc konvertálása (Unicode-ba és vissza, nagy- és kisbetűvé, a szavak első betűje nagybetűvel stb.) - lásd alább

String műveletek

A String típusú adatokhoz csak egy művelet létezik - összefűzés (union). Például három karakterláncérték „Peter” & » » & „Ivanovich” összefűzésének eredménye a „Peter Ivanovich” karakterlánc lesz. Más operátor is használható az összefűzési művelethez, például: „tíz” + „ezer”. A különbség ezek között a kifejezések között az, hogy az első esetben az operandusok bármilyen típusú értékek lehetnek (egyszerűen karakterláncokká alakítják őket), a második esetben pedig mindkét operandusnak String típusúnak kell lennie. A karakterláncokkal való munkavégzéshez nagyszámú függvény létezik (tábla. Függvények karakterláncokkal való munkához).

Táblázat "Funkciók a karakterláncokkal való munkához"

Funkció Leírás Példa
Len(str) Meghatározza a karakterlánc hosszát Az a=len(“Karakterek”)-ből a=9 következik
Bal (<строка>, <длина>) Kivonatok az érvelésből<строка>megadott számú karakter a bal oldalon Left("1234string", 4) ="1234"
Jobb(<строка>, <длина>) Kivonatok az érvelésből<строка>megadott számú karakter a jobb oldalon Right(" 1234string", 6) ="karakterlánc"
Középső(<строка>, <старт> [, <длина>]) Kivonatok az érvelésből<строка>részkarakterlánc a megadott számú karakterrel, a pozíciótól kezdve<старт> Mid("12345678", 4.3) ="456"
Középső(<строка>, <старт>) A pozícióból egy részkarakterlánc kinyerésre kerül<старт>a sor végére Mid("12345678", 4) ="45678"
LTrim(<строка>) Eltávolítja a szóközöket a sor elején LTrim("print") ="nyomtatás"
Rtrim (<строка>) Eltávolítja a szóközöket a karakterlánc végén RTrim("print ") = "nyomtatás"
Trim(<строка>) Eltávolítja a szóközöket a karakterlánc elején és végén Trim("print") ="print"
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) Alkarakterláncot keres egy karakterláncban. Egy karakterlánc első előfordulásának pozícióját adja vissza<строка2>a vonalhoz<строка1>, <старт>— az a pozíció, ahonnan a keresés kezdődik. Ha ezt az argumentumot kihagyjuk, a keresés a karakterlánc elejétől kezdődik Instr("C:Temp test.mdb", "Test")=9 Ha a keresési karakterlánc nem a megadott karakterláncban található, a függvény 0-t ad vissza
InStrRev([<старт>, ] <строка1>, <строка2> [, <сравнение>]) Egy karakterláncban keres egy részkarakterláncot, de a keresést a karakterlánc végén kezdi, és visszaadja a részkarakterlánc utolsó előfordulásának pozícióját. Opcionális érv<сравнение>meghatározza a két karakterlánc összehasonlításának típusát
Csere(<строка>, <строкаПоиск>, <строкаЗамена>) Lehetővé teszi, hogy egy karakterláncban egy részkarakterláncot lecseréljen egy másikra. Ez a függvény megkeresi az argumentum összes előfordulását<строкаПоиск>vitában<строка>és helyettesíti őket azzal<строкаЗамена>

A karakterlánc-értékek összehasonlításához használhat szokásos numerikus összehasonlító operátorokat, mivel a karakterek összehasonlításakor a rendszer a bináris kódjaikat hasonlítja össze. A Like operátor a karakterláncok értékeinek összehasonlítására is használható, ami lehetővé teszi a pontatlan egyezés észlelését, például az "Input" Like "Input*" kifejezés igaz lesz, mivel az összehasonlítandó karakterlánc az "Input" szóval kezdődik. A karakterláncban lévő csillag (*) tetszőleges számú karaktert helyettesít. Egyéb karakterek, amelyeket a Like operátor dolgoz fel az összehasonlított karakterláncban:

  • ? – bármilyen karakter (egy);
  • # – egy számjegy (0-9);
  • [<список>] – egy karakter, amely megegyezik a lista valamelyik karakterével;
  • [!<список>] – olyan karakter, amely nem egyezik a lista egyik karakterével sem.
  • A.S.C.() - ez a funkció lehetővé teszi az átadott karakter numerikus kódjának visszaadását. Például az ASC("D") 68-at ad vissza. Ez a függvény hasznos a következő vagy előző betű meghatározásához. Általában a funkcióval együtt használatos Chr(), amely az inverz műveletet hajtja végre - egy karaktert ad vissza a továbbított numerikus kódja szerint. AscB() És AscW():
    • AscB() - a karakter numerikus kódjának csak az első bájtját adja vissza.
    • AscW() - Unicode kódolású karakter kódját adja vissza
  • Chr() - egy karaktert numerikus kódjával tér vissza. Az Asc() függvénnyel együtt használható, de leggyakrabban akkor használják, ha szervizkaraktert kell nyomtatni (például idézetek - "), mert A VBA-kódban nem írhat be csak idézőjeleket (kettőt kell tenni). Általában ezt a funkciót használom.

    Dim sWord As String sWord = Chr(34) & "Szó idézőjelben" & Chr(34)

    Vannak lehetőségek ehhez a funkcióhoz - ChrB() És ChrW(). A funkció ugyanazon opcióihoz hasonlóan működjön Asc().

  • InStr() És InStrRev() - az egyik legnépszerűbb funkció. Lehetővé teszi egy karakter vagy karaktersorozat észlelését egy karakterláncváltozó törzsében, és visszaadja a pozícióját. Ha a sorozat nem található, akkor 0 kerül vissza.

    Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Akkor MsgBox "A keresőszó jelen van!" Else MsgBox "A keresett szó hiányzik!" Vége Ha

    A függvények közötti különbség az, hogy az InStr() a sor elejétől, az InStrRev() pedig a sor végétől keresi a megadott szót.

  • Bal() , Jobb() , Középső() - az Ön által megadott számú karakter átvétele egy meglévő karakterlánc-változóból a bal, jobb vagy középső oldalon.

    Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5)

  • Len() - képesség, hogy a karakterek számát egy sorban. Gyakran használják hurkokkal, helyettesítő műveletekkel stb.
  • LCase() És UCase() - konvertálja a karakterláncot kis- és nagybetűssé. Gyakran használják egy érték elkészítésére összehasonlításhoz, amikor a kis- és nagybetű nem fontos az összehasonlítás során (vezetéknevek, cégek neve, város stb.).
  • LSet() És RSet() - az a képesség, hogy egy változót egy másik szimbólumaival töltsön fel anélkül, hogy megváltoztatná a hosszát (balra és jobbra). A további karakterek le vannak vágva, és a hiányzó karaktereket szóközök helyettesítik.
  • Ltrim() , RTrim() , Vágás() - lehetőség a szóközök eltávolítására a bal, a jobb vagy a bal és a jobb oldalon egyaránt.
  • Cserélje ki() - a karaktersorozat egyik karaktersorozatának egy másikkal való helyettesítésének képessége.

    Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello", "Bay")

  • Hely() - kap egy karakterláncot a megadott számú szóközből;
    Egy másik hasonló funkció az Spc() , amely a konzol kimenetének formázására szolgál. A parancssor szélessége alapján megszorozza a szóközöket.
  • StrComp() - két karakterlánc összehasonlításának képessége.
  • StrConv() - karakterlánc konvertálásának képessége (Unicode-ra és vissza, nagy- és kisbetűkre a szavak első betűjét nagybetűvel írjuk stb.):

    Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!", vbUpperCase)

    Második paraméterparaméterként a konstansok használhatók:

      • vbUpperCase: Az összes szöveges karaktert NAGYBETŰvé alakítja
      • vbLowerCase: Az összes szöveges karaktert kisbetűvé alakítja
      • vbProperCase: Minden szó első karakterét nagybetűssé alakítja
      • *vbWide: A karakterlánc karaktereit egybájtosról kétbájtosra alakítja
      • *vbNarrow: A karakterlánc karaktereit kétbájtosról egybájtosra konvertálja
      • **vbKatakana: A hiragana karaktereket Katakana karakterekké alakítja
      • **vbHiragana: A katakana karaktereket hiragana karakterekké alakítja
      • ***vbUnicode: A karakterláncot a rendszer alapértelmezett kódlapja segítségével Unicode-dá alakítja
      • ***vbFromUnicode: A Unicode karakterláncot a rendszer alapértelmezett kódlapjává alakítja

    * Távol-keleti lokalizációkra vonatkozik
    ** Csak Japánra vonatkozik
    *** Macintosh operációs rendszereken nem támogatott

  • StrReverse() - „fordítson meg” egy karakterláncot a karaktereinek fordított sorrendbe helyezésével. A funkció csak Excel 2000 és újabb verziókban működik. Ebben a cikkben található egy példa a függvény használatára, valamint a szófordítás egyéb módszereire: Hogyan lehet megfordítani egy szót?
  • Tab() egy másik funkció, amelyet a konzol kimenetének formázására használnak. Tabulátor karaktereket reprodukál a megadott számban. Ha nincs megadva mennyiség, egyszerűen beszúr egy tabulátor karaktert. A konstans segítségével tabulátor karaktert is beszúrhat egy karakterlánc értékébe vbTab.
  • Húr() - lehetővé teszi, hogy egy megadott számú karakterből álló sztringet kapjon (amiket ismét Ön határoz meg). Általában a kimenet formázására használják a funkcióval együtt Len().

A következő három függvény lehetővé teszi, hogy karakterláncok tömbjével dolgozzon

Hasított (<строка> [, <разделитель>]) – egy karakterláncot részkarakterláncok tömbjévé alakít. Alapértelmezés szerint a szóköz használatos határolóként. Ez a funkció kényelmesen használható egy mondat szavakra bontására. Ebben a függvényben azonban bármilyen más határolót megadhat. Például a Split(3, "Ez egy tesztmondat") három karakterlánc értékből álló tömböt ad vissza: "This", "test", "sentence". Csatlakozz (<массивСтрок> [, <разделитель>]) – karakterláncok tömbjét egyetlen karakterláncgá alakítja a megadott határolóval. Szűrő(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – átvizsgálja a karakterláncértékek tömbjét, és megkeresi az összes olyan részkarakterláncot, amely megfelel az adott karakterláncnak. Ennek a függvénynek négy argumentuma van:<строкаПоиск>– keresési karakterlánc;<включение>– egy paraméter (logikai érték), amely megadja, hogy a visszaadott sorok tartalmazzák-e a keresett részkarakterláncot, vagy fordítva, csak azok a tömbsorok kerüljenek visszaadásra, amelyek nem tartalmazzák a keresett karakterláncot részstringként;<сравнение>– a karakterlánc-összehasonlítási módszert meghatározó paraméter. Három további függvény biztosítja a karakterlánc-konverziót: LCase(<строка>) – a karakterlánc összes karakterét kisbetűvé alakítja, például az LCase("MAIL") függvény a "mail" karakterláncot adja vissza; UCase(<строка>) – a karakterlánc összes karakterét nagybetűvé alakítja; StrConv(<строка>, <преобразование>) – többféle karakterlánc-transzformációt hajt végre a második paramétertől függően. Ezt a paramétert beépített konstansok írják le, például az StrConv("Russia", VbProperCase) függvény a "Russia" értéket adja vissza.

Az utolsó két függvény pedig karakterláncokat generál

Hely(<число>) – a megadott számú szóközből álló karakterláncot hoz létre; Húr(<число>, <символ>) – létrehoz egy karakterláncot, amely az első argumentumban megadott számú karakterből áll. Maga a szimbólum a második argumentumban van megadva.

Példa

Hozzon létre egy programot, amely karakterlánc-változókkal működik. Ehhez hozzon létre egy űrlapot, amelynek címkéi a következő üzeneteket tartalmazzák: 1 címke: az első szövegmezőbe beírt karakterlánc hosszát jelentik (1 sor); 2 címke: a harmadik szövegmező (3. sor) összes karakterét nagybetűvé alakítja; 3. címke: az első és a második szövegmező (1. és 2. sor) tartalmát együtt jeleníti meg.

Kivitelezési technológia

  • Nyissa meg a Word programot, mentse a dokumentumot, és lépjen a VBA-szerkesztőbe.
  • Hozz létre az alábbi képhez hasonló formát.
  • Írjon eseménykezelőt az OK gombhoz.
  • Állítsd össze a programot.
  • Futtassa az űrlapot.

Privát 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=“az első hossza sor van” & n & „karakterek” c=TextBox3.Text k=Ucase(с) Label8.Caption=k b=TextBox2.Text d=a + " " + b Label9.Caption=d End Sub

Feladat

Szükséges, hogy az Excelben az A1 cellában keressen az A2 oszlopba vesszővel elválasztott szavakra, és az eredményt és a talált szavakat, az ismétlődések számával (ha lehetséges) a keresett szövegben, írja be. egy másik, harmadik cellában. (még jobb lenne, ha az első cellában valamilyen módon kiemelve (vagy aláhúzva) lennének... hogy azonnal láthatóak legyenek. Így rakod a szavakat egy tömbbe:

Visual Basic Code
1 2 3 4 5 6 Dim m() As String If InStr(1, Cells(1, 2).Érték, ","") > 0 Akkor m = Split(Replace(Cells(1, 2). Value, " ", ""), ","") Else ReDim m(0): m(0) = Trim(Cells(1, 2). Value) End If

Aztán egy ciklusban megkeresi az összes szót (ismét ciklusban, beágyazottan) 23 perc után hozzáadva

Visual Basic Code
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 Opció Szöveg összehasonlítása Opció Explicit Sub QWERT() Dim R, N, K Dim m() As String If InStr(1, Cells(1, 2).Érték, ",") > 0 Akkor m = Split(Replace(Cells() 1, 2).Érték, " ", ""), ",") Else ReDim m(0): m(0) = Trim(Cells(1, 2). Value) End If For R = 0 To UBound( m) N = 1 Ha InStr(1, Cells(1, 1).Érték, m(R)) > 0 Akkor K = InStr(N, Cells(1, 1).Érték, m(R)) Do COLOR K , Len(m(R)) N = K + Len(m(R)) K = InStr(N, Cells(1, 1).Érték, m(R)) Hurok, míg K > 0 End If Next R End Sub Sub COLOR(ST, LN) cellákkal (1, 1). Karakterek (Kezdő:=ST, Hossz:=LN).Betűtípus .Szín = RGB(0, 0, 255) .Félkövér = Valódi vége a végével

15 perc után hozzáadva És így fog keresni a szó elején, és kijelöli a teljes szót

Visual Basic Code
1 2 3 4 5 6 7 8 9 10 11 Sub COLOR (ST, LN) LN = LN - 1 Do LN = LN + 1 hurok, miközben VBA.Mid (Cellák (1, 1). Érték, ST + LN, 1)<>" " Cellákkal(1, 1).Karakterek (Kezdő:=ST, Hossz:=LN).Betűtípus .Szín = RGB(0, 0, 255) .Félkövér = Valódi Befejezés Vége Sub

A keresést nem a szó elejétől, hanem a szó egy részétől végezheti. — újabb Do-Loop ciklus hozzáadása. Csak az elejét (ST) tolja balra egy szóközhöz (http://www.cyberforum.ru/vba/thread567588.html)

Hogyan kell: egy karakterláncot egy mintával párosítani (Visual Basic)

Megfelelőségi ellenőrzés karakterláncok a sablonhoz Karakterlánc Adattípus (Visual Basic) - Hasonló operátor (Visual Basic) . a Like operátor bal operandusa egy karakterlánc kifejezés, a jobb oldali operandus pedig egy sablon karakterlánc. A Like logikai értéket ad vissza

Karakterellenőrzés

? - bármely szimbólum

  • A myString a W karakterből áll, amelyet bármely 2 karakter követ

    Dim sMatch As Boolean = myString Mint "W???"

Bármely karakter a listából és a tartományból

Bármely karakter, majd az A, C vagy E karakterek egyike

    Dim sMatch As Boolean = myString Like "?" Kis-nagybetű érzékeny

  • myString = karakterek száma, majd egy karakter a következő tartományból: i, j, k, l, m vagy n:

    Dim sMatch As Boolean = myString Mint "szám" Kis-nagybetű érzékeny

A Like mind a nulla hosszúságú karakterlánc-tömb karakterláncával ("") működik. lehetővé teszi annak ellenőrzését, hogy egy karakterlánc üres-e

Egy karakter a listából, vagy nincs karakter

  1. A Like operátor kétszer használatos, és az eredményeket az Or Operator (Visual Basic) vagy az OrElse Operator (Visual Basic) használatával kombinálja.
  2. Az első utasítássablonba szúrjon be egy karakterlistát szögletes zárójelben ().
  3. A második utasítássablonban ne tegyen semmit az ellenőrzés helyére Példa: egy hétjegyű telefonszám ellenőrzése phoneNum, amelynek pontosan három számjegyet kell tartalmaznia, majd szóköznek, kötőjelnek, pontnak vagy nincs karakternek, majd Négy számjegy. (az első három számjegy nem választható el az utolsó négytől – „nincs karakter”) Null , hiba történik. Ha egy érvet adnak összehasonlítási_típus , érvelés start_pozíció kötelező. sor_1 Kívánt. String kifejezés, amelyet keresnek. 2. sor Kívánt. A keresett karakterlánc kifejezés. összehasonlítási_típus Választható. Meghatározza a típust karakterlánc összehasonlítások. Ha az érv értéke összehasonlítási_típus nulla, hiba történik. Ha az érv összehasonlítási_típus kihagyva, az összehasonlítás típusát paraméter határozza meg Jelentése Házasodikfélelem. Adjon meg egy érvényes LCID (LocaleID) paramétert a nyelvi beállításokban megadott összehasonlítási szabályok használatához.

    Lehetőségek

    Érv összehasonlítási_típus a következő paramétereket használja:

    Visszatérési értékek

    Megjegyzések

    Funkció InStrB karakterláncban található bájtadatokkal használják. Funkció InStrB Egy karakterlánc első előfordulásának bájtpozícióját adja vissza, nem pedig a karakter pozícióját.

    Példák

    Az InStr függvény használata kifejezésben Minden alkalommal, amikor kifejezéseket használ, használhatja a függvényt InStr. Például, ha meg akarja határozni az első pont helyzetét ( . ) egy IP-címet tartalmazó mezőben ("IPAddress") használhatja a funkciót InStr megtalálni:

    InStr(1,,"")

    Funkció InStr minden értéket megnéz az "IPAddress" mezőben, és visszaadja az első pont pozícióját. Ezért, ha az IP-cím első oktettjének értéke az 10. , a függvény a 3 értéket adja vissza.

    Használhat más függvényeket is, amelyek a függvény eredményét használják InStr, az első pontot megelőző IP-cím oktett értékének kinyeréséhez, például:

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

    Ebben a példában a függvény InStr(1,,"") visszaadja az első pont pozícióját. Az 1-es kivonás eredményeképpen az első pontot megelőző karakterek száma kerül meghatározásra, ebben az esetben - 2. Ekkor a függvény Bal kivonja ezeket a karaktereket az "IPAddress" mező bal oldaláról, és a 10-es értéket adja vissza.

    A funkció használata InStr Visual Basic for Applications (VBA) kódban

    JEGYZET. A következő példák a Visual Basic for Applications (VBA) modul használatát mutatják be. A VBA használatával kapcsolatos további információkért válassza a lehetőséget Fejlesztői hivatkozás a gomb melletti legördülő listában Keresés, majd írjon be egy vagy több kulcsszót a keresőmezőbe.

    Ebben a példában a függvény InStr az egyik karakterlánc első előfordulásának pozíciójának meghatározására szolgál a másikon belül.

    Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" " Karakterlánc a kereséshez. SearchChar = "P" " "P" keresése. " Szöveges összehasonlítás a 4. pozíciótól kezdve. 6. eredmény. MyPos = Instr( 4, SearchString , SearchChar , 1) " Egy bináris összehasonlítás, amely az 1. pozíciótól kezdődik. 9. eredmény. MyPos = Instr( 1, SearchString , SearchChar , 0) "Az összehasonlítás alapértelmezés szerint bináris" (az utolsó argumentum kimaradt). MyPos = Instr( SearchString , SearchChar ) " 9. MyPos = Instr( 1, SearchString , "W" ) "0-t ad vissza.

A program sorai gyakran tartalmaznak szükségtelen szóköz karaktereket a sor végén vagy elején, amelyeket el kell távolítani, mert a soron kívüli kezdő vagy záró szóközök problémákat okozhatnak a programban.

A VBA három olyan funkcióval rendelkezik, amelyek a kezdő és záró szóközök eltávolítására szolgálnak egy karakterláncból: Ltrim, RTrim, Trim. Ne feledje, hogy ezek a függvények valójában nem módosítják az eredeti karakterláncot, hanem visszaadják a karakterlánc másolatát a felesleges szóközök eltávolításával.

A húr hosszának meghatározása

Általában tudnia kell egy karakterlánc hosszát, amikor a felhasználó üzeneteit formázza, vagy amikor egy eljárással bevitt karakterlánc-adatokat Excel-munkalapba vagy Word-dokumentumba formáz. A VBA erre a célra használja a függvényt Len. Az alábbi listában két szóköz van a zárójelek és a szó között.



Óvatosnak kell lennie a rögzített hosszúságú húrokkal. Mivel egy rögzített hosszúságú karakterlánc mindig azonos hosszúságú, a Len függvény mindig a karakterlánc deklarált hosszát adja vissza, függetlenül a karakterlánc tényleges hosszától. Például, ha a StrokeName fix hosszúságú karakterlánc-változó, amely 15 karakter hosszú, valójában tartalmazza a „sun” szót, akkor a függvény Len (StrokeName) Ebben az esetben a karakterlánc tényleges hosszának (esetünkben - 6) megállapításához a következő függvénykombinációt kell használnia: Len(Trim(StrokeName)).

Karakterláncok összehasonlítása és keresése

A VBA két funkcióval rendelkezik, amelyek segítenek a karakterláncok összehasonlításában: StrComp, InStr.

Függvény StrComp

Szintaxis


StrComp(karakterlánc1, karakterlánc2[, összehasonlítás])


Karakterlánc1, Karakterlánc2 – bármely két karakterlánc-kifejezés, amelyet össze kell hasonlítani.

Az StrComp végrehajtásakor a következő értékek egyike kerül visszaadásra:

  • -1, ha a String1 kisebb, mint a String2;
  • 0, ha String1 és String2 egyenlő;
  • 1, ha a String1 nagyobb, mint a String2.


A fenti lista két karakterláncot hasonlít össze szöveges módban: "Alapértelmezett karakterlánc" és "Alapértelmezett karakterlánc". Összehasonlítási eredmény = 1, azaz. Az „Alapértelmezett karakterlánc” nagyobb, mint az „Alapértelmezett karakterlánc”.

Kísérletezzen különféle karakterláncokkal, hogy jobban megértse az StrComp függvény működését.

Függvény InStr

Az InStr függvény lehetővé teszi annak meghatározását, hogy egy karakterlánc tartalmaz-e másik karakterláncot.

Szintaxis


StrComp(karakterlánc1, karakterlánc2[, összehasonlítás])


Karakterlánc1, Karakterlánc2 – bármely érvényes karakterlánc-kifejezés. A függvény ellenőrzi, hogy a String1 benne van-e a String2-ben.

Az Összehasonlítás egy opcionális argumentum, amely a következő előre definiált konstansok bármelyike ​​lehet (ha kihagyjuk, akkor a jelenlegi Option Compare beállítást használja a rendszer):

  • vbBinaryCompare - két karakterlánc bináris összehasonlítása;
  • vbTextCompare - két karakterlánc szöveges összehasonlítása;
  • vbDatabaseCompare – csak a Microsoft Accessben használatos.

Start – egy opcionális argumentum, egy numerikus kifejezés, és meghatározza a karakter pozícióját a String1-ben, ahonnan az ellenőrzést el kell kezdeni.


Az InStr egy számot ad vissza, amely jelzi a karakter pozícióját a String1-ben, ahol a String2 található. Ha az InStr nem találja a String2-t a String1-ben, akkor 0-t ad vissza, ha pedig a String1 (vagy String2) értéke Null, akkor a függvény szintén nullát ad vissza.



Vonal felosztás

Néha szükségessé válik egy karakterlánc felosztása alkatrészeire. A VBA-ban három függvény oldja meg ezt a problémát: Bal, Jobb, Közép.

Bal funkció

Szintaxis


Bal (húr, hossza)


A függvény a String egy példányát adja vissza, az első karakterrel kezdve, és tartalmazza a Length által megadott számú karaktert. Ha a Length egy szám nagyobb, mint a karakterlánc tényleges hossza, akkor a teljes String kifejezés visszaadásra kerül.

Helyes funkció

Szintaxis


Jobb (húr, hossz)


A karakterlánc bármely érvényes karakterlánc kifejezés.

Hossz - bármilyen számérték.


A függvény a String egy példányát adja vissza, az utolsó karakterrel kezdve, és jobbról balra tartalmazza a Length által megadott számú karaktert. Ha a Length egy szám nagyobb, mint a karakterlánc tényleges hossza, akkor a teljes String kifejezés visszaadásra kerül. A Right függvény mindig a karakterlánc végétől az elejére másolja a karaktereket.

Közép funkció

Szintaxis


Közép (karakterlánc, kezdet, [, hossza])


A karakterlánc bármely érvényes karakterlánc kifejezés.

Hossz, Kezdet – bármilyen számérték.


A Mid függvény a String másolatát adja vissza a Start argumentum által megadott String karakterpozíciójától kezdődően. Az opcionális Length argumentum megadja a karakterláncból a középre másolandó karakterek számát. Ha a Start nagyobb számot tartalmaz, mint a karakterlánc tényleges hossza, akkor a rendszer üres karakterláncot ad vissza.



A billentyűzetről nem írható karakterek

Gyakran előfordul, hogy olyan karaktert kell beírnia, amelyhez nincs billentyű a billentyűzeten (például szerzői jogi szimbólum). Egy másik helyzet az, amikor egy VBA-szolgáltatás karaktert kell tartalmaznia egy karakterláncban (a leggyakoribb eset a dupla idézőjel).

Ha olyan karaktereket szeretne bevinni egy karakterláncba, amelyet nem lehet bevinni a billentyűzetről, vagy amelyeknek különleges jelentése van a VBA számára, használja a függvényt Chr.

Szintaxis


Chr (charcode)


Charcode – bármely numerikus kifejezés, amely a számítógép által használt karakterkészlet érvényes kódja. 0 és 255 közötti egész számnak kell lennie.

A Chr függvény egyetlen karakteres kódot vesz fel argumentumként, és egy karakterláncot ad vissza, amely a kódnak megfelelő karaktert tartalmazza. Ezt a funkciót a fenti listákon arra használják, hogy egy sort jelenítsenek meg a képernyőn Chr (13).


Mivel az új sort indító karakterek nagyon fontosak az üzenetek és egyéb VBA-rutinok által manipulált karakterlánc-adatok formázásakor, ezekhez a karakterekhez számos előre definiált konstans tartozik, hogy elkerüljék a Chr függvény használatát:

  • A vbCr egy kocsivissza karakter. Egyenértékű: Chr(13)
  • vbLf - egy sorral eltolt karakter. Egyenértékű: Chr(10)
  • vbCrLf - kocsi visszatérés + eltolás karakter egy sorral. Egyenértékű: Chr(13)+ Chr(10)
  • vbTab - tabulátor karakter. Chr(9) ekvivalens

A lista megtekintéséhez kód-szimbólum meg kell nyitnia a VBA súgórendszert, és kérésre "karakterkészletek" Megjelenik a megfelelő táblázat.



Adatértékek formázása

Nagyon gyakran, ilyen vagy olyan okok miatt, a program kimenetén lévő adatformátum nem teljesen megfelel nekünk. Ezt a problémát a függvény oldja meg Formátum.

A VBA Formátum funkció megegyezik az Excel Formázás funkciójával, és ugyanazokat az adatformázási helyőrzőket használja.

Szintaxis


Formátum (kifejezés [, Formátum[, Firstdayofweek [, Firstweekofyear]]])


Kifejezés – bármely érvényes kifejezés (kötelező argumentum).

A formátum egy elnevezett vagy felhasználó által meghatározott formátum érvényes kifejezése.

A firstdayofweek egy állandó, amely a hét első napját határozza meg.

Firstweekofyear – az év első hetét meghatározó állandó.


A Formázás funkció használatához bármelyiket el kell végeznie állítson be egy előre meghatározott formátumot, vagy egy adott formátumú képet hozzon létre, helyőrző karakterek használatával.


Elnevezett formátumok a Formátum funkcióval való használatra

Elnevezett formátum Akció
Általános dátum A dátum- és időinformációkat sorozatos dátumszámmá formálja a számítógép dátum- és időformátum-beállításainak használatával.
Hosszú randevú Csak a dátumrészt formázza szekvenciális dátummá, a számítógép Hosszú dátumformátum-beállításainak használatával.
Közepes dátum Csak a dátumrészt formázza szekvenciális dátumként, a számítógép Közepes dátumformátum-beállításainak használatával.
Rövid dátum Csak a dátumot tartalmazó részt formázza szekvenciális dátummá, a számítógép rövid dátumformátum beállításait használva.
Hosszú idő Csak az időrészt formázza szekvenciális dátummá, a számítógép hosszú időformátum-beállításainak használatával.
Közepes idő Csak az időrészt formázza szekvenciális dátummá, a számítógép Közepes időformátum-beállításainak használatával.
Rövid idő Csak az időrészt formázza szekvenciális dátummá, a számítógép rövid időformátum beállításainak használatával.
Általános szám A számokat karakterláncokká formázza speciális karakterek nélkül.
Valuta A számokat pénznemszimbólummal, ezres elválasztóval és csak két tizedesjegygel formálja.
Rögzített Úgy formáz egy számot, hogy mindig legyen legalább egy számjegy a tizedesvessző előtt és legalább két számjegy utána.
Alapértelmezett Ezres elválasztóval formáz egy számot úgy, hogy a tizedeselválasztó előtt legalább egy számjegy, utána pedig legalább két számjegy legyen.
Százalék Százalékos formában formáz egy számot 100-zal való megszorzással és egy százalékjel hozzáadásával.
Tudományos Egy számot szabályos exponenciális formátumba formáz.
Igen nem Ha a formázott szám nem nulla, az „Igen” karakterláncot ad vissza, ellenkező esetben „Nem”.
Igaz hamis Ha a formázott szám nem nulla, akkor az "Igaz" karakterláncot adja vissza, ellenkező esetben pedig "False".
Be ki A "Be" karakterlánc visszaadásra kerül, ha a formázott szám nem nulla, ellenkező esetben - "Ki".

Helyőrzők egyéni formátumok létrehozásához

Helyőrző karakter Művelet (példaként az 1234.45 számot használva)
0 Numerikus karakter, amely egy számjegyet jelenít meg, ha az adott helyen van, vagy 0-t, ha nincs. Használhatja a 0 szimbólumot egész számok kezdő nulláinak, tizedesjegyek záró nulláinak megjelenítésére: 00000.000 01234.450
# A numerikus szimbólum egy számjegyet jelenít meg, ha van ilyen ebben a pozícióban, ellenkező esetben nem jelenít meg semmit. A # kitöltő karakter megegyezik a 0-val, kivéve, hogy a kezdő és a záró nullák nem jelennek meg: #####.### 1234,45
$ Dollárjelet jelenít meg: $###,###.00 $1.234.45
. Tizedes helyőrző karakter, a tizedesvesszőt jeleníti meg a 0 helyőrző karakterlánc kijelölt helyén: #.##.## 1234,45
% Százalékszimbólum, megszorozza az értéket 100-zal, és hozzáad egy százalékjelet a 0:# helyőrzők által jelzett pozícióhoz. A #0,00% a 0,12345 számot 12,35%-ként jeleníti meg (kerekítés történik)
, Ezres elválasztó, vesszőket ad ezres elválasztóként 0-ban és # helyőrző karakterláncban: ###,###,###.00 1,234,45
E-e- Az értéket exponenciális formátumban jeleníti meg, kitevővel csak negatív értékek esetén: #.####E-00 1.23445E03
E+ e+ Az értéket exponenciális formátumban jeleníti meg, kitevővel negatív és pozitív értékek esetén is: #.####E+00 1.23445E+03
/ Elválasztja a napot, a hónapot és az évet a dátumértékek formázásához.
m Meghatározza a hónapok dátumban történő megjelenítését: m 1, mm - 01, mmm - Jan, mmmm - január
d Meghatározza, hogyan jelenítse meg a napokat dátumokban: d 1, dd - 01, ddd - V, dddd - Vasárnap
y Az év napját 1 és 366 közötti számként jeleníti meg
yy Meghatározza, hogyan jelenítse meg az éveket a dátumokban: yy - 66, yyyy - 1966
q Az év negyedévét 1 és 4 közötti számként jeleníti meg
w A hét napját számként jeleníti meg (1 - vasárnap)
ww Az év hetét 1 és 54 közötti számként jeleníti meg
: Elválasztja az órákat, perceket és másodperceket az időformátum értékeiben: óó:pp:ss - 01:01:01, h:p:s - 1:1:1
h Meghatározza az órák megjelenítési módját: óó - 01, h - 1
m Meghatározza a percek megjelenítési módját: mm - 01, m - 1
s Meghatározza a másodpercek megjelenítési módját: ss - 01, s - 1
DÉLELŐTT DÉLUTÁN Az időt 12 órás időformátumban jeleníti meg, hozzáadva a délelőtt vagy a délutáni dátumot
@ Karakterhelyőrző, amely szóközt jelenít meg, ha nincs egyező karakter a formázott karakterláncban.
Az összes karaktert nagybetűvel jeleníti meg.
> Az összes karaktert kisbetűvel jeleníti meg.
Chr

Chr függvény

Chr(CharCode)
Chr$(CharCode)
ChrB (CharCode)
ChrW(CharCode)

Funkció Chr(Ch aracte r) lehetővé teszi, hogy egy karaktert az ANSI vagy Unicode numerikus kód értéke alapján kapjon meg

Visszatérési érték

Funkciók Chr, ChrB, ChrW a Variant típusú String altípus értékét adja vissza, amely tartalmazza a megadott ANSI vagy Unicode karakterkódnak megfelelő karaktert. Funkciók Chr$, ChrB$, ChrW$ ennek megfelelően adjon vissza egy String típusú értéket

jegyzet

ChrÉs Chr$ visszaad egy karaktert az ANSI kódolásával
ChrBÉs ChrB$ Visszatérés egybájtos vonal
ChrW Unicode karaktert ad vissza, de nem Unicode rendszereken a viselkedése hasonló Chr
Használja a paraméterben CharCode a 255-nél nagyobb értékek futásidejű hibákat generálnak 5: Érvénytelen eljáráshívás vagy argumentum vagy 6: Túlcsordulás

Lehetőségek CharCode A szükséges argumentum egy hosszú érték, amely a karaktert határozza meg. Általában a funkció Chr nem nyomtatható karakterek szöveges karakterláncokba való beillesztésekor használatos (kocsivissza, soremelés, tabulátor stb.). A 0-31 kódok a szabványos ASCII vezérlőkaraktereknek felelnek meg. Például, Chr(10) újsor karaktert ad vissza Példa Dim retval retval = Chr(65) A Debug.Print retval " A-t adja vissza Kategória

Az Emberek kérdésre vonatkozó részben magyarázza el részletesen, mit jelent az ord(x) függvény és az inverz chr(x) Pascalban? a szerző adta Nick Brown a legjobb válasz az Van egy speciális karaktertáblázat (kibővített ASCII-kód, amikor minden karakternek numerikus értéke van, összesen 255 érték van a táblázatban, azaz minden karakterhez szám van hozzárendelve,
A chr(0..254) egy számot (egy bájtot) olyan karakterré alakít, amelyhez ez a szám tartozik, például chr(71) az eredmény a "G" betű lesz, a billentyűzet billentyűinek lenyomása is saját kódot állít elő, pontosan ez a kód, ha ebbe az operátorba helyezzük, és azt az eredményt adja, hogy melyik billentyűt nyomjuk meg, ez vagyok például én. De az ORD(x) operátor ezt a folyamatot fordított sorrendben hajtja végre.
Beállítjuk az érték karaktert, és kapunk egy számot 0 és 254 között (egy bájt)
például az ORD("G") a 71 eredményt adja (tizedes formátumban)
Ez mindennek látszik!!!

Válasz tőle Katyonachik[újonc]
Egyszerű, tényleg)
Ord ("X") - az X karakter kódját adja vissza az ASKII táblából.
Az inverz függvény eredménye egy szimbólum lesz, amely megfelel a megadott kódnak (amelyből a függvény származik) ugyanabból az ASCII táblából.


Válasz tőle Juri[guru]
Ezek nem kölcsönös függvények!
Az Ord függvény egy felsorolt ​​típus sorszámát adja vissza.
A számolás nulláról indul.
A bájt típusnál a függvény a tényleges értéket adja vissza – a sorszám egybeesik az értékkel.
A char típusnál a függvény a karakter sorozatszámát adja vissza, amely (a szám véletlenszerű) egybeesik az ASCII kóddal.
A chr függvény a megadott ASCII kóddal rendelkező karaktert adja vissza.
Következtetés: Egyszerűen, ami a szimbolikus értékeket illeti, ezek valóban egymás fordítottjaként működnek...
Ezért azt mondhatjuk, hogy az ord függvény a chr függvény inverze, de fordítva nem - a chr függvény nem az ord függvény inverze, hiszen az ord függvény hatóköre nem korlátozódik a szimbólumokkal való munkára!