Jak získat text a číslo obráceně prostřednictvím VBA v aplikaci Microsoft Excel

Anonim

V aplikaci Excel existují chvíle, kdy chceme, aby byl text zcela obrácen nebo jejich pořadí pomocí kódu VBA. Mohou existovat různé požadavky, jako je extrahování obsahu reverzních buněk, obrácené pořadí buněk atd.

V tomto článku se naučíme následující:

  • Jak získat obsah reverzní buňky?
  • Jak z buňky získat všechna slova v opačném pořadí?
  • Jak obrátit pořadí sloupců?
  • Jak získat obrácená čísla pouze z textu?
  • Jak zvrátit obsah buňky activecell?

Jak získat obsah reverzní buňky?

V aplikaci Excel existuje požadavek na obrácení textu nebo čísel v buňkách, např. „Angličtina“ až „hsilgne“

Následuje snímek dat před výstupem:

Následuje snímek požadovaného výstupu ve sloupci B:

Chcete -li získat výše uvedený výstup, musíme ke spuštění VB editoru provést následující kroky

  • Klikněte na kartu Vývojář
  • Ze skupiny kódů vyberte Visual Basic

  • Zkopírujte níže uvedený kód do standardního modulu
 Funkce CompleteReverse (rCell As Range, Volitelně 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 Další i If IsText = False Then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End Funkce 

  • V buňce B1 bude vzorec
  • = CompleteReverse (A1, TRUE)

Jak z buňky získat všechna slova v opačném pořadí?

K nalezení řešení budeme mít několik kódů. Aby byla všechna slova v úplném obráceném pořadí, zkopírujeme a vložíme následující kód do modulu

 Funkce ReverseOrder1 (rozsah jako rozsah) Dim Val jako varianta, čítač jako celé číslo, R () jako varianta Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) To UBound (Val)) Pro Counter = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Next Counter ReverseOrder1 = Join (R, ",") End Function 

  • V buňce C1 bude vzorec
  • = ReverseOrder1 (A1)

Podívejme se na druhý kód VBA:

 Funkce ReverseOrder2 (Rng jako rozsah) jako řetězec Dim Counter jako dlouhý, R () jako 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 , ",") Koncová funkce 

  • V buňce D1 bude vzorec
  • = ReverseOrder2 (A1)

Jak obrátit pořadí sloupců?

V případě, že máte požadavek na obrácení pořadí dat sloupce, měli byste se blíže podívat na níže uvedený kód:

 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) Další i Konec With Application.ScreenUpdating = True End Sub 

Výše uvedený kód zkontroluje data ve sloupci A v listu1 a poté obrátí pořadí v listu 2. Viz obrázek níže

Jak získat obrácená čísla pouze z textu?

Příklad: „excel (123) tip“ je obsah buňky

Vyžadovat výstup: „excel (321) tip“

V Excelu může existovat několik způsobů, jak získat stejný výstup, a totéž platí pro hledání řešení s VBA UDF. V tomto příkladu si ukážeme 5 různých způsobů.

Zkopírujte a vložte následující kódy do standardního modulu:

 Funkce ReverseNumber1 (v jako varianta) jako řetězec Dim iSt jako celé číslo, iEnd jako celé číslo, sNum jako řetězec, sTemp jako řetězec iSt = InStr (v, "(") iEnd = InStr (v, ")") Pokud iSt = 0 Nebo iEnd = 0 Potom ReverseNumber1 = v: Ukončete funkci sNum = Mid (v, iSt + 1, iEnd - iSt - 1) Pro i = Len (sNum) Do 1 Krok -1 sTemp = sTemp & Mid (sNum, i, 1) Další i ReverseNumber1 = Left (v, iSt) & sTemp & Mid (v, iEnd, 5 5) End Function Funkce ReverseNumber2 (s As String) As String Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Pro i = InStr (s, "(") + 1 InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Další ReverseNumber2 = t Koncová funkce Funkce ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Replace (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Koncová funkce Funkce ReverseNumber4 (c00) ReverseNumber4 = Left (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Koncová funkce Funkce ReverseNumber5 (s jako řetězec ) Dim m as Object With CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" For every m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Next End With Set m = Nothing End Function 

  • V buňce B2 bude vzorec
  • = ReverseNumber1 (A2)

Ostatní 4 kódy můžeme otestovat podle následujícího vzorce:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Všech výše uvedených 5 kódů makra poskytne stejný výstup; nicméně; jeden může přijmout kód, který jim nejvíce vyhovuje.

Jak zvrátit obsah buňky activecell?

V případě, že chcete, aby makro běželo pouze na activecell a poté obrátil obsah. Tento kód se nespustí v buňce, která obsahuje vzorec.

Použijeme následující kód:

 Sub Reverse_Cell_Contents () 'toto makro poběží pouze na activecell' --- Komentář Pokud není ActiveCell.HasFormula Then sRaw = ActiveCell.Text sNew = "" For j = 1 To Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNový Další j ActiveCell.Value = sNový Konec Pokud Konec Sub 

Pokud je kurzor v buňce A1, která obsahuje „exceltip“, výše uvedené makro jej převede na „pitlecxe“.

Závěr: Můžeme mít tolik UDF pro jedno řešení v aplikaci Microsoft Excel. Tento UDF bude fungovat od verze 2003 do 2013.

Pokud se vám naše blogy líbily, sdílejte je se svými přáteli na Facebooku. A také nás můžete sledovat na Twitteru a Facebooku.

Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit, doplnit nebo inovovat naši práci a zlepšit ji pro vás. Napište nám na e -mailový web