2008-11-04 12 views
7

Ich habe etwas Googeln gemacht, und kann nichts finden, obwohl ich nur an den falschen Stellen suche. Ich bin auch nicht sehr geschickt in VBA, aber ich bin sicher, dass ich es mit den richtigen Zeigern herausfinden kann :)String-Manipulation mit Excel - Wie kann ein Teil einer Zeichenkette entfernt werden, wenn ein anderer Teil vorhanden ist?

Ich habe eine Zeichenfolge, die ich bin, die eine Verkettung von verschiedenen Zellen ist, basierend auf verschiedenen Bedingungen. Ich habe diese in der richtigen Reihenfolge getroffen.

=IF(A405<>A404,G405,G405&H404) 

Was ich tun möchte, ist durch meine verkettete Liste zurückgehen, eine ersetzte Wert zu entfernen, wenn die superseder in der Liste ist.

Zum Beispiel finden Sie in der folgenden Liste:

A, D, G, Y, Z 

Ich möchte entfernen Dwenn und nurwennY vorhanden ist.

Wie würde ich darüber gehen? (VBA oder In-Zelle, obwohl ich In-Zelle bevorzugen würde)

Antwort

0

I habe es auch als mögliche Lösung per Email bekommen:

=IF(A15<>A14,G15,IF(OR(AND(G15="CR247, ",ISNUMBER(FIND("CR247, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR215, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR180, ",H14))),AND(G15="CR180, ",ISNUMBER(FIND("CR215, ",H14))),G15="CR113, "),H14,G15&H14)) 

(dies hat die "echten" Werte mit Vorrangregeln)

Es sieht relativ ähnlich zu @Joseph 's Antwort.

Gibt es eine bessere Lösung?

+0

fwiw: das ist die antwort, mit der ich gelandet bin - vielen dank für die anderen vorschläge !! – warren

0

Es ist wahrscheinlich einfacher, am Ende zu beginnen, machen Sie Ihre Ergänzungen an den Anfang der Zeichenfolge, und fügen Sie nur D, wenn Y nicht vorhanden ist.

2

Erstens, warum nicht ein String-Array statt, wie Sie durch alle Zellen gehen, dann verketten Sie alles am Ende?

Andernfalls werden Sie String-Funktionen wie INSTR und MID verwenden wie etwas zu tun:

start1 = instr(myLongString,"Y, ") 
if start1 > 0 Then 
    start2 = instr(myLongString,"D, ") 
    if start2 > 0 then 
     newLongString = left(myLongString, start2 - 1) & _ 
         mid(myLongString, start2 + 3) 
    end if 
end if 

Aber, wie gesagt, würde ich ein Array behalten, dass eine Schleife durch einfach ist, dann, wenn Sie Haben Sie alle Werte, die Sie wissen, die Sie verwenden, verketten Sie sie am Ende.

0

Ich denke, D überall erscheinen könnte, so wie etwa:

If InStr(strString, "Y") > 0 Then 
    strString = Replace(strString, "d", "") 
    strString = Replace(strString, " ", "") 
    strString = Replace(strString, " ,", "") 
    strString = Replace(strString, ",,", ",") 
End If 
5

Versuchen:

=IF(ISERROR(FIND("Y",A1)),A1,SUBSTITUTE(A1,"D, ","")) 

Aber das setzt voraus, dass das Komma und Raum immer nach dem D.

+0

Sie müssen ISERROR oder ISNUMBER in der FIND-Anweisung verwenden, wenn sie nicht finden, wonach sie suchen (und deshalb müssen Sie die beiden Fälle umschalten). –

0

Wenn nicht zu viele dieser Kombinationen entfernt werden sollen, können Sie = IF verwenden (FIND ("D"; A2)> 0; ERSETZEN (A2; 1; 3; ""); A2) .

1

VBA: Sie können immer das Regexp-Objekt verwenden. Ich denke, das gibt Ihnen die Möglichkeit, alles in Ihrem Skript zu testen, solange Sie den regulären Ausdruck korrekt erstellen.

Check out: http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (für regexp Referenz)
und ein einfaches Werkzeug, um Ihre regexps zu testen: http://www.codehouse.com/webmaster_tools/regex/

In-cell: Sie kann es in einer Excel-freundlichen Art und Weise tun könnten:
nehmen an Spalte A: A Sie haben die Werte.
Sie können eine neue Spalte hinzufügen, in der Sie die Überprüfung durchführen
oder was auch immer die Werte sind. Ich denke jedoch, dass auf einem Zweig der if-Anweisung der Wert leer sein sollte. Danach verketten Sie nur die B: B-Spaltenwerte (Leerzeichen werden bei Bedarf übersprungen).

Hoffe, das hilft.

Verwandte Themen