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, existe el requisito de invertir el texto o los números en las celdas, p. Ej. "Inglés" 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 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
Función CompleteReverse (rCell como rango, Opcional IsText como booleano) Dim i como entero Dim StrNewTxt como cadena Dim strOld como cadena strOld = Trim (rCell) For i = 1 To Len (strOld) StrNewTxt = Mid (strOld, i, 1) & StrNewTxt Siguiente i If IsText = False Then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End Función
- 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
Función 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) - Contador) = Val (Contador) Siguiente contador ReverseOrder1 = Unir (R, ",") Función de fin
- En la celda C1 la fórmula será
- = ReverseOrder1 (A1)
Echemos un vistazo al segundo código de VBA:
Función ReverseOrder2 (Rng como rango) Como cadena Dim Contador tan largo, R () Como cadena, temp Como cadena R = Dividir (Reemplazar (Rng.Value2, "", ""), ",") Para el contador = LBound (R ) A (UBound (R) - 1) \ 2 temp = R (UBound (R) - Contador) R (UBound (R) - Contador) = R (Contador) R (Contador) = temp Siguiente contador ReverseOrder2 = Unir (R , ",") Finalizar función
- 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, debe observar más de cerca el siguiente código:
Sub ReverseColumnOrder () Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long Establecer wBase = Sheets ("Sheet1") Establecer wResult = Sheets ("Sheet2") Application.ScreenUpdating = False Con 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) Siguiente i Fin Con 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: "excel (123) tip" es el contenido de la celda.
Salida requerida: "excel (321) tip"
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:
Función ReverseNumber1 (v como variante) como cadena Dim iSt como entero, iEnd como entero, sNum como cadena, sTemp como cadena iSt = InStr (v, "(") iEnd = InStr (v, ")") Si iSt = 0 O iEnd = 0 Entonces ReverseNumber1 = v: Función de salida sNum = Mid (v, iSt + 1, iEnd - iSt - 1) For i = Len (sNum) To 1 Step -1 sTemp = sTemp & Mid (sNum, i, 1) Siguiente i ReverseNumber1 = Left (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Función de fin Función ReverseNumber2 (s Como cadena) Como cadena Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Para i = InStr (s, "(") + 1 To InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Siguiente ReverseNumber2 = t Función de fin Función ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Reemplazar (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Función de fin Función ReverseNumber4 (c00) ReverseNumber4 = Left (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Función de fin Función ReverseNumber5 (s Como cadena ) Atenuar m como objeto con CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D *) (\ d *)" Para cada m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Próximo fin con conjunto m = Nada Fin Función
- En la celda B2, la fórmula será
- = ReverseNumber1 (A2)
Podemos probar los otros 4 códigos con la siguiente fórmula:
1. = ReverseNumber2 (A2)
2. = ReverseNumber3 (A2)
3. = ReverseNumber4 (A2)
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 celular de activecell?
En caso de que desee que una macro se ejecute solo en activecell y luego revertir 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 () 'esta macro se ejecutará solo en activecell' --- Comentar si no es 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íbenos a sitio de correo electrónico