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

时间:2014-02-06 10:24:20

标签: regex excel vba excel-vba

我有一个列有这样数据的专栏:

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中工作。你们能帮忙吗?

4 个答案:

答案 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)

enter image description here

答案 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