În Excel, există momente în care vrem să inversăm complet textul sau ordinea lor cu codul VBA. Pot exista diverse cerințe, cum ar fi extragerea conținutului de celulă inversă, ordinea inversă a celulei și așa mai departe.
În acest articol, vom învăța următoarele:
- Cum se obține conținutul celular invers?
- Cum să obțineți toate cuvintele în ordine inversă dintr-o celulă?
- Cum se inversează ordinea coloanelor?
- Cum se obțin numere inverse numai din text?
- Cum se inversează conținutul celulei activecell?
Cum se obține conținutul celular invers?
În Excel există cerința de a inversa textul sau numerele din celule, de ex. „Engleză” la „hsilgne”
Urmează instantaneul datelor înainte de ieșire:
Următorul este instantaneul rezultatului necesar în coloana B:
Pentru a obține rezultatul de mai sus, trebuie să urmăm pașii de mai jos pentru a lansa editorul VB
- Faceți clic pe fila Dezvoltator
- Din grupul de coduri, selectați Visual Basic
- Copiați codul de mai jos în modulul standard
Funcția CompleteReverse (rCell As Range, opțional 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) Altfel CompleteReverse = StrNewTxt End If End Function
- În celula B1 formula va fi
- = CompleteReverse (A1, TRUE)
Cum să obțineți toate cuvintele în ordine inversă dintr-o celulă?
Vom avea câteva coduri pentru a găsi soluția. Pentru a obține toate cuvintele în ordine inversă completă, vom copia și lipi următorul cod în modul
Funcția ReverseOrder1 (Rng As Range) Dim Val As Variant, Counter As Inger, 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) Next Counter ReverseOrder1 = Join (R, ",") Funcție finală
- În celula C1 formula va fi
- = ReverseOrder1 (A1)
Să aruncăm o privire la al doilea cod VBA:
Funcția ReverseOrder2 (Rng As Range) As String Dim Counter At Long, R () As String, temp As String R = Split (Înlocuiți (Rng.Value2, "", ""), ",") Pentru Counter = LBound (R ) To (UBound (R) - 1) \ 2 temp = R (UBound (R) - Counter) R (UBound (R) - Counter) = R (Counter) R (Counter) = temp Next Counter ReverseOrder2 = Join (R , ",") Funcție de sfârșit
- În celula D1 formula va fi
- = ReverseOrder2 (A1)
Cum se inversează ordinea coloanelor?
În cazul în care aveți obligația de a inversa ordinea datelor unei coloane, ar trebui să aruncați o privire mai atentă la codul de mai jos:
Sub ReverseColumnOrder () Dim wBase ca foaie de lucru, wResult ca foaie de lucru, i cât mai lung, x ca lung 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 Cu Application.ScreenUpdating = True End Sub
Codul de mai sus va verifica datele din coloana A din foaia 1 și apoi va inversa ordinea din foaia 2. Consultați imaginea de mai jos
Cum se obțin numere inverse numai din text?
Exemplu: „excel (123) tip” este conținutul celulei
Necesită ieșire: „excel (321) tip”
În Excel, pot exista mai multe moduri de a obține același rezultat și același lucru este acela de a găsi soluții cu VBA UDF. Pentru acest exemplu, vom arăta 5 moduri diferite.
Copiați și lipiți următoarele coduri în modulul standard:
Funcția ReverseNumber1 (v Ca Variant) Ca Șir Dim ca Întreg, iEnd Ca Întreg, sNum Ca Șir, sTemp Ca Șir iSt = InStr (v, "(") iEnd = InStr (v, ")") Dacă iSt = 0 Sau iEnd = 0 Apoi ReverseNumber1 = v: Exit Function sNum = Mid (v, iSt + 1, iEnd - iSt - 1) Pentru i = Len (sNum) To 1 Step -1 sTemp = sTemp & Mid (sNum, i, 1) Următorul i ReverseNumber1 = Stânga (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Funcția de sfârșit Funcția ReverseNumber2 (s Ca șir) Ca șir Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Pentru i = InStr (s, "(") + 1 Către InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Următorul ReverseNumber2 = t Funcția de sfârșit Funcția ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Înlocuiți (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Funcție finală Funcție ReverseNumber4 (c00) ReverseNumber4 = Left (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Funcție finală Funcție Număr invers 5 (s Ca șir ) Dim Dim ca obiect cu CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D *) (\ d *)" Pentru fiecare m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Next End With Set m = Nothing End Function
- În celula B2, formula va fi
- = Număr invers1 (A2)
Putem testa celelalte 4 coduri cu următoarea formulă:
1. = Număr invers2 (A2)
2. = Număr invers3 (A2)
3. = Număr invers4 (A2)
4. = Număr invers5 (A2)
Toate cele 5 coduri macro de mai sus vor oferi aceeași ieșire; in orice caz; se poate adopta codul cu care sunt cel mai confortabil.
Cum se inversează conținutul celulei activecell?
În cazul în care doriți ca o macro să ruleze numai pe activecell și apoi să inversați conținutul. Acest cod nu va rula pe celula care conține formulă.
Vom folosi următorul cod:
Sub Reverse_Cell_Contents () 'această macro va rula numai pe activecell' --- Comentariu dacă nu este ActiveCell.HasFormula Atunci sRaw = ActiveCell.Text sNew = "" Pentru j = 1 To Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNew Next j ActiveCell.Value = sNew End If End Sub
Dacă cursorul se află pe celula A1, care conține „exceltip”, atunci macro-ul de mai sus îl va converti în „pitlecxe”.
Concluzie: Putem avea cât mai multe UDF-uri pentru o singură soluție în Microsoft Excel. Acest UDF va funcționa din versiunea 2003 până în 2013.
Dacă ți-au plăcut blogurile noastre, împărtășește-le prietenilor tăi de pe Facebook. Și, de asemenea, ne puteți urmări pe Twitter și Facebook.
Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți, completa sau inova munca noastră și să o îmbunătățim. Scrie-ne la site de e-mail