在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.replace
和xlWhole
来避免错误匹配。
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