Nur für Excel Profis :)

1234

Vice Admiral Special
Mitglied seit
04.03.2004
Beiträge
861
Renomée
1
Hallo Leude,

ich brauche Hilfe bei der Erstellung des folgendes Makros:

1;4;";";7
4;7;|;3

setze trennzeichen=|

antwort:

1|4|";"|7
4|7|||3


VIELEN DANK
 
Ne Idee:

Ersetze doch in einem ersten Schritt generell alle ; durch ein |

Im zweiten Schritt dann "|" wieder durch ";" ersetzen
 
hallo,

leider geht das nicht, ich brauche das ganze automatisiert, kann unmöglich 100000 mal alles per hand machen.
es soll auch nicht jedes ; durch ein | ersetzt werden.

siehe oben 1|4|";"|7
bei ";" bleibt das ;


mfg
 
hallo,

leider geht das nicht, ich brauche das ganze automatisiert, kann unmöglich 100000 mal alles per hand machen.
es soll auch nicht jedes ; durch ein | ersetzt werden.

siehe oben 1|4|";"|7
bei ";" bleibt das ;


mfg

Also Excel Makros lassen bestimmt ein "Search-Replace" zu. Und wegen dem ist ja der zweite Schritt
Also
1;4;";";7
wird zuerst zu
1|4|"|"|7

und dann wird "|" mit ";" ersetz also
1|4|";"|7

Ist doch eigentlich genau das was du willst...*noahnung*
 
Es soll aber alles in einem Schritt erfolgen, da das ansonsten bei einer zu großen Datenmenge zu viel Rechenleistung fordert.... Frag bitte nicht was ich damit auswerten will ... :)
 
Es soll aber alles in einem Schritt erfolgen, da das ansonsten bei einer zu großen Datenmenge zu viel Rechenleistung fordert.... Frag bitte nicht was ich damit auswerten will ... :)

puhh.. wenn dem so ist, dann helfen dir wohl nur Reguläre Ausdrücke (regular Expressions / RegExp). kenne mich diesbezüglich mit VBA aber leider nicht aus... Aber vielleicht findest du was oder ein vba-Kenner kann dir da helfen.
 
Das ganze ist recht einfach, du prüfst den Feldinhalt Zeichenweise (For i = 1 to Len(Feld)) und wenn vor dem ; kein chr(34), was das Anführungszeichen ist, steht, änderst du den Inhalt.

Das ganze könnte so aussehen:
Exc ist ein Excel Objekt, weil hier der Aufruf aus Access erfolgte
Code:
        dim tmp, tmp2 as String
        dim i, j as integer
        For j = 1 To 200
            exc.Range("A" & i).Activate
            tmp = exc.ActiveCell
            For i = 1 to len(tmp)
                 if mid(tmp,i,1) = ";" then
                   if mid(tmp,i+1,1) = chr(34) then
                       tmp2 = tmp2 & "|"
                       i=i+1
                   else
                       tmp2 = tmp2 & mid(tmp,i,1) 
                   end if
                 else
                      tmp2 = tmp2 & mid(tmp,i,1)
                 end if    
            next
        Next
        exc.activecell = tmp2
Ich habe das ganze nicht durchgetestet und in der ersten Bedingung könnte noch ein kleiner Fehler sein, aber der ist beim Test dann schnell zu finden ;)

Gruss
 
Zuletzt bearbeitet:
Wenn Du eine Textdatei hast mit einem Semikolon als Zellentrenner, dann ist das doch eine CSV und keine Exceldatei. D.h. Du hast eine ganz normale Textdatei, die Du mit beliebigen Programmen bearbeiten kannst, es muß doch kein Excelmakro sein. Unter Linux könnte man jetzt einfach ein einzeiliges Shellskript schreiben; bei Windows weiß ich das ehrlich gesagt nicht, aber bestimmt gibt es irgendein kleines Freewareprogramm, was das genauso erledigt.
 
Zurück
Oben Unten