2017-05-29 5 views
0

Ich habe versucht, einen VBA-Code zu erstellen, der eine Zeichenfolge (in einem Array) in eine neue Zeichenfolge (die auch in einem Array) konvertiert. Allerdings bekomme ich ein Problem mit den ursprünglichen Strings, die fast identisch sind. Z.B. "Power Partner", "Power Partner OEM".Konvertiere ein Array von Zeichenfolgen in neue Zeichenfolgen in VBA

Gibt es eine Möglichkeit, sie genau zu konvertieren? Vielen Dank!

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

Welches Problem erhalten Sie? Was ist der Wert von "orig", den Sie an die Funktion übergeben? –

+0

Ich bekomme ein Problem mit den letzten zwei Strings in meinem Code, da sie fast identisch sind. Wenn ich den Code ausführe, ist das Ergebnis für "Power Partner OEM" falsch, es wurde "Onsite Energy OEM" – kulapo

+0

Was ist der Wert von "orig", die Sie an die Funktion übergeben? –

Antwort

1

Wenn Sie nicht wollen, die komplexe Welt der regulären Ausdrücke eingeben,

  • tun es in 2 Phasen unter Verwendung eines Zwischen Ersatz
  • Folgen Sie der Regel die des Setzens „größten Saiten zuerst“ in das ursprüngliche Array. Daher Power Partner OEM sollte vorPower Partner kommen.

.

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 

Hinweis das Zwischenarray nicht erforderlich ist, können Sie "xxx" & i überall statt interm(i) ...

1

Ich bin immer ein Problem mit den letzten beiden Saiten in meinem Code verwenden, da sie fast sind identisch. Wenn ich den Code ausführe, ist das Ergebnis für "Power Partner OEM" falsch, es wurde "Onsite Energy vor Ort" - kulapo

Der Wert von orig kam aus einem Bereich, der technisch in der orgVal - kulapo

aufgelistet ist

Der einfachste Weg, es zu tun, ist nicht Variants und Range zu verwenden verwenden und die eingebauten Range.replace mit xlWhole verwenden dann falsch-positive Übereinstimmungen zu vermeiden.

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 

Screenshot

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

Ich werde es auch wegen seiner Einfachheit versuchen. Danke @SiddharthRout! – kulapo

Verwandte Themen