将前缀转换为整列后缀的策略?

我有一个列数据布局如下:

MO10TRSAB MO123FJKDAS MO02JTXZ* 

它基本上是MO [0-9] {2,3} [AZ] +的格式。 用简单的英语,MO后跟1到3 (由于我自己的失败编辑)整数,然后是一串不确定长度的字母和/或符号(但不应超过10;但这不是要求)

我想对整列进行反转,使其具有[AZ] + MO [0-9] {2-3}的格式,即:

 TRSABMO10 FJKDASMO123 JTXZ*MO02 

我不确定如何在Excel VBA中执行此操作,主要是因为我不确定RegEx在Excel-VBA中是如何工作的。 你们能帮忙吗?

或者只是使用这个公式:

 =IF(ISERROR(VALUE(MID(H10;5;1)));RIGHT(H10;LEN(H10)-4) & LEFT(H10;4);RIGHT(H10;LEN(H10)-5) & LEFT(H10;5)) 

在这种情况下,值是H10,

修改后的要求和parsing(A1)固定宽度的位置3,4和5,这可能适合:

  =IF(ISTEXT(B1),B1&C1&D1&A1,IF(ISTEXT(C1),C1&D1&A1&B1,D1&A1&B1&C1)) 

编辑:代码更新为最近编辑的问题。

尝试这个:

将此代码插入到模块中。

 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) 

在这里输入图像说明

 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