Sådan får du tekst og tal i omvendt gennem VBA i Microsoft Excel

Anonim

I excel er der tidspunkter, hvor vi ønsker at få teksten vendt fuldstændigt eller deres rækkefølge med VBA -kode. Der kan være forskellige krav, f.eks. Ekstraktion af omvendt celleindhold, omvendt celleordre og så videre.

I denne artikel lærer vi følgende:

  • Hvordan får man omvendt celleindhold?
  • Hvordan får man alle ord i omvendt rækkefølge fra en celle?
  • Hvordan vender man kolonne rækkefølge?
  • Hvordan får man kun omvendte tal fra tekst?
  • Hvordan vendes celleindholdet i activecell?

Hvordan får man omvendt celleindhold?

I Excel er der krav om at vende teksten eller tallene i celler f.eks. “Engelsk” til “hsilgne”

Følgende er snapshot af data før output:

Følgende er snapshot af krav om output i kolonne B:

For at få ovenstående output skal vi følge nedenstående trin for at starte VB -editor

  • Klik på fanen Udvikler
  • Vælg Visual Basic i kodegruppen

  • Kopier nedenstående kode i standardmodulet
 Funktion CompleteReverse (rCell As Range, Valgfri IsText As Boolean) Dim i As Integer Dim StrNewTxt As String Dim strOld As String strOld = Trim (rCell) For i = 1 To Len (strOld) StrNewTxt = Mid (strOld, i, 1) & StrNewTxt Næste i If IsText = False Then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End -funktion 

  • I celle B1 vil formlen være
  • = CompleteReverse (A1, TRUE)

Hvordan får man alle ordene i omvendt rækkefølge fra en celle?

Vi har et par koder for at finde løsningen. For at få alle ord i fuldstændig omvendt rækkefølge, kopierer og indsætter vi følgende kode i modulet

 Funktion ReverseOrder1 (Rng As Range) Dim Val As Variant, Counter As Integer, R () As Variant Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) Til UBound (Val)) For Counter = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Næste Counter ReverseOrder1 = Join (R, ",") Afslut funktion 

  • I celle C1 vil formlen være
  • = ReverseOrder1 (A1)

Lad os se på den anden VBA -kode:

 Funktion ReverseOrder2 (Rng som område) Som streng Dim tæller så længe, ​​R () Som streng, temp som streng R = Split (Erstat (Rng.Value2, "", ""), ",") For Counter = LBound (R ) Til (UBound (R) - 1) \ 2 temp = R (UBound (R) - Counter) R (UBound (R) - Counter) = R (Counter) R (Counter) = temp Næste Counter ReverseOrder2 = Join (R) , ",") Afslut funktion 

  • I celle D1 vil formlen være
  • = ReverseOrder2 (A1)

Hvordan vender man kolonne rækkefølge?

Hvis du har et krav om at vende rækkefølgen af ​​en kolonnedata, bør du se nærmere på nedenstående kode:

 Sub ReverseColumnOrder () Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long Set wBase = Sheets ("Sheet1") Set wResult = Sheets ("Sheet2") Application.ScreenUpdating = False With wBase For i = .Range ("A1"). CurrentRegion.Rows.Count til 1 trin -1 x = x + 1 .Range ("A1"). CurrentRegion.Rows (i) .Copy wResult.Range ("A" & x) Næste i slut Med Application.ScreenUpdating = True End Sub 

Ovenstående kode vil kontrollere dataene i kolonne A i ark1 og derefter vende rækkefølgen i ark 2. Se billedet herunder

Hvordan får man kun omvendte tal fra tekst?

Eksempel: "excel (123) tip" er celleindholdet

Kræv output: "excel (321) tip"

I excel kan der være flere måder at få det samme output på, og det samme gælder for at finde en løsning med VBA UDF’er. I dette eksempel viser vi 5 forskellige måder.

Kopier og indsæt følgende koder i standardmodul:

 Funktion ReverseNumber1 (v som variant) som streng Dim iSt som heltal, iEnd som heltal, sNum som streng, sTemp som streng iSt = InStr (v, "(") iEnd = InStr (v, ")") Hvis iSt = 0 Eller iEnd = 0 Derefter ReverseNumber1 = v: Afslut funktion sNum = Mid (v, iSt + 1, iEnd - iSt - 1) For i = Len (sNum) Til 1 Trin -1 sTemp = sTemp & Mid (sNum, i, 1) Næste i ReverseNumber1 = Venstre (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Afslut funktion Funktion ReverseNumber2 (s som streng) Som streng Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 For i = InStr (s, "(") + 1 Til InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Næste ReverseNumber2 = t Afslut funktion Funktion ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Erstat (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Afslut funktion Funktion ReverseNumber4 (c00) ReverseNumber4 = Venstre (c00, InStr (c00," (")) & StrReverse (Midt (Venstre (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Afslut funktion Funktion ReverseNumber5 (s som streng ) Dim m som objekt med CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" For hver m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Næste ende med sæt m = Intet slutfunktion 

  • I celle B2 vil formlen være
  • = ReverseNumber1 (A2)

Vi kan teste de andre 4 koder med følgende formel:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Alle de ovennævnte 5 makrokoder giver det samme output; imidlertid; man kan adoptere den kode, de er mest trygge ved.

Hvordan vendes celleindholdet i activecell?

Hvis du kun vil have en makro til at køre på activecell og derefter vende indholdet tilbage. Denne kode kører ikke på celle, der indeholder formel.

Vi vil bruge følgende kode:

 Sub Reverse_Cell_Contents () 'denne makro kører kun på activecell' --- Comment If Not ActiveCell.HasFormula Then sRaw = ActiveCell.Text sNew = "" For j = 1 To Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNy Næste j ActiveCell.Value = sNy End If End Sub 

Hvis markøren er på celle A1, som indeholder "exceltip", vil ovenstående makro konvertere den til "pitlecxe".

Konklusion: Vi kan have så mange UDF'er til en enkelt løsning i Microsoft Excel. Denne UDF fungerer fra 2003 version til 2013.

Hvis du kunne lide vores blogs, kan du dele den med dine venner på Facebook. Og også du kan følge os på Twitter og Facebook.

Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre, supplere eller innovere vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -websted