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:

img1

A continuación se muestra la instantánea de la salida requerida en la columna B:

img2

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

img3

  • 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

img4

===

En la celda B1, la fórmula será = CompleteReverse (A1, TRUE)

img5

¿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

img6

En la celda C1, la fórmula será = ReverseOrder1 (A1)

img7

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

img8

En la celda D1, la fórmula será = ReverseOrder2 (A1)

img9

¿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

img10

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

Img11

Img12

===

¿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)”

Img13

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

Img14

Img15

En la celda B2, la fórmula será = ReverseNumber1 (A2)

Img16

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

Img17

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.

image 29

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]