Hoe tekst en nummer omgekeerd te krijgen via VBA in Microsoft Excel

Anonim

In Excel zijn er momenten waarop we de tekst volledig willen terugdraaien of hun volgorde met VBA-code willen hebben. Er kunnen verschillende vereisten zijn, zoals het extraheren van omgekeerde celinhoud, omgekeerde celvolgorde enzovoort.

In dit artikel zullen we het volgende leren:

  • Hoe krijg ik omgekeerde celinhoud?
  • Hoe krijg je alle woorden in omgekeerde volgorde uit een cel?
  • Hoe de kolomvolgorde om te keren?
  • Hoe krijg je omgekeerde nummers alleen uit tekst?
  • Hoe celinhoud van activecell omkeren?

Hoe krijg ik omgekeerde celinhoud?

In Excel is het vereist om de tekst of getallen in cellen om te keren, b.v. "engels" naar "hsilgne"

Hieronder volgt de momentopname van gegevens vóór uitvoer:

Hieronder volgt de momentopname van de vereiste uitvoer in kolom B:

Om de bovenstaande uitvoer te krijgen, moeten we de onderstaande stappen volgen om de VB-editor te starten

  • Klik op het tabblad Ontwikkelaar
  • Selecteer in de codegroep Visual Basic

  • Kopieer onderstaande code in de standaard module
 Functie CompleteReverse(rCell As Range, Optioneel 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 Volgende i If IsText = False Then CompleteReverse = CLng(StrNewTxt) Else CompleteReverse = StrNewTxt End If End Functie 

  • In cel B1 is de formule
  • =Volledig Omgekeerd(A1,WAAR)

Hoe krijg je alle woorden in omgekeerde volgorde uit een cel?

We zullen een aantal codes hebben om de oplossing te vinden. Om alle woorden in volledige omgekeerde volgorde te krijgen, kopiëren en plakken we de volgende code in de module:

 Functie ReverseOrder1(Rng As Range) Dim Val As Variant, Teller As Integer, R() As Variant Val = Split(Application.WorksheetFunction.Substitute(Rng.Value, " ", ""), ",") ReDim R(LBound (Val) To UBound(Val)) For Counter = LBound(Val) To UBound(Val) R(UBound(Val) - Counter) = Val(Teller) Volgende teller ReverseOrder1 = Join(R, ", ") Eindfunctie 

  • In cel C1 is de formule
  • =Omgekeerde volgorde1(A1)

Laten we eens kijken naar de tweede VBA-code:

 Functie ReverseOrder2(Rng As Range) As String Dim Counter As Long, R() As String, temp As String R = Split(Replace(Rng.Value2, " ", ""), ",") For Counter = LBound(R ) To (UBound(R) - 1) \ 2 temp = R(UBound(R) - Counter) R(UBound(R) - Counter) = R(Teller) R(Teller) = temp Volgende teller ReverseOrder2 = Join(R , ", ") Functie beëindigen 

  • In cel D1 is de formule
  • =Omgekeerde volgorde2(A1)

Hoe de kolomvolgorde om te keren?

Als u de volgorde van een kolomgegevens wilt omkeren, moet u de onderstaande code eens nader bekijken:

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

De bovenstaande code controleert de gegevens in kolom A in blad 1 en keert vervolgens de volgorde om in blad 2. Zie onderstaande afbeelding:

Hoe krijg je omgekeerde nummers alleen uit tekst?

Voorbeeld: "excel (123) tip" is de celinhoud

Uitvoer vereisen: "excel (321) tip"

In Excel kunnen er meerdere manieren zijn om dezelfde uitvoer te krijgen en hetzelfde geldt voor het vinden van een oplossing met VBA UDF's. Voor dit voorbeeld laten we 5 verschillende manieren zien.

Kopieer & plak de volgende codes in de standaardmodule:

 Functie ReverseNumber1(v As Variant) As String Dim iSt As Integer, iEnd As Integer, sNum As String, sTemp As String iSt = InStr(v, "(") iEnd = InStr(v, ")") If iSt = 0 Of iEnd = 0 Dan ReverseNumber1 = v: Functie verlaten sNum = Mid(v, iSt + 1, iEnd - iSt - 1) For i = Len(sNum) To 1 Step -1 sTemp = sTemp & Mid(sNum, i, 1) Volgende i ReverseNumber1 = Left(v, iSt) & sTemp & Mid(v, iEnd, 5 5) End Functie Functie ReverseNumber2(s As String) As String Dim i&, t$, ln& t = s: ln = InStr(s , ")") - 1 For i = InStr(s, "(") + 1 To InStr(s, ")") - 1 Mid(t, i, 1) = Mid(s, ln, 1) ln = ln - 1 Volgende ReverseNumber2 = t Eindfunctie Functie ReverseNumber3(c00) c01 = Split(Split(c00, ")")(0), "(")(1) ReverseNumber3 = Replace(c00, "(" & c01 & " )", "(" & StrReverse(c01) & ")") Eindfunctie Functie ReverseNumber4(c00) ReverseNumber4 = Left(c00, InStr(c00, "(")) & StrReverse(Mid(Left(c00, _ InStr() c00, ")") - 1), InStr(c00, "(") + 1)) & Mid(c00, InStr(c00, ")")) Eindfunctie Functie ReverseNumber5(s As String ) Dim m als object met CreateObject("VBScript.Regexp") .Global = True .Pattern = "(\D*)(\d*)" For Each m In .Execute(s) ReverseNumber5 = ReverseNumber5 & m.submatches( 0) & StrReverse(m.submatches(1)) Volgende Einde Met Set m = Niets Einde Functie 

  • In cel B2 is de formule
  • =OmgekeerdeNummer1(A2)

We kunnen de andere 4 codes testen met de volgende formule:

1. =OmgekeerdeNummer2(A2)

2. =Omgekeerde nummer3(A2)

3. =Omgekeerd nummer4(A2)

4. =OmgekeerdeNummer5(A2)

Alle bovenstaande 5 macrocodes zullen dezelfde output leveren; echter; men kan de code overnemen waar zij zich het prettigst bij voelen.

Hoe celinhoud van activecell omkeren?

Als u wilt dat een macro alleen op activecell wordt uitgevoerd en vervolgens de inhoud omdraait. Deze code wordt niet uitgevoerd in een cel die een formule bevat.

We zullen de volgende code gebruiken:

 Sub Reverse_Cell_Contents() 'deze macro werkt alleen op activecell' --- Commentaar Indien niet ActiveCell.HasFormula Dan sRaw = ActiveCell.Text sNew = "" For j = 1 To Len(sRaw) sNew = Mid(sRaw, j, 1 ) + sNew Next j ActiveCell.Value = sNew End If End Sub 

Als de cursor op cel A1 staat, die "exceltip" bevat, zal de bovenstaande macro deze omzetten in "pitlecxe".

Conclusie: We kunnen zoveel UDF's hebben voor een enkele oplossing in Microsoft Excel. Deze UDF werkt van versie 2003 tot 2013.

Als je onze blogs leuk vond, deel deze dan met je vrienden op Facebook. En je kunt ons ook volgen op Twitter en Facebook.

We horen graag van je, laat ons weten hoe we ons werk kunnen verbeteren, aanvullen of vernieuwen en het voor jou beter kunnen maken. Schrijf ons op e-mailsite