emi*_*ilk 0 string excel vba reorderlist excel-formula
我只能找到反转单词的函数,例如 Hello -> olleH。但是,我需要一个将句子从最后到第一的顺序颠倒的函数。一个例子可能是:“你好,我的名字是”->“我的名字是你好”。
在 VBA 或预建函数中有什么建议吗?
谢谢
使用 Excel 365,您可以尝试:
公式B1:
=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),TEXTJOIN(" ",,SORTBY(X,SEQUENCE(COUNTA(X)),-1)))
Run Code Online (Sandbox Code Playgroud)
对于那些没有LET(),您可以尝试使用 Excel 2019:
=TEXTJOIN(" ",,INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),N(IF(1,LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+2-ROW(A1:INDEX(A:A,(LEN(A1)-LEN(SUBSTITUTE(A1," ","")))+1))))))
Run Code Online (Sandbox Code Playgroud)
显然,这需要您进行 CSE 输入公式。
非常感谢,最好的功能是我可以在其他功能中控制... – emilk 36 分钟前
这是您可以传递具有值的范围的替代方法。
Option Explicit
Sub Sample()
MsgBox ReverseString(Range("A1"))
End Sub
Private Function ReverseString(rng As Range) As String
On Error GoTo Whoa
Dim MyAr As Variant, itm As Variant
MyAr = Split(rng.Value2, " ")
Dim arListCollection As Object
Set arListCollection = CreateObject("System.Collections.ArrayList")
With arListCollection
For Each itm In MyAr: .Add itm: Next itm
.Reverse
MyAr = .Toarray
End With
ReverseString = Join(MyAr, " ")
LetsContinue:
Exit Function
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Function
Run Code Online (Sandbox Code Playgroud)
例如,如果要将字符串传递给函数
Sub Sample()
MsgBox ReverseString("Hello my name is")
End Sub
Run Code Online (Sandbox Code Playgroud)
那么函数就变成了
Private Function ReverseString(s As String) As String
On Error GoTo Whoa
Dim MyAr As Variant, itm As Variant
MyAr = Split(s, " ")
Dim arListCollection As Object
Set arListCollection = CreateObject("System.Collections.ArrayList")
With arListCollection
For Each itm In MyAr: .Add itm: Next itm
.Reverse
MyAr = .Toarray
End With
ReverseString = Join(MyAr, " ")
LetsContinue:
Exit Function
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Function
Run Code Online (Sandbox Code Playgroud)
有趣的阅读: VBA ArrayList 快速指南