Comment obtenir un texte et numéro par VBA en marche arrière dans Microsoft Excel
Dans Excel, il y a des moments où nous voulons inverser complètement le texte ou leur ordre avec le code VBA. Il peut y avoir diverses exigences, comme l’extraction du contenu des cellules inversées, l’ordre inverse des cellules, etc.
Dans cet article, nous allons apprendre ce qui suit:
-
Comment obtenir le contenu inverse des cellules?
-
Comment obtenir tous les mots dans l’ordre inverse d’une cellule?
-
Comment inverser l’ordre des colonnes?
-
Comment obtenir des numéros inversés uniquement à partir du texte?
-
Comment inverser le contenu cellulaire d’activecell?
Comment obtenir le contenu de la cellule inverse?
Dans Excel, il est nécessaire d’inverser le texte ou les nombres dans les cellules, par exemple «English» à «hsilgne» Voici un instantané des données avant la sortie:
Voici un aperçu de la sortie requise dans la colonne B:
Pour obtenir la sortie ci-dessus, nous devons suivre les étapes ci-dessous pour lancer l’éditeur VB Cliquez sur l’onglet Développeur Dans le groupe Code, sélectionnez Visual Basic
-
Copiez le code ci-dessous dans le module standard
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
===
Dans la cellule B1, la formule sera = CompleteReverse (A1, TRUE)
Comment obtenir tous les mots dans l’ordre inverse d’une cellule?
Nous aurons quelques codes pour trouver la solution. Pour obtenir tous les mots dans l’ordre inverse complet, nous allons copier et coller le code suivant dans le module
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
Dans la cellule C1, la formule sera = ReverseOrder1 (A1)
Jetons un œil au deuxième code 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
Dans la cellule D1, la formule sera = ReverseOrder2 (A1)
Comment inverser l’ordre des colonnes?
Si vous avez l’obligation d’inverser l’ordre des données d’une colonne, vous devriez regarder de plus près le code ci-dessous:
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
Le code ci-dessus vérifiera les données de la colonne A de la feuille 1, puis inversera l’ordre de la feuille 2. Reportez-vous à l’image ci-dessous
===
Comment obtenir des nombres inversés uniquement à partir du texte?
Exemple: «excel (123) tip» est le contenu de la cellule. Sortie requise: «excel (321) tip»
Dans Excel, il peut y avoir plusieurs façons d’obtenir le même résultat et il en va de même pour trouver une solution avec VBA UDF. Pour cet exemple, nous montrerons 5 manières différentes.
Copiez et collez les codes suivants dans le module standard:
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
Dans la cellule B2, la formule sera = ReverseNumber1 (A2)
Nous pouvons tester les 4 autres codes avec la formule suivante:
{vide} 1. = ReverseNumber2 (A2)
{vide} 2. = ReverseNumber3 (A2)
{vide} 3. = ReverseNumber4 (A2)
{vide} 4. = ReverseNumber5 (A2)
Tous les 5 codes macro ci-dessus fourniront la même sortie; pourtant; on peut adopter le code avec lequel ils sont le plus à l’aise.
Comment inverser le contenu de la cellule d’activecell?
Dans le cas où vous souhaitez qu’une macro s’exécute uniquement sur activecell, puis inversez le contenu. Ce code ne fonctionnera pas sur la cellule contenant une formule.
Nous utiliserons le code suivant:
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 le curseur se trouve sur la cellule A1, qui contient «exceltip», alors la macro ci-dessus la convertira en «pitlecxe».
Conclusion: Nous pouvons avoir autant d’UDF pour une seule solution dans Microsoft Excel. Cette UDF fonctionnera de la version 2003 à 2013.
Si vous avez aimé nos blogs, partagez-les avec vos amis sur Facebook. Et vous pouvez également nous suivre sur Twitter et Facebook.
Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer, compléter ou innover notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]