Как да получите текст и номер в обратна посока чрез VBA в Microsoft Excel

Anonim

В Excel, има моменти, в които искаме да обърнем текста изцяло или техния ред с VBA код. Може да има различни изисквания, като извличане на обратно клетъчно съдържание, обратен ред на клетки и т.н.

В тази статия ще научим следното:

  • Как да получите обратно клетъчно съдържание?
  • Как да получите всички думи в обратен ред от клетка?
  • Как да обърнем реда на колоните?
  • Как да получите обратни числа само от текст?
  • Как да обърнем съдържанието на клетката на activecell?

Как да получите обратно клетъчно съдържание?

В Excel има изискване да се обърне текст или числа в клетки, напр. „Английски“ на „hsilgne“

Следва моментната снимка на данните преди изхода:

Следва моментната снимка на изискващия изход в колона В:

За да получим горния изход, трябва да следваме стъпките по -долу, за да стартираме VB редактор

  • Кликнете върху раздела Разработчик
  • От групата Кодове изберете Visual Basic

  • Копирайте кода по -долу в стандартния модул
 Функция CompleteReverse (rCell като диапазон, незадължителен IsText като булев) 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 Следващ i Ако IsText = False Тогава CompleteReverse = CLng (StrNewTxt) Друго CompleteReverse = StrNewTxt Край, ако функцията за край 

  • В клетка В1 формулата ще бъде
  • = CompleteReverse (A1, TRUE)

Как да извлечем всички думи в обратен ред от клетка?

Ще имаме няколко кода, за да намерим решението. За да получим всички думи в пълен обратен ред, ще копираме и поставим следния код в модула

 Функция ReverseOrder1 (Rng As Range) Dim Val като вариант, Counter As Integer, R () As Variant Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) Към UBound (Val)) За Counter = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Следващ брояч ReverseOrder1 = Присъединяване (R, ",") Крайна функция 

  • В клетка C1 формулата ще бъде
  • = ReverseOrder1 (A1)

Нека да разгледаме втория VBA код:

 Функция 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 ) До (UBound (R) - 1) \ 2 temp = R (UBound (R) - Counter) R (UBound (R) - Counter) = R (Counter) R (Counter) = temp Следващ брояч ReverseOrder2 = Join (R , ",") Крайна функция 

  • В клетка D1 формулата ще бъде
  • = ReverseOrder2 (A1)

Как да обърнем реда на колоните?

В случай, че имате изискване да обърнете реда на данните в колоната, трябва да разгледате по -отблизо кода по -долу:

 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) Следващ i End С Application.ScreenUpdating = True End Sub 

Горният код ще провери данните в колона А на лист 1 и след това ще обърне реда в лист 2. Вижте изображението по -долу

Как да получите обратни числа само от текст?

Пример: „excel (123) tip“ е съдържанието на клетката

Изисква изход: „excel (321) tip“

В excel може да има няколко начина да получите един и същ изход и същото се отнася и за намиране на решение с VBA UDF. За този пример ще покажем 5 различни начина.

Копирайте и поставете следните кодове в стандартен модул:

 Функция ReverseNumber1 (v като вариант) 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 Тогава ReverseNumber1 = v: Изход от функция sNum = Mid (v, iSt + 1, iEnd - iSt - 1) За i = Len (sNum) До 1 стъпка -1 sTemp = sTemp & Mid (sNum, i, 1) Следващ i ReverseNumber1 = Наляво (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Крайна функция Функция 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 Напред ) "," ("& StrReverse (c01) &") ") Крайна функция Функция ReverseNumber4 (c00) ReverseNumber4 = Вляво (c00, InStr (c00," (")) & StrReverse (В средата (вляво (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Крайна функция Функция ReverseNumber5 (s As String ) Dim m As Object With CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" За всеки m In .Execute (s) ReverseNumber5 = ReverseNumber5 & m.submatches ( 0) & StrReverse (m.submatches (1)) Next End With Set m = Nothing End Функция 

  • В клетка В2 формулата ще бъде
  • = ReverseNumber1 (A2)

Можем да тестваме другите 4 кода със следната формула:

1. = ReverseNumber2 (A2)

2. = ReverseNumber3 (A2)

3. = ReverseNumber4 (A2)

4. = ReverseNumber5 (A2)

Всички горепосочени 5 макро кода ще осигурят един и същ изход; въпреки това; човек може да приеме кода, който им е най -удобен.

Как да обърнем съдържанието на клетката на activecell?

В случай, че искате макрос да работи само на activecell и след това да обърнете съдържанието. Този код няма да работи на клетка, която съдържа формула.

Ще използваме следния код:

 Sub Reverse_Cell_Contents () „този макрос ще работи само на activecell“ --- Коментар Ако не е ActiveCell.HasFormula Тогава sRaw = ActiveCell.Text sNew = "" За j = 1 Към Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNew Next j ActiveCell.Value = sNew End If End Sub 

Ако курсорът е върху клетка A1, която съдържа „exceltip“, тогава горният макрос ще го преобразува в „pitlecxe“.

Заключение: Можем да имаме толкова много UDF за едно решение в Microsoft Excel. Този UDF ще работи от версия 2003 до 2013.

Ако ви харесаха нашите блогове, споделете го с приятелите си във Facebook. Можете също така да ни следвате в Twitter и Facebook.

Ще се радваме да чуем от вас, уведомете ни как можем да подобрим, допълним или обновим работата си и да я подобрим. Пишете ни на имейл сайт