Como llegar texto y número en marcha atrás a través de VBA en Microsoft Excel
En Excel, hay ocasiones en las que queremos invertir el texto por completo o su orden con código VBA. Puede haber varios requisitos, como extraer contenido de celda inversa, orden de celda inverso, etc.
En este artículo, aprenderemos lo siguiente:
-
¿Cómo obtener contenido de celda inversa?
-
¿Cómo obtener todas las palabras en orden inverso desde una celda?
-
¿Cómo invertir el orden de las columnas?
-
¿Cómo obtener números inversos solo a partir del texto?
-
¿Cómo revertir el contenido celular de activecell?
¿Cómo obtener contenido de celda inversa?
En Excel, es necesario invertir el texto o los números en las celdas, p. Ej. «English» a «hsilgne» A continuación se muestra la instantánea de los datos antes de la salida:
A continuación se muestra la instantánea de la salida requerida en la columna B:
Para obtener el resultado anterior, debemos seguir los pasos a continuación para iniciar el editor de VB. Haga clic en la pestaña Desarrollador. Desde el grupo Código, seleccione Visual Basic
-
Copie el siguiente código en el módulo estándar
Function 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
===
En la celda B1, la fórmula será = CompleteReverse (A1, TRUE)
¿Cómo obtener todas las palabras en orden inverso desde una celda?
Tendremos un par de códigos para encontrar la solución. Para obtener todas las palabras en orden inverso completo, copiaremos y pegaremos el siguiente código en el módulo
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) Next Counter ReverseOrder1 = Join(R, ", ") End Function
En la celda C1, la fórmula será = ReverseOrder1 (A1)
Echemos un vistazo al segundo código de VBA:
Function 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(Counter) R(Counter) = temp Next Counter ReverseOrder2 = Join(R, ", ") End Function
En la celda D1, la fórmula será = ReverseOrder2 (A1)
¿Cómo invertir el orden de las columnas?
En caso de que tenga el requisito de invertir el orden de los datos de una columna, debería echar un vistazo más de cerca al siguiente código:
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 With Application.ScreenUpdating = True End Sub
El código anterior verificará los datos en la columna A en la hoja 1 y luego invertirá el orden en la hoja 2. Consulte la imagen de abajo
===
¿Cómo obtener números inversos solo a partir del texto?
Ejemplo: “consejo de excel (123)” es el contenido de la celda Salida requerida: “consejo de excel (321)”
En Excel, puede haber varias formas de obtener el mismo resultado y lo mismo se aplica a la búsqueda de una solución con VBA UDF. Para este ejemplo, mostraremos 5 formas diferentes.
Copie y pegue los siguientes códigos en el módulo estándar:
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 Or iEnd = 0 Then ReverseNumber1 = v: Exit Function sNum = Mid(v, iSt + 1, iEnd - iSt - 1) For i = Len(sNum) To 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 For i = InStr(s, "(") + 1 To InStr(s, ")") - 1 Mid(t, i, 1) = Mid(s, ln, 1) ln = ln - 1 Next ReverseNumber2 = t End Function Function ReverseNumber3(c00) c01 = Split(Split(c00, ")")(0), "(")(1) ReverseNumber3 = Replace(c00, "(" & c01 & ")", "(" & StrReverse(c01) & ")") End Function Function 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
En la celda B2, la fórmula será = ReverseNumber1 (A2)
Podemos probar los otros 4 códigos con la siguiente fórmula:
{vacío} 1. = ReverseNumber2 (A2)
{vacío} 2. = ReverseNumber3 (A2)
{vacío} 3. = ReverseNumber4 (A2)
{vacío} 4. = ReverseNumber5 (A2)
Todos los 5 códigos macro anteriores proporcionarán la misma salida; sin embargo; uno puede adoptar el código con el que se sienta más cómodo.
¿Cómo revertir el contenido de celda de activecell?
En caso de que desee que una macro se ejecute solo en activecell y luego invierta el contenido. Este código no se ejecutará en la celda que contiene la fórmula.
Usaremos el siguiente código:
Sub Reverse_Cell_Contents() 'this macro will run only on 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
Si el cursor está en la celda A1, que contiene «exceltip», la macro anterior lo convertirá en «pitlecxe».
Conclusión: Podemos tener tantas UDF para una sola solución en Microsoft Excel. Esta UDF funcionará desde la versión 2003 hasta 2013.
Si te gustaron nuestros blogs, compártelo con tus amigos en Facebook. Y también puedes seguirnos en Twitter y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar, complementar o innovar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]