Så här får du text och nummer i omvänt genom VBA i Microsoft Excel

Anonim

I excel finns det tillfällen då vi vill få texten helt omvänd eller deras ordning med VBA -kod. Det kan finnas olika krav, som att extrahera omvänd cellinnehåll, omvänd cellordning och så vidare.

I den här artikeln lär vi oss följande:

  • Hur får jag omvänd cellinnehåll?
  • Hur får jag alla ord i omvänd ordning från en cell?
  • Hur vänder man kolumnordningen?
  • Hur får man bara omvända tal från text?
  • Hur vänder man cellinnehållet i activecell?

Hur får jag omvänd cellinnehåll?

I Excel finns det krav på att vända texten eller siffrorna i celler, t.ex. “Engelska” till “hsilgne”

Följande är ögonblicksbilden av data före utmatning:

Följande är ögonblicksbilden av kräver utdata i kolumn B:

För att få ovanstående utdata måste vi följa stegen nedan för att starta VB -editor

  • Klicka på fliken Utvecklare
  • Välj Visual Basic i kodgruppen

  • Kopiera koden nedan i standardmodulen
 Funktion CompleteReverse (rCell As Range, Valfri 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ästa i If IsText = False Then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End -funktion 

  • I cell B1 kommer formeln att vara
  • = CompleteReverse (A1, TRUE)

Hur får jag alla ord i omvänd ordning från en cell?

Vi kommer att ha några koder för att hitta lösningen. För att få alla ord i fullständig omvänd ordning kopierar vi och klistrar in följande kod i modulen

 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) Till UBound (Val)) För Counter = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Next Counter ReverseOrder1 = Join (R, ",") End Function 

  • I cell C1 kommer formeln att vara
  • = ReverseOrder1 (A1)

Låt oss ta en titt på den andra VBA -koden:

 Funktion ReverseOrder2 (Rng As Range) Som String Dim Counter As Long, R () As String, temp As String R = Split (Replace (Rng.Value2, "", ""), ",") For Counter = LBound (R ) Till (UBound (R) - 1) \ 2 temp = R (UBound (R) - Counter) R (UBound (R) - Counter) = R (Counter) R (Counter) = temp Next Counter ReverseOrder2 = Join (R) , ",") Slutfunktion 

  • I cell D1 kommer formeln att vara
  • = ReverseOrder2 (A1)

Hur vänder man kolumnordningen?

Om du har ett krav att vända ordningen på en kolumndata bör du titta närmare på koden nedan:

 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 till 1 steg -1 x = x + 1 .Range ("A1"). CurrentRegion.Rows (i) .Copy wResult.Range ("A" & x) Next i End Med Application.ScreenUpdating = True End Sub 

Ovanstående kod kommer att kontrollera data i kolumn A i blad1 och sedan vända ordningen i blad 2. Se bilden nedan

Hur får man bara omvända tal från text?

Exempel: "excel (123) tip" är cellinnehållet

Kräver utdata: "excel (321) tips"

I excel kan det finnas flera sätt att få samma utmatning och detsamma gäller att hitta lösning med VBA UDF: er. I det här exemplet kommer vi att visa fem olika sätt.

Kopiera och klistra in följande koder i standardmodulen:

 Funktion ReverseNumber1 (v som variant) Som sträng Dim iSt Som heltal, iEnd som heltal, sNum som sträng, sTemp som sträng iSt = InStr (v, "(") iEnd = InStr (v, ")") Om iSt = 0 Eller iEnd = 0 Sedan ReverseNumber1 = v: Avsluta funktion sNum = Mid (v, iSt + 1, iEnd - iSt - 1) För i = Len (sNum) Till 1 Steg -1 sTemp = sTemp & Mid (sNum, i, 1) Nästa i ReverseNumber1 = Vänster (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Slutfunktion Funktion ReverseNumber2 (s som sträng) Som sträng Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 För i = InStr (s, "(") + 1 Till InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Nästa ReverseNumber2 = t Avsluta funktion Funktion ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Ersätt (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Slutfunktion Funktion ReverseNumber4 (c00) ReverseNumber4 = Vänster (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Slutfunktion Funktion ReverseNumber5 (s som sträng ) Dim m som objekt med CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" För varje m i .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Nästa slut med uppsättning m = ingenting slut funktion 

  • I cell B2 kommer formeln att vara
  • = ReverseNumber1 (A2)

Vi kan testa de andra 4 koder med följande formel:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Alla ovanstående 5 makrokoder ger samma utgång; dock; man kan anta koden de är mest bekväma med.

Hur vänder man cellinnehållet i activecell?

Om du vill att ett makro bara ska köras på activecell och sedan vända innehållet. Denna kod körs inte på cellen som innehåller formel.

Vi kommer att använda följande kod:

 Sub Reverse_Cell_Contents () 'det här makrot körs endast på activecell' --- Kommentar Om inte ActiveCell.HasFormula Då sRaw = ActiveCell.Text sNew = "" För j = 1 Till Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNyhet Nästa j ActiveCell.Value = sNy End If End Sub 

Om markören finns i cell A1, som innehåller "exceltip", kommer makrot ovan att omvandla den till "pitlecxe".

Slutsats: Vi kan ha lika många UDF: er för en enda lösning i Microsoft Excel. Denna UDF fungerar från 2003 till 2013.

Om du gillade våra bloggar, dela den med dina vänner på Facebook. Och du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra, komplettera eller förnya vårt arbete och göra det bättre för dig. Skriv till oss på e -postsajt