在VBA中将string数组转换为新string

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

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

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 

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

  • 使用中间replace方法分两个阶段进行
  • 遵循原“数组中最大的string”的规则。 因此, 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)

我的代码中的最后两个string出现问题,因为它们几乎完全相同。 当我执行代码时,“电源合作伙伴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 

截图

在这里输入图像说明

 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