Как получить текст & Количество в Reverse через VBA в Microsoft Excel
В Excel бывают случаи, когда мы хотим полностью перевернуть текст или их порядок с помощью кода VBA. Могут быть различные требования, такие как извлечение содержимого ячеек в обратном порядке, обратный порядок ячеек и так далее .
В этой статье мы узнаем следующее:
-
Как получить обратное содержимое ячейки?
-
Как вывести все слова из ячейки в обратном порядке?
-
Как изменить порядок столбцов?
-
Как получить обратные числа только из текста?
-
Как отменить содержимое ячейки activecell?
Как получить обратное содержимое ячейки?
В Excel есть требование перевернуть текст или числа в ячейках, например. «English» на «hsilgne». Ниже приведен снимок данных перед выводом:
Ниже приведен снимок требуемого вывода в столбце B:
Чтобы получить вышеуказанный результат, нам нужно выполнить следующие шаги для запуска редактора VB. Щелкните вкладку «Разработчик». В группе «Код» выберите Visual Basic
-
Скопируйте приведенный ниже код в стандартный модуль
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
===
В ячейке B1 формула будет иметь вид = CompleteReverse (A1, TRUE)
Как вывести все слова из ячейки в обратном порядке?
У нас будет пара кодов, чтобы найти решение. Чтобы получить все слова в полном обратном порядке, мы скопируем и вставим следующий код в модуль
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
В ячейке C1 формула будет иметь вид = ReverseOrder1 (A1)
Давайте посмотрим на второй код 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
В ячейке 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) Next i End With Application.ScreenUpdating = True End Sub
Приведенный выше код проверит данные в столбце A на листе 1, а затем изменит порядок на листе 2. См. Изображение ниже
===
Как получить обратные числа только из текста?
Пример: «excel (123) tip» — это содержимое ячейки. Требуется вывод: «excel (321) tip»
В Excel может быть несколько способов получить один и тот же результат, и то же самое относится к поиску решения с помощью VBA UDF. В этом примере мы покажем 5 различных способов.
Скопируйте и вставьте следующие коды в стандартный модуль:
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
В ячейке B2 формула будет иметь вид = ReverseNumber1 (A2)
Мы можем протестировать остальные 4 кода по следующей формуле:
{пусто} 1. = ReverseNumber2 (A2)
{пусто} 2. = ReverseNumber3 (A2)
{пусто} 3. = ReverseNumber4 (A2)
{пусто} 4. = ReverseNumber5 (A2)
Все вышеперечисленные 5 макрокодов дадут одинаковый результат; Однако; можно принять код, который им удобнее всего.
Как отменить содержимое ячейки activecell?
Если вы хотите, чтобы макрос запускался только на activecell, а затем перевернул содержимое. Этот код не будет работать в ячейке, содержащей формулу.
Мы будем использовать следующий код:
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
Если курсор находится на ячейке A1, которая содержит «exceltip», то указанный выше макрос преобразует его в «pitlecxe».
Вывод: у нас может быть столько UDF для одного решения в Microsoft Excel. Этот UDF будет работать с версии 2003 по 2013 год.
Если вам понравились наши блоги, поделитесь ими с друзьями на Facebook. А также вы можете подписаться на нас в Twitter и Facebook.
Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить, дополнить или усовершенствовать нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]