Jak uzyskać tekst i numer w odwrotnej kolejności przez VBA w programie Microsoft Excel?

Anonim

W programie Excel są chwile, kiedy chcemy całkowicie odwrócić tekst lub ich kolejność za pomocą kodu VBA. Mogą istnieć różne wymagania, takie jak wyodrębnianie zawartości odwróconej komórki, odwrotna kolejność komórek i tak dalej.

W tym artykule nauczymy się:

  • Jak uzyskać zawartość odwróconej komórki?
  • Jak uzyskać wszystkie słowa w odwrotnej kolejności z komórki?
  • Jak odwrócić kolejność kolumn?
  • Jak uzyskać numery odwrotne tylko z tekstu?
  • Jak odwrócić zawartość komórek activecell?

Jak uzyskać zawartość odwróconej komórki?

W Excelu istnieje wymóg odwrócenia tekstu lub liczb w komórkach np. „angielski” na „hsilgne”

Poniżej znajduje się migawka danych przed wyjściem:

Poniżej znajduje się migawka wymaganych danych wyjściowych w kolumnie B:

Aby uzyskać powyższe dane wyjściowe, musimy wykonać poniższe kroki, aby uruchomić edytor VB

  • Kliknij kartę Deweloper
  • Z grupy Kod wybierz Visual Basic

  • Skopiuj poniższy kod w standardowym module
 Function CompleteReverse(rCell As Range, opcjonalny 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 Next i If IsText = False Then CompleteReverse = CLng(StrNewTxt) Else CompleteReverse = StrNewTxt End If End Function 

  • W komórce B1 formuła będzie
  • =Całkowite odwrócenie(A1,PRAWDA)

Jak pobrać wszystkie słowa w odwrotnej kolejności z komórki?

Będziemy mieli kilka kodów, aby znaleźć rozwiązanie. Aby uzyskać wszystkie słowa w całkowicie odwrotnej kolejności, skopiujemy i wkleimy następujący kod w module

 Function 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) To UBound(Val)) For Counter = LBound(Val) To UBound(Val) R(UBound(Val) - Counter) = Val(Counter) Następny licznik ReverseOrder1 = Join(R, ", ") End Function 

  • W komórce C1 formuła będzie
  • =ReverseOrder1(A1)

Rzućmy okiem na drugi kod VBA:

 Funkcja 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) - Licznik) R(UBound(R) - Licznik) = R(Licznik) R(Licznik) = temp Następny licznik ReverseOrder2 = Join(R , ", ") Koniec funkcji 

  • W komórce D1 formuła będzie
  • =ReverseOrder2(A1)

Jak odwrócić kolejność kolumn?

Jeśli potrzebujesz odwrócić kolejność danych w kolumnie, powinieneś bliżej przyjrzeć się poniższemu kodowi:

 Sub ReverseColumnOrder() Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long Set wBase = Sheets("Arkusz1") Set wResult = Sheets("Arkusz2") 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 Z Application.ScreenUpdating = True End Sub 

Powyższy kod sprawdzi dane w kolumnie A w arkuszu 1, a następnie odwróci kolejność w arkuszu 2. Patrz poniższy obraz

Jak uzyskać numery odwrotne tylko z tekstu?

Przykład: „wskazówka Excel (123)” to zawartość komórki

Wymagaj danych wyjściowych: „wskazówka Excel (321)”

W programie Excel może istnieć wiele sposobów na uzyskanie tego samego wyniku i to samo dotyczy znalezienia rozwiązania za pomocą VBA UDF. W tym przykładzie pokażemy 5 różnych sposobów.

Skopiuj i wklej następujące kody w standardowym module:

 Function 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 Lub iEnd = 0 Następnie ReverseNum1 = v: Wyjście z funkcji sNum = Mid(v, iSt + 1, iEnd - iSt - 1) Dla i = Len(sNum) To 1 Krok -1 sTemp = sTemp i Mid(sNum, i, 1) Next i ReverseNumber1 = Left(v, iSt) & sTemp & Mid(v, iEnd, 5 5) Funkcja End Function 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 Następna ReverseNumber2 = t Funkcja End Function ReverseNumber3(c00) c01 = Split(Split(c00, ")")(0), "(")(1) ReverseNumber3 = Replace(c00, "(" & c01 & " )", "(" & StrReverse(c01) & ")") Funkcja End Function ReverseNumber4(c00) ReverseNumber4 = Left(c00, InStr(c00, "(")) & StrReverse(Mid(Left(c00, _ InStr() c00, ")") - 1), InStr(c00, "(") + 1)) & Mid(c00, InStr(c00, ")")) Funkcja końca funkcji ReverseNumber5(s As String ) Dim m As Object With CreateObject("VBScript.Regexp") .Global = True .Pattern = "(\D*)(\d*)" Dla każdego m In .Execute(s) ReverseNumber5 = ReverseNumber5 & m.submatches( 0) & StrReverse(m.submatches(1)) Następny koniec z zestawem m = Nic Koniec funkcji 

  • W komórce B2 formuła będzie
  • =Odwrócona liczba1(A2)

Pozostałe 4 kody możemy przetestować za pomocą następującego wzoru:

1. =NumerOdwrotny2(A2)

2. =Odwrócona liczba3(A2)

3. =Odwrócona liczba4(A2)

4. =Odwrócona liczba5(A2)

Wszystkie powyższe 5 kodów makr zapewni takie same dane wyjściowe; Jednakże; można przyjąć kod, z którym jest im najwygodniej.

Jak odwrócić zawartość komórek activecell?

W przypadku, gdy chcesz, aby makro działało tylko na activecell, a następnie odwróć zawartość. Ten kod nie będzie działał w komórce zawierającej formułę.

Użyjemy następującego kodu:

 Sub Reverse_Cell_Contents() 'to makro będzie działać tylko na activecell' --- Komentarz Jeśli nie ActiveCell.HasFormula Then 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 

Jeśli kursor znajduje się na komórce A1, która zawiera „exceltip”, powyższe makro przekonwertuje ją na „pitlecxe”.

Wniosek: Możemy mieć dowolną liczbę UDF dla jednego rozwiązania w programie Microsoft Excel. Ten UDF będzie działał od wersji 2003 do 2013.

Jeśli podobały Ci się nasze blogi, podziel się nimi ze znajomymi na Facebooku. A także możesz śledzić nas na Twitterze i Facebooku.

Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy ulepszyć, uzupełnić lub unowocześnić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na witryna e-mail