Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

HI leuts! ich hänge an nem Problem: Also ich will eine unformatierte Datei in Excel importieren. Klar kein problem, Import und fertig, aber das wird regelmässig gemacht, also einmal im Monat kommt diese unformatierte Datei aus dem Lager und soll umgewandelt werden.

hmmm wie mache ich das nu? Also so dass man das gleich beim Starten des Dokumentes hat oder so...halt so einfach wie möglich. DAU-Sicher!!*GG*

Gut dann habe ich die Datei importiert und nu sollen noch ein paar kleine Veränderungen vorgenommen werden. Es gibt da in dieser Liste eine Spalte, die sowohl nummerische Werte als auch Wörter beinhaltet! Jeztt soll ich das auftrennen...

Problem ist aber das nicht immer Zahlen drinstehen, also sieht das ganze so aus(nur Beispiel):

Zeile 0: 0830000 Umsatzerlöse 7 %

Zeile 1: 0813000 WVK außerhalb EG 0

Zeile 2: Nettoumsatz - Hilfsbetriebe

Zeile 3: ------------------------------

usw...

So und nu will: In der gesamten Spalte, wenn in der Zelle eine siebenstellige Zahl auftaucht, diese abtrennen und in eine neue Spalte schreiben (die ist schon vorhanden), und das für die gesamte Spalte (umfasst ca. 7000 Zeilen). Wenn da keine seibenstellige zahl auftauch, dann soll er die Zelle in Ruhe lassen!

So, danke schön bis denn

Geschrieben

Hi!

Ich würde sagen, da hilft die ein Makro am Besten!

Den Import kannst du ja z.B. aufnehmen. (Extras -> Makro -> Aufzeichnen)

Für die Abarbeitung der einzelnen Zellen, wirst du wohl oder übel selbst Hand anlegen müssen und den VBA-Code selbst eingeben müssen. Wie sieht es denn mit deinen Kenntnissen von VBA unter Excel aus? Beherscht du das, oder bist du ein Newbie?

Das ganz könnte z.B. so aussehen:

1. Zelle 1 wählen

2. Text lesen

3. 8-stellige Zahl suchen

4. Zelleninhalt ggf. teilen

5. Teiltexte in entsprechende Zellen schreiben.

6. Nächste Zelle wählen und wieder zu Punkt 2, bis Tabellenende erreich ist.

Vielleicht hilft dir das ja schon.

Sonst melde dich einfach nochmal!

CU

Magoo

Geschrieben

Also ich kann den VBA Code schon lesen und bearbeiten...aber wie bekomme ich da eine Abfrage hin und eine schleife, denn der muss ja die gesamte Spalte durchgehen, und dabei immer prüfen, ob es nur text oder eben diese zahlen enthält!

Geschrieben

Hehe. Zählschleife ist gut! Würde ich auch machen. Aber am Anfang des Makros herausfinden, wieviele Zeilen die Tabelle hat. Ist mit einem kleinen Trick ganz einfach rauszufinden:

 


' Letzte Zelle makrieren

Selection.SpecialCells(xlLastCell).Select

' Zelleninhalt sichern

Let Temp = ActiveCell

' Zelleninhalt löschen

ActiveCell.Clear

' Zellenformat auf "Zahl" umstellen

Selection.NumberFormat = "0.00"

' Zeilenzahl in die Zelle schreiben

ActiveCell.FormulaR1C1 = "=ROW()"

' Zeilenzahl in Variablen sichern

Let Zeilen = ActiveCell

' Zellenformat auf "Text" umstellen

Selection.NumberFormat = "@"

' Zelleninhalt wiederherstellen

ActiveCell.FormulaR1C1 = Temp


'...

' Makro krimskrams

'...


' von Zeile 1 bis Zeile x durchlaufen

for i = 1 to Zeilen


    '...

    ' Makro krimskrams

    '...


next i


So in der Art würde ich vorgehen. Die Zahl kannst du ja mit den Funktion MID, LEFT und RIGHT aufteilen. Der Rest ist Standard.

Hoffe das reicht dir! Wenn nicht, ruhig wieder melden :D

CU

Magoo

Geschrieben

