如何通过VBA在Excel中获得反转字符及数量
在excel中,有时候我们想使文本完全颠倒,或者要使用VBA代码使它们的顺序颠倒。可能有各种要求,例如提取反向单元格内容,反向单元格顺序等。
在本文中,我们将学习以下内容:
-
如何获取反向单元格内容?
-
如何从一个单元中获得相反顺序的所有单词?
-
如何反转列顺序?
-
如何仅从文本中获取反向数字?
-
如何反转activecell的单元格内容?
如何获取反向单元格内容?
在Excel中,需要反转单元格中的文本或数字,例如“英语”到“ hsilgne”以下是输出之前的数据快照:
以下是B列中require输出的快照:
要获得以上输出,我们需要按照以下步骤启动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)
如何从一个单元中获得相反顺序的所有单词?
我们将有几个代码来找到解决方案。为了使所有单词完全相反,我们将以下代码复制并粘贴到模块
中。在单元格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
让我们看一下第二个VBA代码:
在单元格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
如何反转列顺序?
如果需要反转列数据的顺序,则应仔细查看以下代码:
上面的代码将检查工作表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
===
如何仅从文本中获取反向数字?
示例:“ excel(123)tip”是单元格内容要求输出:“ excel(321)tip”
在excel中,可以有多种方法来获得相同的输出,并且使用VBA UDF查找解决方案的方法也一样。对于此示例,我们将显示5种不同的方式。
将以下代码复制并粘贴到标准模块中:
在单元格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
我们可以使用以下公式测试其他4个代码:
{空} 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
结论:对于Microsoft Excel中的单个解决方案,我们可以有尽可能多的UDF。此UDF从2003版到2013年都可以使用。如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。
我们希望收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给[email protected]_