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