Kuidas saada teksti ja numbrit tagurpidi Microsoft Excelis VBA kaudu

Anonim

Excelis on aegu, kui tahame teksti täielikult ümber pöörata või nende järjekorda VBA -koodiga. Nõudeid võib olla erinevaid, näiteks lahtrite pöördsisu ekstraheerimine, lahtrite vastupidine järjestus jne.

Selles artiklis õpime järgmist.

  • Kuidas saada vastupidist lahtrisisu?
  • Kuidas saada lahtrist kõik sõnad vastupidises järjekorras?
  • Kuidas veergude järjekorda ümber pöörata?
  • Kuidas saada vastupidiseid numbreid ainult tekstist?
  • Kuidas muuta aktiivse raku sisu?

Kuidas saada vastupidist lahtrisisu?

Excelis nõutakse lahtrites oleva teksti või numbrite ümberpööramist, nt "Inglise" kuni "hsilgne"

Allpool on andmete ülevaade enne väljundit:

Järgnev on nõutav väljundi ülevaade veerus B:

Ülaltoodud väljundi saamiseks peame VB redaktori käivitamiseks järgima alltoodud samme

  • Klõpsake vahekaarti Arendaja
  • Valige koodirühmas Visual Basic

  • Kopeerige allolev kood standardmoodulisse
 Funktsioon CompleteReverse (rCell As Range, valikuline IsText Booleanina) Dim i Täisarv Dim StrNewTxt Stringina Dim strOld As String strOld = Trim (rCell) I = 1 kuni Len (strOld) StrNewTxt = Mid (strOld, i, 1) & StrNewTxt Järgmine i If IsText = False Then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End Function 

  • Lahtris B1 on valem
  • = CompleteReverse (A1, TRUE)

Kuidas saada lahtrist kõik sõnad vastupidises järjekorras?

Lahenduse leidmiseks on meil paar koodi. Kõigi sõnade saamiseks vastupidises järjekorras kopeerime ja kleepime moodulisse järgmise koodi

 Funktsioon ReverseOrder1 (Rng kui vahemik) Dim Val variandina, loendur täisarvuna, R () Variandina Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) To UBound (Val)) Loenduri jaoks = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Next Counter ReverseOrder1 = Join (R, ",") End Function 

  • Lahtris C1 on valem
  • = ReverseOrder1 (A1)

Vaatame teist VBA koodi:

 Funktsioon ReverseOrder2 (Rng kui vahemik) Stringi hämardajana nii pikk, R () Stringina, temp As String R = Split (Asenda (Rng.Value2, "", ""), ",") For Counter = LBound (R ) Kuni (UBound (R) - 1) \ 2 temp = R (UBound (R) - loendur) R (UBound (R) - loendur) = R (loendur) R (loendur) = temp Järgmine loendur ReverseOrder2 = Liitu (R , ",") Lõppfunktsioon 

  • Lahtris D1 on valem
  • = ReverseOrder2 (A1)

Kuidas veergude järjekorda ümber pöörata?

Kui teil on nõue muuta veeru andmete järjekorda, peaksite lähemalt uurima allolevat koodi:

 Sub ReverseColumnOrder () Dim wBase kui tööleht, wResult kui tööleht, i nii pikk, x kui pikk 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 Koos Application.ScreenUpdating = True End Sub 

Ülaltoodud kood kontrollib lehe 1 veerus A olevaid andmeid ja muudab seejärel lehe 2 järjekorda. Vaadake allolevat pilti

Kuidas saada vastupidiseid numbreid ainult tekstist?

Näide: „Exceli (123) näpunäide” on lahtri sisu

Vajalik väljund: „excel (321) tip“

Excelis võib sama väljundi saamiseks olla mitmeid viise ja sama kehtib ka lahenduse leidmiseks VBA UDF -idega. Selle näite puhul näitame 5 erinevat viisi.

Kopeerige ja kleepige järgmised koodid standardmoodulisse:

 Funktsioon ReverseNumber1 (v variandina) Stringina Dim iSt täisarvuna, iEnd kui täisarv, sNum kui string, sTemp As String iSt = InStr (v, "(") iEnd = InStr (v, ")") Kui iSt = 0 Või iEnd = 0 Siis ReverseNumber1 = v: Väljumisfunktsioon sNum = Mid (v, iSt + 1, iEnd - iSt - 1) i = Len (sNum) kuni 1 samm -1 sTemp = sTemp & Mid (sNum, i, 1) Järgmine i ReverseNumber1 = Vasak (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Lõppfunktsiooni funktsioon ReverseNumber2 (s Stringina) Stringina Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Sest i = InStr (s, "(") + 1 InStr (s, ")") - 1 Kesk (t, i, 1) = Kesk (s, ln, 1) ln = ln - 1 Järgmine ReverseNumber2 = t Lõppfunktsioon Funktsioon ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Asenda (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Lõppfunktsiooni funktsioon ReverseNumber4 (c00) ReverseNumber4 = Left (c00, InStr (c00," (")) & StrReverse (Mid (Left (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) ja keskmine (c00, InStr (c00, ")")) Lõppfunktsioon Funktsioon ReverseNumber5 (s kui string ) Dim m objektina CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" Iga m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Järgmine lõpp komplektiga m = Nothing End Function 

  • Lahtris B2 on valem järgmine
  • = ReverseNumber1 (A2)

Ülejäänud 4 koodi saame testida järgmise valemiga:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Kõik ülaltoodud 5 makrokoodi annavad sama väljundi; Kuid; saab vastu võtta koodi, mis neile kõige mugavam on.

Kuidas muuta aktiivse raku sisu?

Kui soovite, et makro käivitataks ainult aktiivsel elemendil ja seejärel muudetaks sisu. See kood ei tööta valemit sisaldavas lahtris.

Kasutame järgmist koodi:

 Sub Reverse_Cell_Contents () 'see makro töötab ainult aktiivsel lahtril' --- Kommentaar, kui pole ActiveCell.HasFormula Siis sRaw = ActiveCell.Text sNew = "" Sest j = 1 Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sUus Järgmine j ActiveCell.Value = sUus lõpp, kui lõpp Alam 

Kui kursor asub lahtris A1, mis sisaldab “exceltip”, teisendab ülaltoodud makro selle “pitlecxe” -ks.

Järeldus: Microsoft Excelis võib ühe lahenduse jaoks olla sama palju UDF -e. See UDF töötab 2003. aasta versioonist kuni 2013. aastani.

Kui teile meeldisid meie ajaveebid, jagage seda oma sõpradega Facebookis. Samuti saate meid jälgida Twitteris ja Facebookis.

Tahaksime sinust kuulda, andke meile teada, kuidas saaksime oma tööd täiustada, täiendada või uuendada ning muuta see teie jaoks paremaks. Kirjuta meile aadressil e -posti sait