В Excel бывают случаи, когда мы хотим полностью перевернуть текст или их порядок с помощью кода VBA. Могут быть различные требования, такие как извлечение содержимого ячеек в обратном порядке, обратный порядок ячеек и так далее .

В этой статье мы узнаем следующее:

  • Как получить обратное содержимое ячейки?

  • Как вывести все слова из ячейки в обратном порядке?

  • Как изменить порядок столбцов?

  • Как получить обратные числа только из текста?

  • Как отменить содержимое ячейки activecell?

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

В Excel есть требование перевернуть текст или числа в ячейках, например. «English» на «hsilgne». Ниже приведен снимок данных перед выводом:

img1

Ниже приведен снимок требуемого вывода в столбце B:

img2

Чтобы получить вышеуказанный результат, нам нужно выполнить следующие шаги для запуска редактора VB. Щелкните вкладку «Разработчик». В группе «Код» выберите Visual Basic

img3

  • Скопируйте приведенный ниже код в стандартный модуль

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

img4

===

В ячейке B1 формула будет иметь вид = CompleteReverse (A1, TRUE)

img5

Как вывести все слова из ячейки в обратном порядке?

У нас будет пара кодов, чтобы найти решение. Чтобы получить все слова в полном обратном порядке, мы скопируем и вставим следующий код в модуль

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

img6

В ячейке C1 формула будет иметь вид = ReverseOrder1 (A1)

img7

Давайте посмотрим на второй код 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

img8

В ячейке D1 формула будет иметь вид = ReverseOrder2 (A1)

img9

Как изменить порядок столбцов?

Если у вас есть требование изменить порядок данных столбца, вам следует внимательнее взглянуть на приведенный ниже код:

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

img10

Приведенный выше код проверит данные в столбце A на листе 1, а затем изменит порядок на листе 2. См. Изображение ниже

Img11

Img12

===

Как получить обратные числа только из текста?

Пример: «excel (123) tip» — это содержимое ячейки. Требуется вывод: «excel (321) tip»

Img13

В 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

Img14

Img15

В ячейке B2 формула будет иметь вид = ReverseNumber1 (A2)

Img16

Мы можем протестировать остальные 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

Img17

Если курсор находится на ячейке A1, которая содержит «exceltip», то указанный выше макрос преобразует его в «pitlecxe».

Вывод: у нас может быть столько UDF для одного решения в Microsoft Excel. Этот UDF будет работать с версии 2003 по 2013 год.

image 29

Если вам понравились наши блоги, поделитесь ими с друзьями на Facebook. А также вы можете подписаться на нас в Twitter и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить, дополнить или усовершенствовать нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]