Eksempler på bruk av VBA-funksjoner. Innebygde funksjoner i Oracle Vba excel-funksjoner for arbeid med strenger

  • A.S.C. () - denne funksjonen lar deg returnere den numeriske koden for det beståtte tegnet. For eksempel vil ASC("D") returnere 68. Denne funksjonen er nyttig for å bestemme neste eller forrige bokstav. Den brukes vanligvis i forbindelse med funksjonen Chr(), som utfører den inverse operasjonen - returnerer et tegn i henhold til dens numeriske kode som overføres. Varianter av denne funksjonen er AscB() Og AscW():
    • AscB () - returnerer bare den første byten av den numeriske koden for tegnet.
    • AscW () - returnerer koden for tegnet i Unicode-koding
  • Chr () - returnerer et tegn ved sin numeriske kode. Kan brukes sammen med Asc()-funksjonen, men oftest brukes den når du skal skrive ut et tjenestetegn (for eksempel anførselstegn - "), fordi Du kan ikke bare legge inn anførselstegn i VBA-kode (du må legge dobbelt). Dette er funksjonen jeg vanligvis bruker.

    Dim sWord As String sWord = Chr(34) & "Ord i anførselstegn" & Chr(34)

    Det er alternativer for denne funksjonen - ChrB() Og ChrW(). Arbeid på samme måte som de samme alternativene for funksjonen Asc().

  • InStr () Og InStrRev () - en av de mest populære funksjonene. Lar deg oppdage et tegn eller en sekvens av tegn i brødteksten til en strengvariabel og returnere deres posisjon. Hvis sekvensen ikke blir funnet, returneres 0.

    Dim sStr As String sStr = "w" Hvis InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Da MsgBox "Søkeordet er til stede!" Else MsgBox "Det søkte ordet mangler!" Slutt om

    Forskjellen mellom funksjonene er at InStr() søker etter det angitte ordet fra begynnelsen av linjen, og InStrRev() fra slutten av linjen

  • Venstre () , Ikke sant () , Midt () - muligheten til å ta antall tegn du spesifiserer fra en eksisterende strengvariabel til henholdsvis venstre, høyre eller midten.
    Dim sStr As String sStr = "Hei, verden!" MsgBox Mid(sStr, 1, 5)

    Dim sStr As String sStr = "Hei, verden!" MsgBox Mid(sStr, 1, 5)

  • Len () - evne til å få antall tegn på en linje. Brukes ofte med løkker, erstatte operasjoner, etc.
  • LCase () Og UCase () - konverter strengen til henholdsvis små og store bokstaver. Brukes ofte for å forberede en verdi for sammenligning når kasus ikke er viktig når man sammenligner (etternavn, navn på selskaper, byer osv.).
  • LSett () Og RSett () - Evnen til å fylle en variabel med symboler for en annen uten å endre lengden (henholdsvis venstre og høyre). Ekstra tegn kuttes av og mellomrom erstattes med manglende tegn.
  • LTrim () , RTrim () , Listverk () - muligheten til å fjerne mellomrom henholdsvis til venstre, høyre eller både venstre og høyre.
  • Erstatte () - muligheten til å erstatte en sekvens av tegn i en streng med en annen.
    Dim sStr As String sStr = "Hei, verden!" MsgBox Replace(sStr, "Hei" , "Bay" )

    Dim sStr As String sStr = "Hei, verden!" MsgBox Replace(sStr, "Hei", "Bay")

  • Rom () - få en streng fra antall mellomrom du angir;
    En annen lignende funksjon er Spc () , som brukes til å formatere konsollutdata. Den multipliserer mellomrom basert på bredden på kommandolinjen.
  • StrComp () - evne til å sammenligne to strenger.
  • StrConv () - evne til å konvertere en streng (til Unicode og tilbake, til store og små bokstaver, bruk stor bokstav i ord osv.):
    Dim sStr As String sStr = "Hei, verden!" MsgBox StrConv("Hei, verden!" , vbUpperCase)

    Dim sStr As String sStr = "Hei, verden!" MsgBox StrConv("Hei, verden!", vbUpperCase)

    Konstanter kan brukes som den andre parameterparameteren:

    • vbUpperCase: Konverterer alle teksttegn til STORE BOKSTAVER
    • vbLowerCase: Konverterer alle teksttegn til små bokstaver
    • vbProperCase: Konverterer det første tegnet i hvert ord til store bokstaver
    • *vbWide: Konverterer strengtegn fra enkeltbyte til dobbelbyte
    • *vbSmal: Konverterer strengtegn fra dobbelbyte til enkeltbyte
    • **vbKatakana: Konverterer Hiragana-karakterer til Katakana-karakterer
    • **vbHiragana: Konverterer Katakana-karakterer til Hiragana-karakterer
    • ***vbUnicode: Konverterer en streng til Unicode ved å bruke systemets standard kodeside
    • ***vbFromUnicode: Konverterer en Unicode-streng til systemets standard kodeside
    • * gjelder for lokalisering av Fjernøsten
      ** Gjelder kun for Japan
      *** støttes ikke på Macintosh-operativsystemer

  • StrReverse () - "reversere" en streng ved å plassere tegnene i omvendt rekkefølge. Funksjonen fungerer kun fra Excel 2000 og høyere. Et eksempel på bruk av funksjonen, samt andre metoder for å snu et ord, finner du i denne artikkelen: Hvordan snu et ord?
  • Tab () er en annen funksjon som brukes til å formatere konsollutdata. Gjengir tabulatortegn i nummeret du angir. Hvis ingen mengde er spesifisert, setter du bare inn et tabulatortegn. Du kan også bruke konstanten til å sette inn et tabulatortegn i en strengverdi vbTab.
  • String () - lar deg få en streng med et spesifisert antall tegn (som igjen er spesifisert av deg). Brukes vanligvis til å formatere utdata i forbindelse med funksjonen Len().

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

valg 1

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

Alternativ

Du kan også bruke en byte-array:

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 Til UBound(Mass) If Masse(n)<>34 og messe(n)<>61 Så Zam = Zam + Chr$(Mass(n)) Neste MsgBox Zam End Sub

Alternativ

Eller filtrering med mid:

Sub nn() Dim n As Long, TXT As String, L As String, Zam As String TXT = "="" DMITRY VLADIMIROVICH KOROTEEV" For n = 1 Til Len(TXT) L = Mid$(TXT, n, 1) Hvis L<>"""" Og jeg<>"=" Så Zam = Zam + L Neste MsgBox Zam End Sub

Linje 6 kan erstattes med husky:
Visual Basic-kode
1
Hvis L liker “[!””=]” så er Zam = Zam + L

Alternativ

Også gjennom posisjonssøk og rekursjon:

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 As String, What As String, Valgfri Pos = 1) Dim n As Long If Pos<>0 Da n = InStr(Pos, txt, Hva) 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

Du kan også bruke regulære uttrykk, men jeg kjenner dem ikke.

Alternativ

Gjennom høyre-til-venstre-søk og rekursjon:

Visual Basic-kode
1 2 3 4 5 6 7 8 Funksjonsendring(txt som streng, hva som streng, valgfri pos så lang) Dim n så lang hvis Pos = 0 Så Pos = Len(txt) Hvis Pos<>-1 Da er n = InStrRev(txt, Hva, Pos) Endre = Endre(txt, Hva, IIf(n = 1, -1, n - 1)) + Mid$(txt, n + 1, Pos - n) Slutt Hvis Avslutt funksjon

Alternativ

Og det er også Dele Og Bli med

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

Off-topic: Men dette er for sadister

Store og små bokstaver

Med ActiveDocument.Range "oppercase.Text = Ucase(.Text) "små bokstaver.Text = Lcase(.Text) End With With

eller StrConv() - konverter en streng (til Unicode og tilbake, til store og små bokstaver, bruk stor bokstav i ord osv.) - se nedenfor

Strengeoperasjoner

For data av typen String er det bare én operasjon - sammenkobling (union). For eksempel vil resultatet av sammenkoblingsoperasjonen av tre strengverdier "Peter" & » » & "Ivanovich" være strengen "Peter Ivanovich". Det er også mulig å bruke en annen operatør for sammenkoblingsoperasjonen, for eksempel: "ti" + "tusen". Forskjellen mellom disse uttrykkene er at i det første tilfellet kan operandene være verdier av hvilken som helst type (de vil ganske enkelt bli konvertert til strenger), og i det andre må begge operandene være av typen String. Det finnes et stort antall funksjoner for arbeid med strenger (tabell. Funksjoner for arbeid med strenger).

Tabell "Funksjoner for arbeid med strenger"

Funksjon Beskrivelse Eksempel
Len(str) Bestemmer lengden på strengen Fra a=len(“Tegn”) følger a=9
Venstre (<строка>, <длина>) Utdrag fra argumentasjon<строка>spesifisert antall tegn til venstre Left("1234string", 4) ="1234″
Ikke sant(<строка>, <длина>) Utdrag fra argumentasjon<строка>spesifisert antall tegn til høyre Høyre(" 1234streng", 6) = "streng"
Midt(<строка>, <старт> [, <длина>]) Utdrag fra argumentasjon<строка>delstreng med spesifisert antall tegn, starter ved posisjon<старт> Mid("12345678", 4.3) ="456"
Midt(<строка>, <старт>) En delstreng fra posisjonen trekkes ut<старт>til slutten av linjen Mid("12345678", 4) ="45678"
LTrim(<строка>) Fjerner mellomrom på begynnelsen av en linje LTrim("print") ="print"
RTrim (<строка>) Fjerner mellomrom på slutten av en streng RTrim("print ") = "print"
Listverk(<строка>) Fjerner mellomrom på begynnelsen og slutten av en streng Trim("print") ="print"
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) Søker etter en understreng i en streng. Returnerer posisjonen til den første forekomsten av en streng<строка2>å linje<строка1>, <старт>— posisjonen som søket starter fra. Hvis dette argumentet utelates, starter søket fra begynnelsen av strengen Instr("C:Temp test.mdb", "Test")=9 Hvis søkestrengen ikke er i den angitte strengen, returnerer funksjonen 0
InStrRev([<старт>, ] <строка1>, <строка2> [, <сравнение>]) Søker etter en delstreng i en streng, men starter søket på slutten av strengen og returnerer posisjonen til siste forekomst av delstrengen. Valgfritt argument<сравнение>definerer typen sammenligning mellom to strenger
Erstatte(<строка>, <строкаПоиск>, <строкаЗамена>) Lar deg erstatte en delstreng i en streng med en annen. Denne funksjonen søker etter alle forekomster av argumentet<строкаПоиск>i argumentasjon<строка>og erstatter dem med<строкаЗамена>

For å sammenligne strengverdier kan du bruke vanlige numeriske sammenligningsoperatorer fordi når du sammenligner tegn, sammenlignes deres binære koder. Like-operatoren brukes også til å sammenligne strengverdier, som lar deg oppdage en upresis match, for eksempel vil uttrykket "Input" Like "Input*" evalueres til True fordi strengen som sammenlignes begynner med ordet "Input". Stjernen (*)-tegnet i en streng erstatter et vilkårlig antall tegn. Andre tegn som behandles av Like-operatoren i den sammenlignede strengen:

  • ? – et hvilket som helst tegn (ett);
  • # – ett siffer (0–9);
  • [<список>] – et tegn som samsvarer med et av tegnene i listen;
  • [!<список>] – et tegn som ikke samsvarer med noen av tegnene i listen.
  • A.S.C.() - denne funksjonen lar deg returnere den numeriske koden for det beståtte tegnet. For eksempel vil ASC("D") returnere 68. Denne funksjonen er nyttig for å bestemme neste eller forrige bokstav. Den brukes vanligvis i forbindelse med funksjonen Chr(), som utfører den inverse operasjonen - returnerer et tegn i henhold til dens numeriske kode som overføres. Varianter av denne funksjonen er AscB() Og AscW():
    • AscB() - returnerer bare den første byten av den numeriske koden for tegnet.
    • AscW() - returnerer koden for tegnet i Unicode-koding
  • Chr() - returnerer et tegn ved sin numeriske kode. Kan brukes sammen med Asc()-funksjonen, men oftest brukes den når du skal skrive ut et tjenestetegn (for eksempel anførselstegn - "), fordi Du kan ikke bare legge inn anførselstegn i VBA-kode (du må legge dobbelt). Dette er funksjonen jeg vanligvis bruker.

    Dim sWord As String sWord = Chr(34) & "Ord i anførselstegn" & Chr(34)

    Det er alternativer for denne funksjonen - ChrB() Og ChrW(). Arbeid på samme måte som de samme alternativene for funksjonen Asc().

  • InStr() Og InStrRev() - en av de mest populære funksjonene. Lar deg oppdage et tegn eller en sekvens av tegn i brødteksten til en strengvariabel og returnere deres posisjon. Hvis sekvensen ikke blir funnet, returneres 0.

    Dim sStr As String sStr = "w" Hvis InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Da MsgBox "Søkeordet er til stede!" Else MsgBox "Det søkte ordet mangler!" Slutt om

    Forskjellen mellom funksjonene er at InStr() søker etter det angitte ordet fra begynnelsen av linjen, og InStrRev() fra slutten av linjen

  • Venstre() , Ikke sant() , Midt() - muligheten til å ta antall tegn du spesifiserer fra en eksisterende strengvariabel til henholdsvis venstre, høyre eller midten.

    Dim sStr As String sStr = "Hei, verden!" MsgBox Mid(sStr, 1, 5)

  • Len() - evne til å få antall tegn på en linje. Brukes ofte med løkker, erstatte operasjoner, etc.
  • LCase() Og UCase() - konverter strengen til henholdsvis små og store bokstaver. Brukes ofte for å forberede en verdi for sammenligning når kasus ikke er viktig når man sammenligner (etternavn, navn på selskaper, byer osv.).
  • LSett() Og RSett() - Evnen til å fylle en variabel med symboler for en annen uten å endre lengden (henholdsvis venstre og høyre). Ekstra tegn kuttes av og mellomrom erstattes med manglende tegn.
  • LTrim() , RTrim() , Listverk() - muligheten til å fjerne mellomrom henholdsvis til venstre, høyre eller både venstre og høyre.
  • Erstatte() - muligheten til å erstatte en sekvens av tegn i en streng med en annen.

    Dim sStr As String sStr = "Hei, verden!" MsgBox Replace(sStr, "Hei", "Bay")

  • Rom() - få en streng fra antall mellomrom du angir;
    En annen lignende funksjon er Spc() , som brukes til å formatere konsollutdata. Den multipliserer mellomrom basert på bredden på kommandolinjen.
  • StrComp() - evne til å sammenligne to strenger.
  • StrConv() - evne til å konvertere en streng (til Unicode og tilbake, til store og små bokstaver, bruk stor bokstav i ord osv.):

    Dim sStr As String sStr = "Hei, verden!" MsgBox StrConv("Hei, verden!", vbUpperCase)

    Konstanter kan brukes som den andre parameterparameteren:

      • vbUpperCase: Konverterer alle teksttegn til STORE BOKSTAVER
      • vbLowerCase: Konverterer alle teksttegn til små bokstaver
      • vbProperCase: Konverterer det første tegnet i hvert ord til store bokstaver
      • *vbWide: Konverterer strengtegn fra enkeltbyte til dobbelbyte
      • *vbSmal: Konverterer strengtegn fra dobbelbyte til enkeltbyte
      • **vbKatakana: Konverterer Hiragana-karakterer til Katakana-karakterer
      • **vbHiragana: Konverterer Katakana-karakterer til Hiragana-karakterer
      • ***vbUnicode: Konverterer en streng til Unicode ved å bruke systemets standard kodeside
      • ***vbFromUnicode: Konverterer en Unicode-streng til systemets standard kodeside

    *gjelder for lokaliseringer i Fjernøsten
    ** Gjelder kun for Japan
    *** støttes ikke på Macintosh-operativsystemer

  • StrReverse() - "reversere" en streng ved å plassere tegnene i omvendt rekkefølge. Funksjonen fungerer kun fra Excel 2000 og høyere. Et eksempel på bruk av funksjonen, samt andre metoder for å snu et ord, finner du i denne artikkelen: Hvordan snu et ord?
  • Tab() er en annen funksjon som brukes til å formatere konsollutdata. Gjengir tabulatortegn i nummeret du angir. Hvis ingen mengde er spesifisert, setter du bare inn et tabulatortegn. Du kan også bruke konstanten til å sette inn et tabulatortegn i en strengverdi vbTab.
  • String() - lar deg få en streng med et spesifisert antall tegn (som igjen er spesifisert av deg). Brukes vanligvis til å formatere utdata i forbindelse med funksjonen Len().

De følgende tre funksjonene lar deg jobbe med en rekke strenger

Del (<строка> [, <разделитель>]) – konverterer en streng til en rekke understrenger. Som standard brukes mellomrom som skilletegn. Denne funksjonen er praktisk å bruke for å dele en setning i ord. Du kan imidlertid angi et hvilket som helst annet skilletegn i denne funksjonen. For eksempel, Split(3, "Dette er en testsetning") returnerer en matrise med tre strengverdier: "This", "test", "setning". Bli med (<массивСтрок> [, <разделитель>]) – konverterer en rekke strenger til en enkelt streng med det angitte skilletegnet. Filter(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – skanner en rekke strengverdier og søker etter alle understrenger som samsvarer med den gitte strengen. Denne funksjonen har fire argumenter:<строкаПоиск>– søkestreng;<включение>– en parameter (boolsk verdi) som spesifiserer om de returnerte radene vil inkludere den søkte understrengen eller omvendt, bare de array-radene som ikke inneholder den søkte strengen som en understreng vil bli returnert;<сравнение>– parameter som definerer strengsammenligningsmetoden. Tre funksjoner til gir strengkonvertering: LCase(<строка>) – konverterer alle tegn i en streng til små bokstaver, for eksempel returnerer funksjonen LCase("MAIL") strengen "mail"; UCase(<строка>) – konverterer alle tegn i strengen til store bokstaver; StrConv(<строка>, <преобразование>) – utfører flere typer strengtransformasjoner avhengig av den andre parameteren. Denne parameteren er beskrevet av innebygde konstanter, for eksempel returnerer funksjonen StrConv("Russia", VbProperCase) verdien "Russia".

Og de to siste funksjonene genererer strenger med tegn

Rom(<число>) – oppretter en streng som består av det angitte antallet mellomrom; streng(<число>, <символ>) – lager en streng som består av antall tegn spesifisert i det første argumentet. Selve symbolet er spesifisert i det andre argumentet.

Eksempel

Lag et program som fungerer med strengvariabler. For å gjøre dette, lag et skjema hvis etiketter inneholder følgende meldinger: 1 etikett: lengden på strengen som er angitt i det første tekstfeltet, rapporteres (1 linje); 2 label: konverterer alle tegn i det tredje tekstfeltet (3. linje) til store bokstaver; 3. etikett: viser innholdet i det første og andre tekstfeltet (linje 1 og 2) sammen.

Utførelsesteknologi

  • Åpne Word, lagre dokumentet og gå til VBA-editoren.
  • Lag en form som ligner på bildet nedenfor.
  • Skriv en hendelsesbehandler for OK-knappen.
  • Kompiler programmet.
  • Kjør skjemaet.

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=“lengden på den første linje er” & n & "tegn" c=TextBox3.Text k=Ucase(с) Label8.Caption=k b=TextBox2.Text d=a + " " + b Label9.Caption=d End Sub

Oppgave

Det er nødvendig at det i Excel i celle A1 utføres et søk etter ord skrevet atskilt med komma i kolonne A2, og resultatet, og ordene som ble funnet, med antall repetisjoner (hvis mulig) i den søkte teksten, er skrevet i en annen, tredje, celle. (det ville vært enda bedre om de ble uthevet (eller understreket) på en eller annen måte i den første cellen... slik at de ville være umiddelbart synlige. Slik setter du ord inn i en matrise:

Visual Basic-kode
1 2 3 4 5 6 Dim m() As String If InStr(1, Cells(1, 2).Verdi, ","") > 0 Da m = Split(Replace(Cells(1, 2).Value, " ", ""), " ,"") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Verdi) End If

Og så i en løkke søker du etter alle ordene (igjen i en løkke, nestet) Lagt til etter 23 minutter

Visual Basic-kode
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 Alternativ Sammenlign tekst Alternativ Eksplisitt Sub QWERT() Dim R, N, K Dim m() As String If InStr(1, Cells(1, 2).Verdi, ",") > 0 Da m = Split(Replace(Cells( 1, 2). Verdi, " ", ""), ","") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Verdi) End If For R = 0 To UBound( m) N = 1 Hvis InStr(1, Cells(1, 1).Verdi, m(R)) > 0 Så K = InStr(N, Cells(1, 1).Verdi, m(R)) Gjør FARGE K , Len(m(R)) N = K + Len(m(R)) K = InStr(N, Cells(1, 1).Verdi, m(R)) Loop Mens K > 0 End If Next R End Sub Sub FARGE(ST, LN) Med Celler(1, 1). Tegn(Start:=ST, Lengde:=LN).Skrift .Farge = RGB(0, 0, 255) .Fet = True End With End Sub

Lagt til etter 15 minutter Og dette er hvordan den vil søke i begynnelsen av ordet og velge hele ordet

Visual Basic-kode
1 2 3 4 5 6 7 8 9 10 11 Sub FARGE(ST, LN) LN = LN - 1 Gjør LN = LN + 1 sløyfe Mens VBA.Mid(Cells(1, 1).Verdi, ST + LN, 1)<>" " With Cells(1, 1). Characters(Start:=ST, Length:=LN). Font .Color = RGB(0, 0, 255) .Fet = True End With End Sub

Du kan gjøre et søk ikke fra begynnelsen av ordet, men etter en del av ordet. — legg til en ny Do-Loop-syklus. Bare flytt starten (ST) til venstre til et mellomrom (http://www.cyberforum.ru/vba/thread567588.html)

Hvordan: Matche en streng mot et mønster (Visual Basic)

Samsvarssjekk strenger til malen String Data Type (Visual Basic) - Like operator (Visual Basic) . venstre operand av Like-operanden er et strenguttrykk, og høyre operand er en malstreng Like returnerer en boolsk verdi

Karaktersjekk

? - et hvilket som helst symbol

  • myString består av tegnet W etterfulgt av 2 vilkårlige tegn

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

Et hvilket som helst tegn fra listen og området

Et hvilket som helst tegn og deretter ett av tegnene A, C eller E

    Dim sMatch As Boolean = myString Liker "?" skiller mellom store og små bokstaver

  • myString = antall tegn og deretter ett tegn fra området: i, j, k, l, m eller n:

    Dim sMatch As Boolean = myString Som "num" skiller mellom store og små bokstaver

Like fungerer med både en null-lengde streng array string (""). lar deg sjekke at en streng er tom

Et tegn fra listen eller ingen tegn

  1. Like-operatoren brukes to ganger, og resultatene kombineres med Or Operator (Visual Basic) eller OrElse Operator (Visual Basic).
  2. I den første setningsmalen setter du inn en liste over tegn i hakeparenteser ().
  3. I den andre erklæringsmalen, ikke plasser noe i kontrollstedet. Eksempel: sjekke et syvsifret telefonnummer phoneNum, som må inneholde nøyaktig tre sifre, etterfulgt av et mellomrom, en bindestrek, en prikk eller ingen tegn, og deretter firesifret. (de tre første sifrene kan ikke skilles fra de fire siste - "ingen tegn") Null , en feil oppstår. Hvis et argument er gitt sammenligningstype , argument startposisjon er obligatorisk. linje 1 Obligatorisk. Strengeuttrykk, som er under søk. linje_2 Obligatorisk. Strengeuttrykket du leter etter. sammenligningstype Valgfri. Definerer typen strengsammenlikninger. Hvis verdien av argumentet sammenligningstype er null, oppstår det en feil. Hvis argumentet sammenligningstype utelatt, sammenligningstype bestemmes av parameter Betydning onsærefrykt. Angi en gyldig LCID-parameter (LocaleID) for å bruke sammenligningsreglene angitt i språkinnstillingene.

    Alternativer

    Argument sammenligningstype bruker følgende parametere:

    Returverdier

    Notater

    Funksjon InStrB brukes med bytedata i en streng. Funksjon InStrB returnerer byteposisjonen, ikke tegnposisjonen, for den første forekomsten av en streng i en annen.

    Eksempler

    Bruke InStr-funksjonen i et uttrykk Hver gang du bruker uttrykk kan du bruke funksjonen InStr. For eksempel, hvis du vil bestemme posisjonen til det første punktet ( . ) i et felt som inneholder en IP-adresse (kalt "IPAddress"), kan du bruke funksjonen InStr for å finne den:

    InStr(1,,"")

    Funksjon InStr ser på hver verdi i "IPAddress"-feltet og returnerer posisjonen til det første punktet. Derfor, hvis verdien av den første oktetten av IP-adressen er 10. , returnerer funksjonen verdien 3.

    Du kan bruke andre funksjoner som bruker resultatet av funksjonen InStr, for å trekke ut verdien av IP-adresseoktetten som kommer foran den første prikken, for eksempel:

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

    I dette eksemplet funksjonen InStr(1,,"") returnerer posisjonen til det første punktet. Som et resultat av å trekke 1, bestemmes antall tegn foran det første punktet, i dette tilfellet - 2. Deretter funksjonen Venstre trekker ut disse tegnene fra venstre side av "IPAddress"-feltet, og returnerer verdien 10.

    Bruker funksjonen InStr i Visual Basic for Applications (VBA)-kode

    MERK. Følgende eksempler illustrerer bruken av Visual Basic for Applications (VBA)-modulen. For mer informasjon om arbeid med VBA, velg Utviklerens referanse i rullegardinlisten ved siden av knappen Søk, og skriv deretter inn ett eller flere nøkkelord i søkefeltet.

    I dette eksemplet er funksjonen InStr brukes til å finne posisjonen til den første forekomsten av en streng i en annen.

    Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" " String å søke i. SearchChar = "P" " Søk etter "P". " En tekstlig sammenligning som starter ved posisjon 4. Returnerer 6. MyPos = Instr( 4, Søkestreng , SøkChar , 1) " En binær sammenligning som starter ved posisjon 1. Returnerer 9. MyPos = Instr( 1, Søkestreng , SøkChar , 0) "Sammenligning er binær som standard" (siste argument er utelatt). MyPos = Instr( Søkestreng , SøkChar ) " Returnerer 9. MyPos = Instr( 1, Søkestreng , "W" ) "Giver 0.

Ofte inneholder linjer i et program unødvendige mellomrom på slutten eller begynnelsen av linjen som må fjernes fordi fremmede ledende eller etterfølgende mellomrom i en linje kan forårsake problemer med programmet.

VBA har tre funksjoner designet for å fjerne ledende og etterfølgende mellomrom fra en streng: LTrim, RTrim, Trim. Husk at disse funksjonene faktisk ikke endrer den opprinnelige strengen, men returnerer snarere en kopi av strengen med de ekstra mellomrommene fjernet.

Bestemme strenglengde

Du trenger vanligvis å vite lengden på en streng når du formaterer meldinger for en bruker eller når du formaterer strengdata som er lagt inn ved en prosedyre i et Excel-regneark eller Word-dokument. VBA bruker funksjonen til disse formålene Len. I listen nedenfor er det to mellomrom mellom parentesen og ordet.



Du bør være forsiktig med strenger med fast lengde. Fordi en streng med fast lengde alltid har samme lengde, returnerer Len-funksjonen alltid den deklarerte lengden på strengen, uavhengig av den faktiske lengden på strengen. For eksempel, hvis strengvariabelen med fast lengde StrokeName, som er 15 tegn lang, faktisk inneholder ordet "sol", så funksjonen Len(StrokeName) vil returnere resultatet 15. I dette tilfellet, for å finne ut den faktiske lengden på strengen (i vårt tilfelle - 6), må du bruke følgende kombinasjon av funksjoner: Len(Trim(StrokeName)).

Sammenligning og søk etter strenger

VBA har to funksjoner som hjelper deg å sammenligne strenger: StrComp, InStr.

Funksjon StrComp

Syntaks


StrComp(String1, String2[, Compare])


String1, String2 - alle to strenguttrykk som må sammenlignes.

Når StrComp kjøres, returneres en av følgende verdier:

  • -1 hvis String1 er mindre enn String2;
  • 0 hvis String1 og String2 er like;
  • 1 hvis String1 er større enn String2.


Listen ovenfor sammenligner to strenger i tekstmodus: "Standardstreng" og "Standardstreng". Sammenligningsresultat = 1, dvs. "Standardstreng" er større enn "Standardstreng".

Eksperimenter med en rekke strenger for bedre å forstå hvordan StrComp-funksjonen fungerer.

Funksjon InStr

InStr-funksjonen lar deg bestemme om en streng inneholder en annen streng.

Syntaks


StrComp(String1, String2[, Compare])


String1, String2 - alle gyldige strenguttrykk. Funksjonen sjekker om String1 er inneholdt i String2.

Sammenlign er et valgfritt argument som kan være en av følgende forhåndsdefinerte konstanter (hvis den utelates, brukes den gjeldende Option Compare-innstillingen):

  • vbBinaryCompare - binær sammenligning av to strenger;
  • vbTextCompare - tekstsammenligning av to strenger;
  • vbDatabaseCompare - brukes kun i Microsoft Access.

Start - et valgfritt argument, er et numerisk uttrykk og spesifiserer plasseringen til tegnet i String1 som kontrollen skal begynne fra.


InStr returnerer et tall som indikerer plasseringen til tegnet i String1 der String2 ble funnet. Hvis InStr ikke finner String2 i String1, returneres 0. Hvis String1 (eller String2) er Null, returnerer funksjonen også Null.



Linjedeling

Noen ganger blir det nødvendig å dele en streng i dens komponentdeler. I VBA løser tre funksjoner dette problemet: Venstre, Høyre, Midt.

Venstre funksjon

Syntaks


Venstre (streng, lengde)


Funksjonen returnerer en kopi av strengen, starter med det første tegnet og inkluderer antall tegn spesifisert av Length. Hvis Length er et tall større enn den faktiske lengden på strengen, returneres hele strenguttrykket.

Riktig funksjon

Syntaks


Høyre (streng, lengde)


String er et hvilket som helst gyldig strenguttrykk.

Lengde - enhver tallverdi.


Funksjonen returnerer en kopi av strengen, starter med det siste tegnet og inkluderer, fra høyre til venstre, antall tegn spesifisert av Length. Hvis Length er et tall større enn den faktiske lengden på strengen, returneres hele strenguttrykket. Høyre-funksjonen kopierer alltid tegn fra slutten av en streng til begynnelsen.

Midt funksjon

Syntaks


Midt (streng, start, [, lengde])


String er et hvilket som helst gyldig strenguttrykk.

Lengde, Start - alle tallverdier.


Midt-funksjonen returnerer en kopi av strengen som starter ved tegnposisjonen i strengen spesifisert av Start-argumentet. Det valgfrie Length-argumentet spesifiserer antall tegn som skal kopieres fra String til Mid. Hvis Start inneholder et større tall enn den faktiske lengden på strengen, returneres en tom streng.



Tegn som ikke kan legges inn fra tastaturet

Det hender ofte at du må skrive inn et tegn som det ikke er noen tast for på tastaturet (for eksempel et copyright-symbol). En annen situasjon er når du trenger å inkludere et VBA-tjenestekarakter i en streng (det vanligste tilfellet er inkludering av doble anførselstegn).

For å inkludere tegn i en streng som ikke kan skrives inn fra tastaturet, eller som har spesiell betydning for VBA, bruk funksjonen Chr.

Syntaks


Chr (Charcode)


Tegnkode - ethvert numerisk uttrykk som er en gyldig kode for tegnsettet som brukes av en datamaskin. Må være et heltall mellom 0 og 255.

Chr-funksjonen tar en enkelttegnskode som et argument og returnerer en streng som inneholder tegnet som tilsvarer den koden. Denne funksjonen brukes i listen ovenfor for å mate en linje når en melding vises på skjermen Chr (13).


Fordi tegnene som brukes til å starte en ny linje er så viktige når du formaterer meldinger og andre strengdata manipulert av VBA-rutiner, er det flere forhåndsdefinerte konstanter for disse tegnene for å unngå behovet for å bruke Chr-funksjonen:

  • vbCr er et vognreturtegn. Tilsvarer Chr(13)
  • vbLf - forskyv tegn med én linje. Tilsvarer Chr(10)
  • vbCrLf - vognretur + offset tegn med én linje. Tilsvarer Chr(13)+ Chr(10)
  • vbTab - tabulatortegn. Chr(9) ekvivalent

For å se listen kode-symbol du må åpne VBA-hjelpesystemet og på forespørsel "karaktersett" Den tilsvarende tabellen vil bli presentert.



Formatering av dataverdier

Svært ofte, av en eller annen grunn, passer ikke dataformatet ved utgangen av et program oss helt. Dette problemet løses av funksjonen Format.

VBA Format-funksjonen er identisk med Format-funksjonen i Excel og bruker de samme dataformateringsplassholderne.

Syntaks


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


Uttrykk – ethvert gyldig uttrykk (påkrevd argument).

Format er et gyldig uttrykk for et navngitt eller brukerdefinert format.

Førstedag i uken er en konstant som spesifiserer den første dagen i uken.

Firstweekofyear - en konstant som definerer den første uken i året.


For å bruke Format-funksjonen må du enten angi et forhåndsdefinert format, eller lage et bilde av et bestemt format, ved å bruke plassholdertegn.


Navngitte formater for bruk med Format-funksjonen

Navngitt format Handling
Generell dato Formaterer dato- og klokkeslettinformasjon til et sekvensielt datonummer ved å bruke dato- og klokkeslettformatinnstillingene for denne datamaskinen.
Lang dato Formaterer kun datodelen til en sekvensiell dato ved å bruke datamaskinens innstillinger for lang datoformat.
Middels dato Formaterer kun datodelen som en sekvensiell dato ved å bruke datamaskinens innstillinger for medium datoformat.
Kort dato Formaterer bare delen som inneholder datoen til en sekvensiell dato, ved å bruke datamaskinens innstillinger for kort datoformat.
Lang tid Formaterer bare tidsdelen til en sekvensiell dato, ved å bruke datamaskinens innstillinger for langtidsformat.
Middels tid Formaterer bare tidsdelen til en sekvensiell dato, ved å bruke datamaskinens innstillinger for medium tidsformat.
Kort tid Formaterer bare tidsdelen til en sekvensiell dato, ved å bruke datamaskinens innstillinger for Korttidsformat.
Generelt nummer Formaterer et tall til en streng uten spesialtegn.
Valuta Formaterer et tall med et valutasymbol, et tusenskilletegn og bare to desimaler.
Fikset Formaterer et tall slik at det alltid er minst ett siffer foran desimaltegnet og minst to siffer etter det.
Standard Formaterer et tall med tusenskilletegn slik at det er minst ett siffer før desimalskilletegnet og minst to siffer etter det.
Prosent Formaterer et tall som en prosentandel ved å multiplisere det med 100 og legge til et prosentsymbol.
Vitenskapelig Formaterer et tall til vanlig eksponentielt format.
Ja Nei Strengen "Ja" returneres hvis det formaterte tallet ikke er null, ellers - "Nei".
Sant/usant Strengen "True" returneres hvis det formaterte tallet ikke er null, ellers - "False".
På av Strengen "På" returneres hvis det formaterte tallet ikke er null, ellers - "Av".

Plassholdere for å lage egendefinerte formater

Plassholdertegn Handling (med tallet 1234.45 som eksempel)
0 Et numerisk tegn som viser et siffer hvis et er i den posisjonen, eller 0 hvis det ikke er det. Du kan bruke 0-symbolet til å vise innledende nuller for heltall og etterfølgende nuller for desimaler: 00000.000 viser 01234.450
# Et numerisk symbol viser et siffer hvis det er et i denne posisjonen, ellers viser det ikke noe. Utfyllingstegnet # tilsvarer 0, bortsett fra at innledende og etterfølgende nuller ikke vises: #####.### viser 1234.45
$ Viser dollartegn: $###,###.00 viser $1 234,45
. Desimal plassholdertegn, viser desimaltegn ved den angitte posisjonen i 0 plassholdertegnstrengen: #.##.## viser 1234.45
% Prosentsymbol, multipliserer verdien med 100 og legger til et prosenttegn ved posisjonen angitt av plassholderne 0:#.#0,00% viser tallet 0,12345 som 12,35% (avrunding forekommer)
, Tusenskilletegn, legger til komma som tusenvis skilletegn i 0 og # plassholderstrenger: ###,###,###.00 viser 1,234,45
E-e- Viser verdien i eksponentielt format med en eksponent kun for negative verdier: #.####E-00 viser 1.23445E03
E+ e+ Viser verdien i eksponentielt format med en eksponent for både negative og positive verdier: #.####E+00 viser 1.23445E+03
/ Skiller dag, måned og år for formatering av datoverdier.
m Angir hvordan måneder skal vises i datoer: m viser 1, mm - 01, mmm - jan, mmmm - januar
d Angir hvordan dager skal vises i datoer: d viser 1, dd - 01, ddd - søn, dddd - søndag
y Viser dagen i året som et tall fra 1 til 366
åå Angir hvordan årstall skal vises i datoer: åå - 66, åååå - 1966
q Viser kvartalet i året som et tall fra 1 til 4
w Viser ukedagen som et tall (1 - søndag)
ww Viser uken i året som et tall fra 1 til 54
: Skiller timer, minutter og sekunder i tidsformatverdier: tt:mm:ss - 01:01:01, t:m:s - 1:1:1
h Angir hvordan timene skal vises: hh - 01, h - 1
m Angir hvordan minutter skal vises: mm - 01, m - 1
s Angir hvordan sekunder skal vises: ss - 01, s - 1
MORGEN KVELD Viser tid i 12-timers format med AM eller PM lagt til
@ En tegnplassholder som viser et mellomrom hvis det ikke er noe samsvarende tegn i den formaterte strengen.
Viser alle tegn med store bokstaver.
> Viser alle tegn med små bokstaver.
Chr

Chr funksjon

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

Funksjon Chr(Ch aracte r) lar deg få et tegn etter verdien av dens ANSI- eller Unicode-numeriske kode

Returverdi

Funksjoner Chr, ChrB, ChrW returnere en verdi av undertypen String av typen Variant som inneholder tegnet som tilsvarer den angitte ANSI- eller Unicode-tegnkoden. Funksjoner Chr$, ChrB$, ChrW$ returner en verdi av strengtype tilsvarende

Merk

Chr Og Chr$ returnere et tegn ved ANSI-koding
ChrB Og ChrB$ komme tilbake enkeltbyte linje
ChrW returnerer et Unicode-tegn, men på ikke-Unicode-systemer er oppførselen lik Chr
Bruk i parameter CharCode verdier større enn 255 genererer kjøretidsfeil 5: Ugyldig prosedyrekall eller argument eller 6: Overløp

Alternativer CharCode Det nødvendige argumentet er en lang verdi som spesifiserer tegnet. Vanligvis funksjonen Chr brukes når du setter inn ikke-utskrivbare tegn i tekststrenger (vognretur, linjeskift, tabulator, etc.). Kodene 0-31 tilsvarer standard ASCII-kontrolltegn. For eksempel, Chr(10) returnerer nylinjetegn Eksempel Dim retval retval = Chr(65) Debug.Print retval " returnerer A Kategori

I avsnittet om spørsmålet People, vennligst forklar i detalj hva funksjonen ord(x) og dens inverse chr(x) betyr i Pascal? gitt av forfatteren Nick Brown det beste svaret er Det er en spesiell tabell med tegn (utvidet ASCII-kode, når hvert tegn har en numerisk verdi, totalt er det 255 verdier i tabellen, det vil si at hvert tegn er tildelt et nummer,
chr(0..254) konverterer et tall (én byte) til tegnet som dette tallet tilhører, for eksempel chr(71) vil resultatet være bokstaven "G", også å trykke på taster på tastaturet produserer sin egen kode, dette er nøyaktig koden når den plasseres i denne operatoren og vil gi resultatet hvilken tast som trykkes, dette er meg for eksempel. Men ORD(x)-operatoren gjør denne prosessen i omvendt rekkefølge.
Vi setter verditegnet og får et tall fra 0 til 254 (én byte)
for eksempel ORD("G") vil gi oss resultatet 71 (i desimalformat)
Det er alt det ser ut til!!!

Svar fra Katyonachik[nybegynner]
Det er enkelt, egentlig)
Ord ("X") - vil returnere koden til tegnet X fra ASKII-tabellen.
Resultatet av den inverse funksjonen vil være et symbol som tilsvarer den angitte koden (som funksjonen er hentet fra) fra samme ASCII-tabell.


Svar fra Juri[guru]
Dette er ikke gjensidige funksjoner!
Ord-funksjonen returnerer ordensverdien til en oppregnet type.
Antallet starter fra null.
For bytetypen vil funksjonen returnere den faktiske verdien - ordenstallet faller sammen med verdien.
For tegntypen vil funksjonen returnere serienummeret til tegnet, som (tallet er tilfeldig) sammenfaller med ASCII-koden.
Chr-funksjonen returnerer tegnet med den gitte ASCII-koden.
Konklusjon: Rett og slett, med hensyn til symbolske verdier, fungerer de virkelig som det motsatte av hverandre...
Derfor kan vi si at ord-funksjonen er invers av chr-funksjonen, men ikke omvendt - chr-funksjonen er ikke invers av ord-funksjonen, siden omfanget av ord-funksjonen ikke er begrenset til å jobbe med symboler!