ja das ist schon sehr dicht dran, aber ich habe auch was gefunden, nämlich daten-->text in spalten, das verinfacht alles, aber das Problem sind immer noch die Zellen in denen NUR text drinsteht, die dürfen net berrührt werden, bei dem Text in Spalten wird aber gnadenlos in allen Zellen gewütet und das will ich net...THX

Geschrieben

Also folgendes:

Das Excelmakro wütet erst dann in der Zelle rum, bis du da was reingeschrieben hast. Beim Lesen der Zelleninhalte passiert eigentlich nichts. Das heisst, du kannst ja erstmal den Zelleninhalt lesen und dann gucken, ob eine 8-stellige Zahl in diesem Text enthalten ist. Wenn nicht, gehst du einfach weiter zur nächsten Zeile. Wenn ja, dann teilste den Text auf und schreibst die entsprechenden Stücke in die entsprechenden Zeilen.

Steht die 8-stellige Zahl denn immer am Anfang des Textstückes? Oder kann sie auch mittendrin stehen?

So. Hier nochmal kurz beschrieben, wie if funktioniert:



if (Code = 1) then

    ...

else

    ...

end if


Hehe. Wenn ich eine Antwort auf meine Frage hab, dann kann ich dir auch mal eine genauere Lösung schicken.

CU

Magoo

Geschrieben

Ja. Das ist doch schonmal was! Ich werde mal sehen, ob ich dir noch ein Beispiel posten kann. Habe jetzt gerade keine Zeit mehr. Hab was wichtiges zu erledigen.

Ich werde aber versuchen, dir so schnell wie möglich zu helfen. Das kriegen wir auf jeden Fall hin!

Vielleicht ist ja auch ein anderes Mitglied so freundlich und liefert hier mal ein schönes Beispiel, bezogen auf Durone's Angaben, ab. Das wäre doch mal was!

CU

Magoo

PS: Die Zahl kannst du dann auf jeden Fall mit LEFT auslesen. 8 Stellen. Dann versuchst du den gelesenen Text in eine Zahl umzuwandeln. Schlägt dies fehl, dann ist keine 8-stellige Zahl vorhanden :-) Andernfalls wohl.

Geschrieben

Hehe. Hier ist meine Lösung:


Sub Makro1()


    ' Herausfinden der Anzahl der Zeilen

    Selection.SpecialCells(xlLastCell).Select

    Let Temp = ActiveCell

    ActiveCell.Clear

    Selection.NumberFormat = "0.00"

    ActiveCell.FormulaR1C1 = "=ROW()"

    Let Zeilen = ActiveCell

    Selection.NumberFormat = "@"

    ActiveCell.FormulaR1C1 = Temp


    ' Zelle A1 auswählen

    Range("A1").Select


    ' von der ersten bis zur letzten Zeile

    For i = 1 To Zeilen


        ' Die Zelle der Spalte A, Zeile i auswählen

        Range("A" + CStr(i)).Select

        ' Zelleninhalt auslesen

        Let Zelleninhalt = ActiveCell

        ' Die ersten 8 Zeichen aus dem Zelleninhalt auslesen

        Let Temp = Left(Zelleninhalt, 8)


        ' Die ersten 8 Stellen sind eine Zahl

        If (Temp >= "00000000" And Temp <= "99999999") Then

            ' Die Zahl in Spalte B, Zeile i schreiben

            Range("B" + CStr(i)).Select

            ActiveCell.FormulaR1C1 = Temp

            ' Den Rest des Textes in Spalte C, Zeile i schreiben

            Range("C" + CStr(i)).Select

            ActiveCell.FormulaR1C1 = Mid(Zelleninhalt, 9, (Len(Zelleninhalt) - 8))

        End If    ' Ende von: -> If (Temp >= "00000000" And Temp <= "99999999") Then <-

    Next i    ' und wieder von vorn...

End Sub

Meine Excel-Dokument sah aus, wie ganz oben beschrieben!

Auf Wunsch werde ich es aber auch per e-Mail verbreiten.

Hoffe, das hilft weiter!

Achja. Den import der Textdatei kann einfach aufgezeichnet werden. Der entsprechende VBA-Text muss dann einfach unter "Sub Makro1()" eingefügt werden.

Das wars. :eek:

CU

Magoo :cool:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...