Como obter texto e número em reverso por meio do VBA no Microsoft Excel

Anonim

No Excel, há momentos em que queremos que o texto seja totalmente invertido ou sua ordem com o código VBA. Pode haver vários requisitos, como extração de conteúdo reverso da célula, ordem reversa das células e assim por diante.

Neste artigo, aprenderemos o seguinte:

  • Como obter o conteúdo reverso da célula?
  • Como obter todas as palavras em ordem reversa de uma célula?
  • Como inverter a ordem das colunas?
  • Como obter números reversos apenas de texto?
  • Como reverter o conteúdo da célula da célula ativa?

Como obter o conteúdo reverso da célula?

No Excel, é necessário inverter o texto ou os números nas células, por exemplo, “Inglês” para “hsilgne”

A seguir está o instantâneo dos dados antes da saída:

A seguir está o instantâneo da saída necessária na coluna B:

Para obter a saída acima, precisamos seguir as etapas abaixo para iniciar o editor VB

  • Clique na guia Desenvolvedor
  • No grupo Código, selecione Visual Basic

  • Copie o código abaixo no módulo padrão
 Função CompleteReverse (rCell As Range, Opcional 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 

  • Na célula B1, a fórmula será
  • = CompleteReverse (A1, TRUE)

Como obter todas as palavras em ordem reversa de uma célula?

Teremos alguns códigos para encontrar a solução. Para obter todas as palavras na ordem inversa completa, iremos copiar e colar o seguinte código no módulo

 Função 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, ",") Função final 

  • Na célula C1, a fórmula será
  • = ReverseOrder1 (A1)

Vamos dar uma olhada no segundo código VBA:

 Função 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 ) Para (UBound (R) - 1) \ 2 temp = R (UBound (R) - Contador) R (UBound (R) - Contador) = R (Contador) R (Contador) = temp Próximo Contador ReverseOrder2 = Juntar (R , ",") Função final 

  • Na célula D1, a fórmula será
  • = ReverseOrder2 (A1)

Como inverter a ordem das colunas?

Caso você precise inverter a ordem dos dados de uma coluna, deve dar uma olhada no código abaixo:

 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 para 1 etapa -1 x = x + 1 .Range ("A1"). CurrentRegion.Rows (i) .Copy wResult.Range ("A" & x) Next i End Com Application.ScreenUpdating = True End Sub 

O código acima irá verificar os dados na coluna A na folha 1 e, em seguida, inverter a ordem na folha 2. Consulte a imagem abaixo

Como obter números reversos apenas de texto?

Exemplo: “dica do excel (123)” é o conteúdo da célula

Exigir saída: “dica do excel (321)”

No Excel, pode haver várias maneiras de obter a mesma saída e o mesmo acontece para encontrar uma solução com VBA UDFs. Para este exemplo, mostraremos 5 maneiras diferentes.

Copie e cole os seguintes códigos no módulo padrão:

 Função 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 Ou iEnd = 0 Then ReverseNumber1 = v: Função de saída 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) Função Final Função 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 Função final Função ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Substituir (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Função Final Função ReverseNumber4 (c00) ReverseNumber4 = Left (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Função Final Função ReverseNumber5 (s As String ) Dim m como objeto com CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D *) (\ d *)" Para cada m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Next End With Set m = Nothing End Function 

  • Na célula B2, a fórmula será
  • = ReverseNumber1 (A2)

Podemos testar os outros 4 códigos com a seguinte fórmula:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Todos os 5 códigos de macro acima fornecerão a mesma saída; Contudo; pode-se adotar o código com o qual se sente mais confortável.

Como reverter o conteúdo da célula da célula ativa?

Caso você queira que uma macro seja executada apenas em células ativas e, em seguida, reverta o conteúdo. Este código não será executado na célula que contém a fórmula.

Usaremos o seguinte código:

 Sub Reverse_Cell_Contents () 'esta macro será executada apenas em activecell' --- Comentário Se não ActiveCell.HasFormula Then sRaw = ActiveCell.Text sNew = "" For j = 1 To Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNovo Próximo j ActiveCell.Value = sNovo End If End Sub 

Se o cursor estiver na célula A1, que contém “exceltip”, a macro acima irá convertê-lo em “pitlecxe”.

Conclusão: Podemos ter tantos UDFs para uma única solução no Microsoft Excel. Este UDF funcionará da versão de 2003 a 2013.

Se você gostou de nossos blogs, compartilhe com seus amigos no Facebook. E você também pode nos seguir no Twitter e no Facebook.

Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar, complementar ou inovar nosso trabalho e torná-lo melhor para você. Escreva-nos em site de email