在excel中,有时候我们想使文本完全颠倒,或者要使用VBA代码使它们的顺序颠倒。可能有各种要求,例如提取反向单元格内容,反向单元格顺序等。

在本文中,我们将学习以下内容:

  • 如何获取反向单元格内容?

  • 如何从一个单元中获得相反顺序的所有单词?

  • 如何反转列顺序?

  • 如何仅从文本中获取反向数字?

  • 如何反转activecell的单元格内容?

如何获取反向单元格内容?

在Excel中,需要反转单元格中的文本或数字,例如“英语”到“ hsilgne”以下是输出之前的数据快照:

img1

以下是B列中require输出的快照:

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

如何从一个单元中获得相反顺序的所有单词?

我们将有几个代码来找到解决方案。为了使所有单词完全相反,我们将以下代码复制并粘贴到模块

中。在单元格C1中,公式将为= ReverseOrder1(A1)

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

让我们看一下第二个VBA代码:

img7

在单元格D1中,公式将为= ReverseOrder2(A1)

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

img9

如何反转列顺序?

如果需要反转列数据的顺序,则应仔细查看以下代码:

上面的代码将检查工作表1中A列中的数据,然后颠倒工作表2中的顺序。请参见下图

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

Img11

Img12

===

如何仅从文本中获取反向数字?

示例:“ excel(123)tip”是单元格内容要求输出:“ excel(321)tip”

在excel中,可以有多种方法来获得相同的输出,并且使用VBA UDF查找解决方案的方法也一样。对于此示例,我们将显示5种不同的方式。

Img13

将以下代码复制并粘贴到标准模块中:

在单元格B2中,公式将为= ReverseNumber1(A2)

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

我们可以使用以下公式测试其他4个代码:

Img16

{空} 1。 = ReverseNumber2(A2)

{空} 2。 = ReverseNumber3(A2)

3。 = ReverseNumber4(A2)

{空} 4。 = ReverseNumber5(A2)

以上所有5个宏代码都将提供相同的输出。然而;可以采用他们最熟悉的代码。

如何反转activecell的单元格内容?

如果您希望宏仅在activecell上运行,然后反转内容。此代码将无法在包含公式的单元格上运行。

我们将使用以下代码:

如果光标位于包含“ exceltip”的单元格A1上,则上面的宏会将其转换为“ pitlecxe”。

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

结论:对于Microsoft Excel中的单个解决方案,我们可以有尽可能多的UDF。此UDF从2003版到2013年都可以使用。如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。

我们希望收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给[email protected]_

image 29