Kaip gauti tekstą ir skaičių atvirkščiai per VBA „Microsoft Excel“

Anonim

„Excel“ yra atvejų, kai norime visiškai pakeisti tekstą arba jų tvarką naudojant VBA kodą. Gali būti įvairių reikalavimų, pavyzdžiui, išgauti atvirkštinį langelių turinį, atvirkštinę langelių tvarką ir pan.

Šiame straipsnyje mes išmoksime šiuos dalykus:

  • Kaip gauti atvirkštinį ląstelių turinį?
  • Kaip iš langelio gauti visus žodžius atvirkštine tvarka?
  • Kaip pakeisti stulpelių tvarką?
  • Kaip gauti atvirkštinius skaičius tik iš teksto?
  • Kaip pakeisti aktyvių ląstelių ląstelių turinį?

Kaip gauti atvirkštinį ląstelių turinį?

„Excel“ yra reikalavimas pakeisti tekstą ar skaičius langeliuose, pvz. „Iš anglų“ į „hsilgne“

Toliau pateikiamas duomenų momentinis vaizdas prieš išvestį:

Toliau pateikiamas reikalaujamos išvesties momentinis vaizdas B stulpelyje:

Norėdami gauti aukščiau pateiktą išvestį, turime atlikti toliau nurodytus veiksmus, kad paleistume VB redaktorių

  • Spustelėkite skirtuką Kūrėjas
  • Kodo grupėje pasirinkite „Visual Basic“

  • Nukopijuokite žemiau esantį kodą į standartinį modulį
 Funkcija CompleteReverse („rCell As Range“, pasirenkamas „IsText“ kaip „Boolean“) Dim i Kaip sveikasis skaičius StrNewTxt Kitas i If IsText = False then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End Function 

  • B1 langelyje bus formulė
  • = CompleteReverse (A1, TRUE)

Kaip iš langelio gauti visus žodžius atvirkštine tvarka?

Norėdami rasti sprendimą, turėsime keletą kodų. Norėdami gauti visus žodžius atvirkštine tvarka, nukopijuosime ir įklijuosime šį kodą modulyje

 Funkcija ReverseOrder1 (Rng kaip diapazonas) Dim Val kaip variantas, skaitiklis kaip sveikasis skaičius, R () kaip variantas Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) Į UBound (Val)) Skaitliukui = LBound (Val) Į UBound (Val) R (UBound (Val) - Skaitliukas) = ​​Val (Skaitliukas) Kitas skaitiklis ReverseOrder1 = Prisijungti (R, ",") pabaigos funkcija 

  • C1 langelyje bus formulė
  • = ReverseOrder1 (A1)

Pažvelkime į antrąjį VBA kodą:

 Funkcija ReverseOrder2 (Rng kaip diapazonas) Kaip eilutės pritemdytas skaitiklis, ilgas, R () kaip eilutė, temp kaip eilutė R = padalintas (pakeisti (Rng.Value2, "", ""), ",") Skaičiuotuvas = LBound (R ) Į (UBound (R) - 1) \ 2 temp = R (UBound (R) - skaitiklis) R (UBound (R) - skaitiklis) = R (skaitiklis) R (skaitiklis) = temp Kitas skaitiklis ReverseOrder2 = Prisijungti (R , ",") Pabaigos funkcija 

  • D1 langelyje bus formulė
  • = ReverseOrder2 (A1)

Kaip pakeisti stulpelių tvarką?

Jei turite reikalavimą pakeisti stulpelio duomenų tvarką, turėtumėte atidžiau pažvelgti į žemiau esantį kodą:

 Sub ReverseColumnOrder () Dim wBase kaip darbalapis, wResult kaip darbalapis, i kaip ilgas, x kaip ilgas rinkinys 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) Kitas i pabaiga Su Application.ScreenUpdating = True End Sub 

Aukščiau pateiktas kodas patikrins 1 lapo A stulpelio duomenis ir pakeis 2 lapo tvarką. Žr. Žemiau esantį paveikslėlį

Kaip gauti atvirkštinius skaičius tik iš teksto?

Pavyzdys: „„ Excel “(123) patarimas“ yra langelio turinys

Reikalauti išvesties: „excel (321) tip“

„Excel“ gali būti keli būdai gauti tą pačią išvestį ir tas pats, kaip rasti sprendimą naudojant VBA UDF. Šiame pavyzdyje parodysime 5 skirtingus būdus.

Nukopijuokite ir įklijuokite šiuos kodus į standartinį modulį:

 Funkcija ReverseNumber1 (v kaip variantas) Kaip eilutė Dim iSt kaip sveikasis skaičius, iEnd kaip sveikasis skaičius, sNum kaip eilutė, sTemp kaip eilutė iSt = InStr (v, "(") iEnd = InStr (v, ")") Jei iSt = 0 Arba iEnd = 0 Tada ReverseNumber1 = v: Išėjimo funkcija sNum = Mid (v, iSt + 1, iEnd - iSt - 1) Jei i = Len (sNum) iki 1 žingsnio -1 sTemp = sTemp & Mid (sNum, i, 1) Kitas i ReverseNumber1 = Kairysis (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Pabaigos funkcijos funkcija ReverseNumber2 (s kaip eilutė) Kaip eilutė Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Jei i = InStr (s, "(") + 1 iki InStr (s, ")") - 1 vidurys (t, i, 1) = vidurys (s, ln, 1) ln = ln - 1 Kitas ReverseNumber2 = t Pabaigos funkcija Funkcija ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Replace (c00, "(" & c01 & ") ) "," ("& StrReverse (c01) &") ") Pabaigos funkcijos funkcija ReverseNumber4 (c00) ReverseNumber4 = Kairė (c00, InStr (c00," (")) & StrReverse (vidurys (kairė (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) ir vidurys (c00, InStr (c00, ")")) pabaigos funkcija Funkcija ReverseNumber5 (s kaip eilutė) ) Dim m kaip objektas su CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" Už kiekvieną m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m. Submatches (1)) Kitas galas su rinkiniu m = Nieko pabaigos funkcija 

  • B2 langelyje formulė bus
  • = Atvirkštinis skaičius1 (A2)

Kitus 4 kodus galime išbandyti pagal šią formulę:

1. = Atvirkštinis skaičius2 (A2)

2. = Atvirkštinis skaičius3 (A2)

3. = Atvirkštinis skaičius4 (A2)

4. = Atvirkštinis skaičius5 (A2)

Visi aukščiau išvardyti 5 makro kodai duos tą pačią išvestį; tačiau; galima priimti jiems patogiausią kodą.

Kaip pakeisti aktyvių ląstelių ląstelių turinį?

Jei norite, kad makrokomanda būtų paleista tik „Active Cell“ ir pakeistų turinį. Šis kodas nebus paleistas langelyje, kuriame yra formulė.

Mes naudosime šį kodą:

 Sub Reverse_Cell_Contents () 'ši makrokomanda veiks tik aktyvioje ląstelėje' --- Komentuokite, jei ne ActiveCell.HasFormula Tada 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 

Jei žymeklis yra langelyje A1, kuriame yra „exceltip“, aukščiau pateikta makrokomanda jį pavers į „pitlecxe“.

Išvada: Vienam sprendimui „Microsoft Excel“ galime turėti tiek UDF. Šis UDF veiks nuo 2003 m. Versijos iki 2013 m.

Jei jums patiko mūsų tinklaraščiai, pasidalykite jais su draugais „Facebook“. Taip pat galite sekti mus „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime patobulinti, papildyti ar naujovinti savo darbą ir padaryti jį geresnį. Rašykite mums adresu pašto svetainę