2017-05-29 340 views
0

我试图创建一个将字符串(在数组中)转换为新字符串(也在数组中)的VBA代码。但是,我遇到了几乎相同的原始字符串问题。例如。 “电源合作伙伴”,“电源合作伙伴OEM”。将字符串数组转换为VBA中的新字符串

有什么办法可以将它们准确地转换吗?谢谢!

Private Function cvrt(orig As Variant) As Variant 

    Dim orgVal As Variant, newVal As Variant, i As Integer 

    cvrt = orig 

    orgVal = Array("Central", "Clarke", "Power Partner", "Power Partner OEM") 
    newVal = Array("Central Data", "Clarke Data", "Onsite Power Partner", "Onsite Energy OEM") 

    For i = 0 To 3 
     cvrt = Replace(cvrt, orgVal(i), newVal(i), vbTextCompare) 
    Next i 

End Function 
+0

你得到了什么问题?你传递给函数的'orig'的值是多少? –

+0

我的代码中最后两个字符串出现问题,因为它们几乎完全相同。当我执行代码时,“电源合作伙伴OEM”的结果不正确,它变成了“现场能源OEM” – kulapo

+0

您传递给函数的'orig'的值是多少? –

回答

1

如果你不想进入正则表达式的复杂世界,

  • 在使用中间更换
  • 按照把规则“最大的字符串第一个”做2个阶段原始数组。因此Power Partner OEM应在Power Partner之前来

Private Function cvrt(orig As Variant) As Variant 
    Dim i As Long, orgVal, newVal, interm 
    cvrt = orig 
    orgVal = Array("Power Partner OEM", "Power Partner", "Central", "Clarke") 
    interm = Array("xxx0", "xxx1", "xxx2", "xxx3") 
    newVal = Array("Onsite Energy OEM", "Onsite Power Partner", "Central Data", "Clarke Data") 
    For i = 0 To 3 
     cvrt = Replace(cvrt, orgVal(i), interm(i), vbTextCompare) 
    Next i 
    For i = 0 To 3 
     cvrt = Replace(cvrt, interm(i), newVal(i), vbTextCompare) 
    Next i 
End Function 

注意中间数组是没有必要的,你可以使用"xxx" & i随处可见,而不是interm(i) ...

1

我得到一个问题的最后两个字符串在我的代码,因为他们几乎相同。当我执行代码时,“电源合作伙伴OEM”的结果不正确,它变成了“现场能源OEM” - kulapo

orig的值来自一个范围,技术上列在orgVal - kulapo

做到这一点,最简单的方法是不使用Variants和使用Range,然后使用内置Range.replacexlWhole以避免误报匹配。

Private Function cvrt(orig As Range) As Range '<~~~~~ 
    Dim orgVal As Variant, newVal As Variant, i As Integer 
    Dim rng As Range 

    Set rng = orig 

    orgVal = Array("Central", "Clarke", "Power Partner", "Power Partner OEM") 
    newVal = Array("Central Data", "Clarke Data", "Onsite Power Partner", "Onsite Energy OEM") 

    For i = 0 To 3 
     rng.Replace What:=orgVal(i), Replacement:=newVal(i), LookAt:=xlWhole 
    Next i 

    Set orig = rng 
End Function 

截图

enter image description here

Sub Sample() 
    Dim r As Range 

    Set r = cvrt(Range("A1:A4")) 
End Sub 


Private Function cvrt(orig As Range) As Range 
    Dim orgVal As Variant, newVal As Variant, i As Integer 
    Dim rng As Range 

    Set rng = orig 

    orgVal = Array("Central", "Clarke", "Power Partner", "Power Partner OEM") 
    newVal = Array("Central Data", "Clarke Data", "Onsite Power Partner", "Onsite Energy OEM") 

    For i = 0 To 3 
     rng.Replace What:=orgVal(i), Replacement:=newVal(i), LookAt:=xlWhole 
    Next i 

    Set orig = rng 
End Function 
+0

我也会尝试这种方式,因为它的简单性。谢谢@SiddharthRout! – kulapo