Primjeri korištenja VBA funkcija. Ugrađene funkcije Oracle Vba excel funkcija za rad sa stringovima

  • A.S.C. () - ova funkcija vam omogućava da vratite numerički kod za proslijeđeni znak. Na primjer, ASC("D") će vratiti 68. Ova funkcija je korisna za određivanje sljedećeg ili prethodnog slova. Obično se koristi zajedno sa funkcijom Chr(), koji izvodi inverznu operaciju - vraća znak u skladu sa prenijetim numeričkim kodom. Varijante ove funkcije su AscB() I AscW():
    • AscB () - vraća samo prvi bajt numeričkog koda za znak.
    • AscW () - vraća kod za znak u Unicode kodiranju
  • Chr () - vraća znak po njegovom numeričkom kodu. Može se koristiti zajedno s funkcijom Asc(), ali se najčešće koristi kada trebate ispisati uslužni znak (na primjer navodnici - "), jer Ne možete samo unijeti navodnike u VBA kod (treba staviti duplo). Ovo je funkcija koju obično koristim.

    Dim sWord As String SWord = Chr(34) & "Riječ u navodnicima" & Chr(34)

    Postoje opcije za ovu funkciju - ChrB() I ChrW(). Radite slično istim opcijama za funkciju Asc().

  • InStr () I InStrRev () - jedna od najpopularnijih karakteristika. Omogućava vam da otkrijete znak ili niz znakova u tijelu string varijable i vratite njihovu poziciju. Ako sekvenca nije pronađena, onda se vraća 0.

    Dim sStr As String sStr = "w" Ako je InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Tada MsgBox "Reč za pretragu je prisutna!" Else MsgBox "Nedostaje tražena riječ!" End If

    Razlika između funkcija je u tome što InStr() traži navedenu riječ s početka reda, a InStrRev() s kraja reda

  • lijevo () , U redu () , Mid () - mogućnost preuzimanja broja znakova koje navedete iz postojeće varijable stringa na lijevoj, desnoj ili sredini, respektivno.
    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Mid(sStr, 1, 5)

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Mid(sStr, 1, 5)

  • Len () - mogućnost dobivanja broja znakova u liniji. Često se koristi sa petljama, operacijama zamjene itd.
  • LCase () I UCase () - pretvoriti niz u mala i velika slova. Često se koristi za pripremu vrijednosti za poređenje kada slučaj nije važan prilikom poređenja (prezimena, nazivi firmi, gradova itd.).
  • LSet () I RSet () - mogućnost popunjavanja jedne varijable simbolima druge bez promjene njene dužine (lijevo, odnosno desno). Dodatni znakovi su odsječeni, a razmaci se zamjenjuju za znakove koji nedostaju.
  • LTrim () , RTrim () , Podrezati () - mogućnost uklanjanja razmaka s lijeve, desne ili i lijeve i desne strane.
  • Zamijenite () - mogućnost zamjene jednog niza znakova u nizu drugim.
    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Zamijeni(sStr, "Halo" , "Bay" )

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Zamijeni(sStr, "Halo", "Bay")

  • Prostor () - dobiti string od broja razmaka koji navedete;
    Još jedna slična funkcija je Spc () , koji se koristi za formatiranje izlaza konzole. Umnožava razmake na osnovu širine komandne linije.
  • StrComp () - sposobnost upoređivanja dva niza.
  • StrConv () - sposobnost pretvaranja niza (u Unicode i nazad, na velika i mala slova, veliko početno slovo riječi, itd.):
    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox StrConv("Zdravo, svijet!", vbUpperCase)

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox StrConv("Zdravo, svijet!", vbUpperCase)

    Konstante se mogu koristiti kao drugi parametar parametara:

    • vbUpperCase: Pretvara sve znakove teksta u VELIKA SLOVENA
    • vbLowerCase: Pretvara sve znakove teksta u mala slova
    • vbProperCase: Pretvara prvi znak svake riječi u velika slova
    • *vbWide: Pretvara znakove niza iz jednobajtnih u dvobajtne
    • *vbNarrow: Pretvara znakove niza iz dvobajtnih u jednobajtne
    • **vbKatakana: Pretvara znakove hiragane u znakove katakane
    • **vbHiragana: Pretvara znakove katakane u znakove hiragane
    • ***vbUnicode: Konvertuje string u Unicode koristeći podrazumevanu kodnu stranicu sistema
    • ***vbFromUnicode: Konvertuje Unicode niz u podrazumevanu kodnu stranicu sistema
    • * primjenjivo za lokalizaciju Dalekog istoka
      ** Primjenjivo samo za Japan
      *** nije podržano na Macintosh operativnim sistemima

  • StrReverse () - “obrnuti” niz postavljanjem njegovih znakova obrnutim redoslijedom. Funkcija radi samo iz programa Excel 2000 i novijih. Primjer korištenja funkcije, kao i drugih metoda za okretanje riječi, možete pronaći u ovom članku: Kako preokrenuti riječ?
  • Tab () je još jedna funkcija koja se koristi za formatiranje izlaza konzole. Reproducira tab znakove u broju koji odredite. Ako količina nije navedena, jednostavno ubacuje znak tabulatora. Također možete koristiti konstantu za umetanje znaka tabulatora u vrijednost stringa vbTab.
  • String () - omogućava vam da dobijete niz od određenog broja znakova (koje si opet odredio). Obično se koristi za formatiranje izlaza u kombinaciji s funkcijom Len().

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

Opcija 1

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

Opcija

Također možete koristiti niz bajtova:

Sub n() Dim Mass() kao bajt, n kao dugačak, Zam kao niz, TXT kao niz TXT = "="" DMITRY VLADIMIROVICH KOROTEEV" Mass = StrConv(TXT, vbFromUnicode) Za n = 0 do UBound (masa) Ako misa(n)<>34 i misa(n)<>61 Zatim Zam = Zam + Chr$(Mass(n)) Sljedeći MsgBox Zam Kraj Sub

Opcija

Ili filtriranje sa sredinom:

Sub nn() Dim n kao dugačak, TXT kao niz, L kao niz, Zam kao string TXT = "="" DMITRY VLADIMIROVICH KOROTEEV" Za n = 1 Do Len(TXT) L = Mid$(TXT, n, 1) Ako je L<>"""" I L<>"=" Zatim Zam = Zam + L Sljedeći MsgBox Zam End Sub

Red 6 se može zamijeniti haskijem:
Visual Basic kod
1
Ako je L kao “[!””=]” Tada je Zam = Zam + L

Opcija

Također putem pretraživanja pozicije i rekurzije:

Subtest() Dim n As Long, txt As String txt = "=""DMITRY VLADIMIROVICH KOROTEEV" txt = Promjena(txt, "=") txt = Promjena(txt, """") MsgBox txt Kraj podfunkcije Promjena( txt kao string, šta kao string, opciono Pos = 1) Dim n As long If Pos<>0 Tada je n = InStr(Poz, txt, Šta) Promjena = Mid$(txt, Pos, IIf(n - Pos< 0, Len(txt), n - Pos)) + Change(txt, What, IIf(n = 0, 0, n + 1)) End If End Function

Možete koristiti i regularne izraze, ali ja ih ne poznajem.

Opcija

Putem pretrage zdesna nalijevo i rekurzije:

Visual Basic kod
1 2 3 4 5 6 7 8 Promjena funkcije (txt kao string, što kao string, opciono Pos kao dugo) Dim n dok je dugo ako je Pos = 0 Tada Pos = Len(txt) Ako je pos<>-1 Tada je n = InStrRev(txt, What, Pos) Promjena = Promjena(txt, What, IIf(n = 1, -1, n - 1)) + Mid$(txt, n + 1, Pos - n) Kraj Ako je funkcija Kraj

Opcija

I postoji također Podijeliti I Pridružite se

Strb = Pridružiti(Split(Pridružiti(Split(strW, "="), ""), """"), "")

Off-topic: Ali ovo je za sadiste

Velika i mala slova

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

ili StrConv() - pretvoriti niz (u Unicode i nazad, u velika i mala slova, veliko početno slovo riječi, itd.) - pogledajte dolje

Operacije sa stringovima

Za podatke tipa String postoji samo jedna operacija - konkatenacija (unija). Na primjer, rezultat operacije spajanja tri vrijednosti niza “Peter” & » » & “Ivanovich” bit će niz “Peter Ivanovich”. Također je moguće koristiti drugi operator za operaciju konkatenacije, na primjer: “deset” + “hiljadu”. Razlika između ovih izraza je u tome što u prvom slučaju operandi mogu biti vrijednosti bilo kojeg tipa (jednostavno će se pretvoriti u nizove), au drugom oba operanda moraju biti tipa String. Postoji veliki broj funkcija za rad sa stringovima (tabela. Funkcije za rad sa stringovima).

Tabela “Funkcije za rad sa stringovima”

Funkcija Opis Primjer
Len(str) Određuje dužinu niza Iz a=len(“Znakovi”) slijedi a=9
Lijevo(<строка>, <длина>) Izvodi iz argumenta<строка>naveden broj znakova na lijevoj strani Lijevo("1234string", 4) ="1234″
tačno (<строка>, <длина>) Izvodi iz argumenta<строка>određeni broj znakova desno Desno(" 1234string", 6) ="string"
sredina(<строка>, <старт> [, <длина>]) Izvodi iz argumenta<строка>podniz sa navedenim brojem znakova, počevši od pozicije<старт> Mid("12345678″, 4.3) ="456"
sredina(<строка>, <старт>) Podniz iz pozicije se izdvaja<старт>do kraja reda Mid("12345678″, 4) ="45678"
LTrim(<строка>) Uklanja razmake na početku reda LTrim("print") ="print"
RTrim (<строка>) Uklanja razmake na kraju niza RTrim("print") = "print"
Podrezati (<строка>) Uklanja razmake na početku i na kraju niza Trim("print") ="print"
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) Traži podniz u nizu. Vraća poziciju prvog pojavljivanja niza<строка2>to line<строка1>, <старт>— pozicija sa koje počinje pretraga. Ako je ovaj argument izostavljen, pretraga počinje od početka niza Instr("C:Temp test.mdb", "Test")=9 Ako string za pretragu nije u navedenom nizu, funkcija vraća 0
InStrRev([<старт>, ] <строка1>, <строка2> [, <сравнение>]) Traži podniz u nizu, ali počinje pretragu na kraju niza i vraća poziciju posljednjeg pojavljivanja podniza. Opcioni argument<сравнение>definira tip poređenja između dva niza
Zamijeni (<строка>, <строкаПоиск>, <строкаЗамена>) Omogućava vam da zamijenite jedan podniz u nizu drugim. Ova funkcija traži sva pojavljivanja argumenta<строкаПоиск>u argumentu<строка>i zamjenjuje ih sa<строкаЗамена>

Da biste uporedili nizove vrednosti, možete koristiti obične operatore numeričkog poređenja jer se prilikom upoređivanja znakova upoređuju njihovi binarni kodovi. Operator Like se također koristi za upoređivanje vrijednosti nizova, što vam omogućava da otkrijete neprecizno podudaranje, na primjer, izraz "Input" Like "Input*" će biti procijenjen na Tačno jer string koji se poredi počinje riječju "Input". Znak zvjezdice (*) u nizu zamjenjuje proizvoljan broj znakova. Ostali znakovi koje obrađuje Like operator u upoređenom nizu:

  • ? – bilo koji znak (jedan);
  • # – jedna cifra (0–9);
  • [<список>] – znak koji odgovara jednom od znakova na listi;
  • [!<список>] – znak koji se ne podudara ni sa jednim od znakova na listi.
  • A.S.C.() - ova funkcija vam omogućava da vratite numerički kod za proslijeđeni znak. Na primjer, ASC("D") će vratiti 68. Ova funkcija je korisna za određivanje sljedećeg ili prethodnog slova. Obično se koristi zajedno sa funkcijom Chr(), koji izvodi inverznu operaciju - vraća znak u skladu sa prenijetim numeričkim kodom. Varijante ove funkcije su AscB() I AscW():
    • AscB() - vraća samo prvi bajt numeričkog koda za znak.
    • AscW() - vraća kod za znak u Unicode kodiranju
  • Chr() - vraća znak po njegovom numeričkom kodu. Može se koristiti zajedno s funkcijom Asc(), ali se najčešće koristi kada trebate ispisati uslužni znak (na primjer navodnici - "), jer Ne možete samo unijeti navodnike u VBA kod (treba staviti duplo). Ovo je funkcija koju obično koristim.

    Dim sWord As String SWord = Chr(34) & "Riječ u navodnicima" & Chr(34)

    Postoje opcije za ovu funkciju - ChrB() I ChrW(). Radite slično istim opcijama za funkciju Asc().

  • InStr() I InStrRev() - jedna od najpopularnijih karakteristika. Omogućava vam da otkrijete znak ili niz znakova u tijelu string varijable i vratite njihovu poziciju. Ako sekvenca nije pronađena, onda se vraća 0.

    Dim sStr As String sStr = "w" Ako je InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Tada MsgBox "Reč za pretragu je prisutna!" Else MsgBox "Nedostaje tražena riječ!" End If

    Razlika između funkcija je u tome što InStr() traži navedenu riječ s početka reda, a InStrRev() s kraja reda

  • lijevo() , U redu() , Mid() - mogućnost preuzimanja broja znakova koje navedete iz postojeće varijable stringa na lijevoj, desnoj ili sredini, respektivno.

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Mid(sStr, 1, 5)

  • Len() - mogućnost dobivanja broja znakova u liniji. Često se koristi sa petljama, operacijama zamjene itd.
  • LCase() I UCase() - pretvoriti niz u mala i velika slova. Često se koristi za pripremu vrijednosti za poređenje kada slučaj nije važan prilikom poređenja (prezimena, nazivi firmi, gradova itd.).
  • LSet() I RSet() - mogućnost popunjavanja jedne varijable simbolima druge bez promjene njene dužine (lijevo, odnosno desno). Dodatni znakovi su odsječeni, a razmaci se zamjenjuju za znakove koji nedostaju.
  • LTrim() , RTrim() , Podrezati() - mogućnost uklanjanja razmaka s lijeve, desne ili i lijeve i desne strane.
  • Zamijenite() - mogućnost zamjene jednog niza znakova u nizu drugim.

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox Zamijeni(sStr, "Halo", "Bay")

  • Prostor() - dobiti string od broja razmaka koji navedete;
    Još jedna slična funkcija je Spc() , koji se koristi za formatiranje izlaza konzole. Umnožava razmake na osnovu širine komandne linije.
  • StrComp() - sposobnost upoređivanja dva niza.
  • StrConv() - sposobnost pretvaranja niza (u Unicode i nazad, na velika i mala slova, veliko početno slovo riječi, itd.):

    Dim sStr As String sStr = "Zdravo, svijet!" MsgBox StrConv("Zdravo, svijet!", vbUpperCase)

    Konstante se mogu koristiti kao drugi parametar parametara:

      • vbUpperCase: Pretvara sve znakove teksta u VELIKA SLOVENA
      • vbLowerCase: Pretvara sve znakove teksta u mala slova
      • vbProperCase: Pretvara prvi znak svake riječi u velika slova
      • *vbWide: Pretvara znakove niza iz jednobajtnih u dvobajtne
      • *vbNarrow: Pretvara znakove niza iz dvobajtnih u jednobajtne
      • **vbKatakana: Pretvara znakove hiragane u znakove katakane
      • **vbHiragana: Pretvara znakove katakane u znakove hiragane
      • ***vbUnicode: Konvertuje string u Unicode koristeći podrazumevanu kodnu stranicu sistema
      • ***vbFromUnicode: Konvertuje Unicode niz u podrazumevanu kodnu stranicu sistema

    *primjenjivo za lokalizacije Dalekog istoka
    ** Primjenjivo samo za Japan
    *** nije podržano na Macintosh operativnim sistemima

  • StrReverse() - “obrnuti” niz postavljanjem njegovih znakova obrnutim redoslijedom. Funkcija radi samo iz programa Excel 2000 i novijih. Primjer korištenja funkcije, kao i drugih metoda za okretanje riječi, možete pronaći u ovom članku: Kako preokrenuti riječ?
  • Tab() je još jedna funkcija koja se koristi za formatiranje izlaza konzole. Reproducira tab znakove u broju koji odredite. Ako količina nije navedena, jednostavno ubacuje znak tabulatora. Također možete koristiti konstantu za umetanje znaka tabulatora u vrijednost stringa vbTab.
  • String() - omogućava vam da dobijete niz od određenog broja znakova (koje si opet odredio). Obično se koristi za formatiranje izlaza u kombinaciji s funkcijom Len().

Sljedeće tri funkcije vam omogućavaju rad s nizom nizova

Podijeliti (<строка> [, <разделитель>]) – pretvara string u niz podstringova. Podrazumevano, razmak se koristi kao graničnik. Ova funkcija je zgodna za korištenje za razbijanje rečenice u riječi. Međutim, možete odrediti bilo koji drugi graničnik u ovoj funkciji. Na primjer, Split(3, "Ovo je probna rečenica") vraća niz od tri vrijednosti niza: "This", "test", "sentence". pridruži se (<массивСтрок> [, <разделитель>]) – pretvara niz stringova u jedan string sa navedenim graničnikom. Filtriraj(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – skenira niz vrijednosti niza i traži sve podnizove koji odgovaraju datom nizu. Ova funkcija ima četiri argumenta:<строкаПоиск>– niz za pretraživanje;<включение>– parametar (Boolean vrijednost) koji specificira da li će vraćeni redovi uključivati ​​traženi podniz ili će, obrnuto, biti vraćeni samo oni redovi niza koji ne sadrže traženi niz kao podniz;<сравнение>– parametar koji definira metodu poređenja nizova. Još tri funkcije pružaju konverziju nizova: LCase(<строка>) – pretvara sve znakove u nizu u mala slova, na primjer funkcija LCase("MAIL") vraća string "mail"; UCase(<строка>) – pretvara sve znakove u nizu u velika slova; StrConv(<строка>, <преобразование>) – obavlja nekoliko vrsta transformacija nizova u zavisnosti od drugog parametra. Ovaj parametar je opisan ugrađenim konstantama, na primjer funkcija StrConv("Russia", VbProperCase) vraća vrijednost "Russia".

A posljednje dvije funkcije generiraju nizove znakova

Prostor(<число>) – kreira string koji se sastoji od navedenog broja razmaka; String(<число>, <символ>) – kreira string koji se sastoji od broja znakova navedenih u prvom argumentu. Sam simbol je specificiran u drugom argumentu.

Primjer

Kreirajte program koji radi sa string varijablama. Da biste to uradili, kreirajte obrazac čije oznake sadrže sledeće poruke: 1 oznaka: izveštava se o dužini stringa unetog u prvo tekstualno polje (1 red); 2 oznaka: pretvara sve znakove trećeg tekstualnog polja (3. red) u velika slova; 3. oznaka: prikazuje sadržaj prvog i drugog tekstualnog polja (redovi 1 i 2) zajedno.

Tehnologija izvođenja

  • Otvorite Word, sačuvajte dokument i idite na VBA editor.
  • Napravite oblik sličan slici ispod.
  • Napišite obrađivač događaja za dugme OK.
  • Sastavite program.
  • Pokrenite obrazac.

Private Sub CommandButton1_Click() Dim a Kao Niz Dim b Kao String Dim c Kao Niz Dim k Kao Niz Dim d Kao Niz Dim n As Integer a=TextBox1.Text n=Len(a) Label7.Caption=“dužina prve linija je” & n & "znakovi" c=TextBox3.Text k=Ucase(s) Label8.Caption=k b=TextBox2.Text d=a + " " + b Label9.Caption=d End Sub

Zadatak

Neophodno je da se u Excelu u ćeliji A1 izvrši pretraga riječi napisanih odvojenih zarezima u koloni A2, te se upiše rezultat i pronađene riječi, sa brojem njihovih ponavljanja (ako je moguće) u traženom tekstu. u drugoj, trećoj, ćeliji. (bilo bi još bolje da su na neki način istaknute (ili podvučene) u prvoj ćeliji... da bi bile odmah vidljive. Ovako stavljate riječi u niz:

Visual Basic kod
1 2 3 4 5 6 Dim m() Kao niz Ako InStr(1, Cells(1, 2).Value, ","") > 0 Tada je m = Split(Replace(Cells(1, 2).Value, " ", ""), " ,"") Drugo ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If

I onda u petlji tražite sve riječi (opet u petlji, ugniježđene) Dodato nakon 23 minuta

Visual Basic kod
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 Opcija Usporedi tekst Opcija Eksplicitno Sub QWERT() Dim R, N, K Dim m() Kao niz Ako je InStr(1, Cells(1, 2).Vrijednost, ",") > 0 Tada je m = Split(Zamijeni(Cells( 1, 2).Vrijednost, " ", ""), ",") Drugo ReDim m(0): m(0) = Trim(Cells(1, 2).Value) Kraj Ako je Za R = 0 Na UBound( m) N = 1 Ako je InStr(1, Ćelije(1, 1).Vrijednost, m(R)) > 0 Tada je K = InStr(N, Ćelije(1, 1).Vrijednost, m(R)) Uradi BOJA K , Len(m(R)) N = K + Len(m(R)) K = InStr(N, ćelije(1, 1).Vrijednost, m(R)) Petlja Dok je K > 0 Kraj Ako Sljedeće R Kraj Sub PodBOJA(ST, LN) Sa ćelijama(1, 1).Znakovi(Početak:=ST, Dužina:=LN).Font .Boja = RGB(0, 0, 255) .Podebljano = Pravi kraj sa završnom podlogom

Dodato nakon 15 minuta I ovako će pretraživati ​​na početku riječi i odabrati cijelu riječ

Visual Basic kod
1 2 3 4 5 6 7 8 9 10 11 Sub COLOR(ST, LN) LN = LN - 1 Do LN = LN + 1 petlja Dok VBA.Mid(Cells(1, 1).Value, ST + LN, 1)<>" " Sa ćelijama(1, 1).Znakovi(Početak:=ST, Dužina:=LN).Font .Boja = RGB(0, 0, 255) .Podebljano = Pravi kraj sa završnom podlogom

Možete pretraživati ​​ne od početka riječi, već po dijelu riječi. — dodajte još jedan ciklus Do-Loop. Samo pomaknite početak (ST) ulijevo na razmak (http://www.cyberforum.ru/vba/thread567588.html)

Kako: uskladiti niz sa uzorkom (Visual Basic)

Provjera usklađenosti stringovi u šablonu String Data Type (Visual Basic) - Like operator (Visual Basic) . lijevi operand Like operatora je string izraz, a desni operand je šablonski niz Like vraća Booleovu vrijednost

Provjera karaktera

? - bilo koji simbol

  • myString se sastoji od znaka W iza kojeg slijede bilo koja 2 znaka

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

Bilo koji znak sa liste i opsega

Bilo koji znak, a zatim jedan od znakova A, C ili E

    Dim sMatch As Boolean = myString Like "?" velika i mala slova

  • myString = broj znakova, a zatim jedan znak iz raspona: i, j, k, l, m ili n:

    Dim sMatch As Boolean = myString Like "num" velika i mala slova

Like radi sa nizom niza nizova nulte dužine (""). omogućava vam da provjerite da li je niz prazan

Znak sa liste ili nijedan znak

  1. Operator Like se koristi dva puta, a rezultati se kombinuju korišćenjem Operatora Or (Visual Basic) ili Operatora OrElse (Visual Basic).
  2. U prvi predložak iskaza umetnite listu znakova u uglastim zagradama ().
  3. U drugom predlošku izjave ne stavljajte ništa na lokaciju za provjeru. Primjer: provjera sedmocifrenog telefonskog broja phoneNum, koji mora sadržavati tačno tri cifre, nakon čega slijedi razmak, crtica, tačka ili bez karaktera, a zatim četiri cifre. (prve tri cifre ne smiju biti odvojene od posljednje četiri - „bez znaka“) Null , dolazi do greške. Ako je dat argument poredbeni_tip , argument start_position je obavezan. linija_1 Obavezno. String izraz, za kojim se traga. linija_2 Obavezno. Izraz stringa koji tražite. poredbeni_tip Opciono. Definira tip poređenja nizova. Ako je vrijednost argumenta poredbeni_tip je Null, dolazi do greške. Ako je argument poredbeni_tip izostavljen, tip poređenja je određen parametrom Značenje sristrahopoštovanje. Navedite važeći LCID (LocaleID) parametar da biste koristili pravila poređenja navedena u postavkama jezika.

    Opcije

    Argument poredbeni_tip koristi sljedeće parametre:

    Povratne vrijednosti

    Bilješke

    Funkcija InStrB koristi se sa bajt podacima sadržanim u nizu. Funkcija InStrB vraća poziciju bajta, a ne poziciju karaktera, prvog pojavljivanja jednog niza unutar drugog.

    Primjeri

    Upotreba funkcije InStr u izrazu Svaki put kada koristite izraze možete koristiti funkciju InStr. Na primjer, ako želite odrediti položaj prve točke ( . ) u polju koje sadrži IP adresu (nazvano "IPAddress"), možete koristiti funkciju InStr pronaći:

    InStr(1,,"")

    Funkcija InStr gleda svaku vrijednost u polju "IPAddress" i vraća poziciju prve točke. Stoga, ako je vrijednost prvog okteta IP adrese 10. , funkcija vraća vrijednost 3.

    Možete koristiti druge funkcije koje koriste rezultat funkcije InStr, da izdvojite vrijednost okteta IP adrese koja prethodi prvoj tački, na primjer:

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

    U ovom primjeru funkcija InStr(1,,"") vraća poziciju prve tačke. Kao rezultat oduzimanja 1, određuje se broj znakova koji prethode prvoj tački, u ovom slučaju - 2. Tada funkcija lijevo izdvaja ove znakove s lijeve strane polja "IPAddress", vraćajući vrijednost 10.

    Korištenje funkcije InStr u kodu Visual Basic za aplikacije (VBA).

    BILJEŠKA. Sljedeći primjeri ilustriraju upotrebu modula Visual Basic za aplikacije (VBA). Za više informacija o radu sa VBA, izaberite Referenca programera na padajućoj listi pored dugmeta Traži, a zatim unesite jednu ili više ključnih riječi u polje za pretragu.

    U ovom primjeru, funkcija InStr koristi se za dobivanje pozicije prvog pojavljivanja jednog niza unutar drugog.

    Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" " String za pretraživanje. SearchChar = "P" " Traži "P". " Tekstualno poređenje počevši od pozicije 4. Vraća 6. MyPos = Instr( 4, SearchString , SearchChar , 1) " Binarno poređenje počevši od pozicije 1. Vraća 9. MyPos = Instr( 1, SearchString , SearchChar , 0) " Poređenje je po defaultu binarno " (zadnji argument je izostavljen). MyPos = Instr( SearchString , SearchChar ) " Vraća 9. MyPos = Instr( 1, SearchString , "W" ) "Vraća 0.

Često redovi u programu sadrže nepotrebne znakove razmaka na kraju ili početku retka koje je potrebno ukloniti jer strani vodeći ili zadnji razmaci u redu mogu uzrokovati probleme s programom.

VBA ima tri funkcije dizajnirane za uklanjanje vodećih i završnih razmaka iz niza: LTrim, RTrim, Trim. Imajte na umu da ove funkcije zapravo ne modificiraju originalni niz, već vraćaju kopiju niza sa uklonjenim dodatnim razmacima.

Određivanje dužine niza

Obično morate znati dužinu niza kada formatirate poruke za korisnika ili kada formatirate podatke stringa unesene procedurom u Excel radni list ili Word dokument. VBA koristi funkciju u ove svrhe Len. U listi ispod, postoje dva razmaka između zagrada i riječi.



Treba biti oprezan sa žicama fiksne dužine. Budući da je niz fiksne dužine uvijek iste dužine, funkcija Len uvijek vraća deklariranu dužinu niza, bez obzira na stvarnu dužinu niza. Na primjer, ako varijabla stringa fiksne dužine StrokeName, koja ima 15 znakova, zapravo sadrži riječ "sunce", tada funkcija Len (ime poteza)će vratiti rezultat 15. U ovom slučaju, da biste saznali stvarnu dužinu niza (u našem slučaju - 6), trebate koristiti sljedeću kombinaciju funkcija: Len(Trim(StrokeName)).

Upoređivanje i pretraživanje nizova

VBA ima dvije funkcije koje vam pomažu da uporedite nizove: StrComp, InStr.

Funkcija StrComp

Sintaksa


StrComp(String1, String2[, Uporedite])


String1, String2 - bilo koja dva string izraza koja treba uporediti.

Kada se StrComp izvrši, vraća se jedna od sljedećih vrijednosti:

  • -1 ako je String1 manji od String2;
  • 0 ako su String1 i String2 jednaki;
  • 1 ako je niz1 veći od niza2.


Gornji popis uspoređuje dva niza u tekstualnom načinu: "Default String" i "Default String". Rezultat poređenja = 1, tj. "Default String" je veći od "Default String".

Eksperimentirajte s raznim stringovima kako biste bolje razumjeli kako funkcionira funkcija StrComp.

Funkcija InStr

Funkcija InStr vam omogućava da odredite da li jedan niz sadrži drugi niz.

Sintaksa


StrComp(String1, String2[, Uporedite])


String1, String2 - bilo koji važeći string izrazi. Funkcija provjerava da li je String1 sadržan u String2.

Usporedi je neobavezni argument koji može biti bilo koja od sljedećih unaprijed definiranih konstanti (ako se izostavi, koristi se trenutna postavka Option Compare):

  • vbBinaryCompare - binarno poređenje dva stringa;
  • vbTextCompare - poređenje teksta dva niza;
  • vbDatabaseCompare - koristi se samo u Microsoft Accessu.

Start - neobavezni argument, je numerički izraz i specificira poziciju znaka u nizu1 od koje treba započeti provjeru.


InStr vraća broj koji označava poziciju karaktera u String1 gdje je String2 pronađen. Ako InStr ne pronađe String2 u String1, tada se vraća 0. Ako je String1 (ili String2) Null, tada funkcija također vraća Null.



Podjela linija

Ponekad postaje neophodno podijeliti niz na njegove sastavne dijelove. U VBA, tri funkcije rješavaju ovaj problem: Lijevo, desno, sredina.

Lijeva funkcija

Sintaksa


Lijevo (niz, dužina)


Funkcija vraća kopiju stringa, počevši od prvog znaka i uključujući broj znakova specificiranih u dužini. Ako je Length broj veći od stvarne dužine stringa, onda se vraća cijeli string izraz.

Prava funkcija

Sintaksa


desno (niz, dužina)


String je bilo koji važeći string izraz.

Dužina - bilo koja brojčana vrijednost.


Funkcija vraća kopiju stringa, počevši od posljednjeg znaka i uključujući, s desna na lijevo, broj znakova specificiranih pomoću dužine. Ako je Length broj veći od stvarne dužine stringa, onda se vraća cijeli string izraz. Funkcija Right uvijek kopira znakove s kraja niza na početak.

Srednja funkcija

Sintaksa


Srednja (String, Početak, [, Dužina])


String je bilo koji važeći string izraz.

Dužina, početak - bilo koje numeričke vrijednosti.


Funkcija Mid vraća kopiju stringa počevši od pozicije znaka u stringu specificiranom argumentom Start. Opcionalni argument dužine specificira broj znakova za kopiranje iz stringa u sredinu. Ako Start sadrži veći broj od stvarne dužine niza, tada se vraća prazan niz.



Znakovi koji se ne mogu uneti sa tastature

Često se dešava da treba da unesete znak za koji nema tastera na tastaturi (na primer, simbol autorskog prava). Druga situacija je kada treba da uključite VBA servisni karakter u niz (najčešći slučaj je uključivanje dvostrukih navodnika).

Za uključivanje znakova u niz koji se ne može unijeti s tastature ili koji imaju posebno značenje za VBA, koristite funkciju Chr.

Sintaksa


Chr (charcode)


Charcode - bilo koji numerički izraz koji je važeći kod za skup znakova koji koristi računar. Mora biti cijeli broj između 0 i 255.

Funkcija Chr uzima jedan karakterni kod kao argument i vraća string koji sadrži znak koji odgovara tom kodu. Ova funkcija se koristi u gornjim listama za dodavanje linije kada se prikazuje poruka na ekranu Chr (13).


Budući da su znakovi koji se koriste za početak novog reda toliko važni pri formatiranju poruka i drugih nizova podataka kojima manipuliraju VBA rutine, postoji nekoliko unaprijed definiranih konstanti za ove znakove kako bi se izbjegla potreba za korištenjem Chr funkcije:

  • vbCr je znak za vraćanje nosača. Ekvivalentno Chr(13)
  • vbLf - pomak znaka za jedan red. Ekvivalentno Chr(10)
  • vbCrLf - povratak nosioca + pomak znak za jedan red. Ekvivalentno Chr(13)+ Chr(10)
  • vbTab - znak tabulatora. Chr(9) ekvivalent

Za pregled liste kod-simbol potrebno je da otvorite VBA sistem pomoći i na zahtev "skupovi karaktera" Biće predstavljena odgovarajuća tabela.



Formatiranje vrijednosti podataka

Vrlo često nam, iz ovog ili onog razloga, format podataka na izlazu programa ne odgovara u potpunosti. Ovaj problem rješava funkcija Format.

Funkcija VBA Format je identična funkciji Format u Excelu i koristi ista rezervirana mjesta za formatiranje podataka.

Sintaksa


Format (Izraz [, Format[, Firstdayofweek [, Firstweekofyear]]])


Izraz - bilo koji važeći izraz (potreban argument).

Format je važeći izraz imenovanog ili korisnički definiranog formata.

Firstdayofweek je konstanta koja specificira prvi dan u sedmici.

Firstweekofyear - konstanta koja definira prvu sedmicu u godini.


Da biste koristili funkciju Format, morate bilo koje postavite unapred definisani format, ili kreirati sliku određenog formata, koristeći znakove čuvara mjesta.


Imenovani formati za upotrebu sa funkcijom Format

Imenovani format Akcija
Opšti datum Formatira informacije o datumu i vremenu u sekvencijalni broj datuma koristeći postavke formata datuma i vremena za ovaj računar.
Dugi spoj Formatira samo dio datuma u sekvencijalni datum, koristeći postavke formata dugog datuma na računaru.
Medium Date Formatira samo deo datuma kao sekvencijalni datum, koristeći postavke srednjeg formata datuma na računaru.
Kratki datum Formatira samo dio koji sadrži datum u sekvencijalni datum, koristeći postavke računara za kratki format datuma.
Dugo vrijeme Formatira samo vremenski dio u sekvencijalni datum, koristeći postavke dugog formata na računaru.
Srednje vrijeme Formatira samo vremenski dio u sekvencijalni datum, koristeći postavke formata srednjeg vremena na računaru.
Kratko vrijeme Formatira samo vremenski dio u sekvencijalni datum, koristeći postavke računara za format kratkog vremena.
Opšti broj Formatira broj u niz bez posebnih znakova.
Valuta Formatira broj sa simbolom valute, separatorom hiljada i samo dva decimalna mjesta.
Popravljeno Formatira broj tako da uvijek postoji barem jedna znamenka prije decimalnog zareza i najmanje dvije cifre nakon nje.
Standard Formatira broj sa separatorom hiljada tako da postoji najmanje jedna cifra ispred decimalnog separatora i najmanje dve cifre iza njega.
Procenat Formatira broj kao procenat množenjem sa 100 i dodavanjem simbola za procenat.
Scientific Formatira broj u regularni eksponencijalni format.
Da ne Niz "Da" se vraća ako je formatirani broj različit od nule, u suprotnom - "Ne".
Tačno/Netačno Niz "True" se vraća ako je formatirani broj različit od nule, u suprotnom - "False".
Uključeno isključeno Niz "On" se vraća ako je formatirani broj različit od nule, u suprotnom - "Off".

Čuvari mjesta za kreiranje prilagođenih formata

Znak čuvara mjesta Akcija (koristeći broj 1234.45 kao primjer)
0 Numerički znak koji prikazuje cifru ako je jedan na toj poziciji, ili 0 ako nije. Možete koristiti simbol 0 da prikažete početne nule za cijele brojeve i zadnje nule za decimale: 00000.000 prikazuje 01234.450
# Numerički simbol prikazuje cifru ako postoji na ovoj poziciji, inače ne prikazuje ništa. Znak za popunjavanje # je ekvivalentan 0, osim što se prve i zadnje nule ne prikazuju: #####.### prikazuje 1234,45
$ Prikazuje znak dolara: $###,###.00 prikazuje $1,234.45
. Decimalni znak čuvara mjesta, prikazuje decimalni zarez na određenoj poziciji u nizu znakova čuvara mjesta 0: #.##.## prikazuje 1234,45
% Simbol procenta, množi vrijednost sa 100 i dodaje znak za postotak na poziciji označenoj čuvarima mjesta 0:#.#0.00% prikazuje broj 0.12345 kao 12.35% (dolazi do zaokruživanja)
, Razdjelnik hiljada, dodaje zareze kao separatore hiljada u 0 i # stringovima čuvara mjesta: ###,###,###.00 prikazuje 1,234,45
e-e- Prikazuje vrijednost u eksponencijalnom formatu sa eksponentom samo za negativne vrijednosti: #.####E-00 prikazuje 1.23445E03
E+ e+ Prikazuje vrijednost u eksponencijalnom formatu sa eksponentom za negativne i pozitivne vrijednosti: #.####E+00 prikazuje 1.23445E+03
/ Odvaja dan, mjesec i godinu za formatiranje vrijednosti datuma.
m Određuje kako se mjeseci prikazuju u datumima: m prikazuje 1, mm - 01, mmm - januar, mmmm - januar
d Određuje kako prikazati dane u datumima: d prikazuje 1, dd - 01, ddd - ned, dddd - nedjelja
y Prikazuje dan u godini kao broj od 1 do 366
yy Određuje kako se godine prikazuju u datumima: yy - 66, yyyy - 1966
q Prikazuje kvartal u godini kao broj od 1 do 4
w Prikazuje dan u sedmici kao broj (1 - nedjelja)
ww Prikazuje sedmicu u godini kao broj od 1 do 54
: Odvaja sate, minute i sekunde u vrijednostima formata vremena: hh:mm:ss - 01:01:01, h:m:s - 1:1:1
h Određuje način prikaza sati: hh - 01, h - 1
m Određuje kako se prikazuju minute: mm - 01, m - 1
s Određuje kako se prikazuju sekunde: ss - 01, s - 1
AM/PM Prikazuje vrijeme u 12-satnom formatu sa dodanim prijepodne ili popodne
@ Čuvar mjesta za znakove koji prikazuje razmak ako u formatiranom nizu nema odgovarajućeg znaka.
Prikazuje sve znakove velikim slovima.
> Prikazuje sve znakove malim slovima.
Chr

Chr funkcija

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

Funkcija Chr(Ch aracte r) vam omogućava da dobijete znak po vrijednosti njegovog ANSI ili Unicode numeričkog koda

Povratna vrijednost

Funkcije Chr, ChrB, ChrW vratiti vrijednost podtipa String tipa Variant koji sadrži znak koji odgovara specificiranom ANSI ili Unicode kodu znakova. Funkcije Chr$, ChrB$, ChrW$ vrati vrijednost tipa String u skladu s tim

Bilješka

Chr I Chr$ vratiti znak njegovim ANSI kodiranjem
ChrB I ChrB$ povratak jednobajt linija
ChrW vraća Unicode karakter, međutim na ne-Unicode sistemima njegovo ponašanje je slično Chr
Koristi se u parametru CharCode vrijednosti veće od 255 generiraju greške u vremenu izvođenja 5: Nevažeći poziv ili argument procedure ili 6: Overflow

Opcije CharCode Traženi argument je Long vrijednost koja specificira karakter. Obično funkcija Chr koristi se prilikom umetanja znakova koji se ne mogu ispisivati ​​u tekstualne nizove (povratak prijelaza, pomicanje reda, tabulator, itd.). Kodovi 0-31 odgovaraju standardnim ASCII kontrolnim znakovima. Na primjer, Chr(10) vraća znak novog reda Primjer Dim retval retval = Chr(65) Debug.Print retval " vraća A Kategorija

U odeljku o pitanju Ljudi, objasnite detaljno šta funkcija ord(x) i njen inverzni chr(x) znače u Pascalu? dao autor Nick Brown najbolji odgovor je Postoji posebna tablica znakova (prošireni ASCII kod, kada svaki znak ima numeričku vrijednost, ukupno ima 255 vrijednosti u tabeli, odnosno svakom znaku je dodijeljen broj,
chr(0..254) pretvara broj (jedan bajt) u znak kojem ovaj broj pripada, na primjer chr(71) rezultat će biti slovo "G", također pritiskom na tipke na tastaturi proizvodi vlastiti kod, ovo je upravo kod kada se stavi u ovaj operator i daće rezultat koji taster se pritisne, ovo sam ja na primer. Ali ORD(x) operator radi ovaj proces obrnutim redoslijedom.
Postavljamo karakter vrijednosti i dobijamo broj od 0 do 254 (jedan bajt)
na primjer ORD("G") će nam dati rezultat 71 (u decimalnom formatu)
To je sve što se čini!!!

Odgovor od Katyonachik[novak]
Jednostavno je, zaista)
Ord ("X") - vratiće kod znaka X iz ASKII tabele.
Rezultat inverzne funkcije bit će simbol koji odgovara unesenom kodu (iz kojeg je funkcija preuzeta) iz iste ASCII tablice.


Odgovor od Juri[guru]
Ovo nisu recipročne funkcije!
Funkcija Ord vraća rednu vrijednost nabrojanog tipa.
Brojanje počinje od nule.
Za tip bajta, funkcija će vratiti stvarnu vrijednost - redni broj se poklapa sa vrijednošću.
Za tip char, funkcija će vratiti serijski broj znaka, koji se (broj je nasumičan) poklapa sa ASCII kodom.
Funkcija chr vraća znak sa datim ASCII kodom.
Zaključak: Jednostavno, što se tiče simboličkih vrijednosti, one stvarno djeluju kao inverzne jedna drugoj...
Stoga možemo reći da je funkcija ord inverzna funkciji chr, ali ne i obrnuto - funkcija chr nije inverzna funkciji ord, budući da opseg funkcije ord nije ograničen na rad sa simbolima!