Come ottenere testo e numero al contrario tramite VBA in Microsoft Excel

Anonim

In Excel, ci sono momenti in cui vogliamo invertire completamente il testo o il loro ordine con il codice VBA. Possono esserci vari requisiti, come l'estrazione del contenuto della cella inversa, l'ordine inverso delle celle e così via.

In questo articolo impareremo quanto segue:

  • Come ottenere il contenuto della cella inversa?
  • Come ottenere tutte le parole in ordine inverso da una cella?
  • Come invertire l'ordine delle colonne?
  • Come ottenere numeri inversi solo dal testo?
  • Come invertire il contenuto delle celle di activecell?

Come ottenere il contenuto della cella inversa?

In Excel è necessario invertire il testo o i numeri nelle celle, ad es. da "inglese" a "hsilgne"

Di seguito è riportata l'istantanea dei dati prima dell'output:

Di seguito è riportato lo snapshot dell'output di richiesta nella colonna B:

Per ottenere l'output sopra, dobbiamo seguire i passaggi seguenti per avviare l'editor VB

  • Fare clic sulla scheda Sviluppatore
  • Dal gruppo Codice, seleziona Visual Basic

  • Copia il codice sottostante nel modulo standard
 Funzione CompleteReverse(rCell As Range, Optional 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 

  • Nella cella B1 la formula sarà
  • =Inverti completo(A1,VERO)

Come ottenere tutte le parole in ordine inverso da una cella?

Avremo un paio di codici per trovare la soluzione. Per ottenere tutte le parole in ordine inverso, copieremo e incolleremo il seguente codice nel modulo

 Funzione 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) Next Counter ReverseOrder1 = Join(R, ", ") End Function 

  • Nella cella C1 la formula sarà
  • =Ordine inverso1(A1)

Diamo un'occhiata al secondo codice VBA:

 Funzione 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) - Contatore) R(UBound(R) - Contatore) = R(Contatore) R(Contatore) = temp Next Counter Reverse Order2 = Join(R , ", ") Fine funzione 

  • Nella cella D1 la formula sarà
  • =Ordine inverso2(A1)

Come invertire l'ordine delle colonne?

Nel caso in cui sia necessario invertire l'ordine dei dati di una colonna, è necessario dare un'occhiata più da vicino al codice seguente:

 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).Copia wResult.Range("A" & x) Next i End Con Application.ScreenUpdating = True End Sub 

Il codice sopra controllerà i dati nella colonna A nel foglio1 e quindi invertirà l'ordine nel foglio 2. Fare riferimento all'immagine sotto

Come ottenere numeri inversi solo dal testo?

Esempio: "excel (123) tip" è il contenuto della cella

Richiedi output: "excel (321) tip"

In Excel, ci possono essere diversi modi per ottenere lo stesso output e lo stesso vale per trovare una soluzione con VBA UDF. Per questo esempio, mostreremo 5 modi diversi.

Copia e incolla i seguenti codici nel modulo standard:

 Funzione 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 Or iEnd = 0 Quindi ReverseNumber1 = v: Esci dalla funzione sNum = Mid(v, iSt + 1, iEnd - iSt - 1) Per i = Len(sNum) a 1 Step -1 sTemp = sTemp & Mid(sNum, i, 1) Next i ReverseNumber1 = Left(v, iSt) & sTemp & Mid(v, iEnd, 5 5) End Function Function ReverseNumber2(s As String) As String Dim i&, t$, ln& t = s: ln = InStr(s , ")") - 1 Per i = InStr(s, "(") + 1 Per InStr(s, ")") - 1 Mid(t, i, 1) = Mid(s, ln, 1) ln = ln - 1 Next ReverseNumber2 = t Fine Funzione Funzione ReverseNumber3(c00) c01 = Split(Split(c00, ")")(0), "(")(1) ReverseNumber3 = Replace(c00, "(" & c01 & " )", "(" & StrReverse(c01) & ")") End Function Funzione ReverseNumber4(c00) ReverseNumber4 = Left(c00, InStr(c00, "(")) & StrReverse(Mid(Left(c00, _ InStr( c00, ")") - 1), InStr(c00, "(") + 1)) & Mid(c00, InStr(c00, ")")) End Function Function ReverseNumber5(s As String ) Dim m As Object With CreateObject("VBScript.Regexp") .Global = True .Pattern = "(\D*)(\d*)" For Each m In .Execute(s) ReverseNumber5 = ReverseNumber5 & m.submatches( 0) & StrReverse(m.submatches(1)) Next End With Set m = Nothing End Function 

  • Nella cella B2, la formula sarà
  • =NumeroInverso1(A2)

Possiamo testare gli altri 4 codici con la seguente formula:

1. =NumeroInverso2(A2)

2. =NumeroInverso3(A2)

3. =Numero inverso4(A2)

4. =NumeroInverso5(A2)

Tutti i 5 codici macro precedenti forniranno lo stesso output; però; si può adottare il codice con cui si trova più a proprio agio.

Come invertire il contenuto delle celle di activecell?

Nel caso in cui desideri che una macro venga eseguita solo su activecell e quindi inverti il ​​contenuto. Questo codice non verrà eseguito sulla cella che contiene la formula.

Useremo il seguente codice:

 Sub Reverse_Cell_Contents() 'questa macro verrà eseguita solo su activecell' --- Comment If Not 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 

Se il cursore si trova sulla cella A1, che contiene "exceltip", la macro sopra lo convertirà in "pitlecxe".

Conclusione: Possiamo avere tante UDF per una singola soluzione in Microsoft Excel. Questa UDF funzionerà dalla versione 2003 al 2013.

Se ti è piaciuto il nostro blog, condividilo con i tuoi amici su Facebook. E puoi anche seguirci su Twitter e Facebook.

Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare, completare o innovare il nostro lavoro e renderlo migliore per te. Scrivici a sito di posta elettronica