我有一个列有这样数据的专栏:
MO10TRSAB
MO123FJKDAS
MO02JTXZ*
基本上是MO [0-9] {2,3} [A-Z] +的格式。用简单的英语,MO后跟 1到3 (由于我自己的失败而编辑)整数后跟一串字母和/或长度不确定的符号(但不应超过10;但是这个不是要求)
我想对整个列进行反转,使其格式为[A-Z] + MO [0-9] {2-3},即:
TRSABMO10
FJKDASMO123
JTXZ*MO02
我不确定如何在excel-VBA中执行此操作主要是因为我真的不知道RegEx如何在Excel-VBA中工作。你们能帮忙吗?
答案 0 :(得分:2)
或者只是使用这个公式:
=IF(ISERROR(VALUE(MID(H10;5;1)));RIGHT(H10;LEN(H10)-4) & LEFT(H10;4);RIGHT(H10;LEN(H10)-5) & LEFT(H10;5))
在这种情况下,值为H10,
答案 1 :(得分:1)
根据修订后的要求和解析(A1)在第3,4和5位的固定宽度,这可能适合:
=IF(ISTEXT(B1),B1&C1&D1&A1,IF(ISTEXT(C1),C1&D1&A1&B1,D1&A1&B1&C1))
答案 2 :(得分:0)
修改强> 根据最近的相关编辑更新了代码。
试试这个:
将此代码插入模块。
Function ReverseString(ByVal original As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(MO[\d]{1,3})(.+)"
re.Global = True
ReverseString = re.Replace(original, "$2$1")
End Function
然后你可以随心所欲地使用它。 例如你可以将它用作这样的公式:
=ReverseString(A1)
答案 3 :(得分:0)
Public Function str(ByVal my_string As String) As String()
Dim Numberstring As String
Dim Stringvalue As String
Dim Reversestring() As String
ReDim Reversestring(Len(my_string) - 1)
For i = 1 To Len(my_string)
Reversestring(i - 1) = Mid$(my_string, i, 1)
Next
For i = 2 To Len(my_string) - 1
If IsNumeric(Reversestring(i)) Then
numbersstring = numbersstring & Reversestring(i)
Else
Stringvalue = Stringvalue & Reversestring(i)
End If
Next
finalstring = Stringvalue & "MO" & numbersstring
str = finalstring
End Function