Excel - Zeichen suchen und Text bis dahin kopieren
Hallo zusammen
wieder einmal eine weitere Frage von mir
Diesmal geht es um Excel und VBA. Ich habe einen Auftrag, bei dem ich unter Anderem in einer Zelle ein Raute-Zeichen oder einen Abstand (je nachdem) suchen muss, den Text vor diesem Zeichen in ein Array und den Text danach in ein anderes Array speichern muss.
Nur habe ich keine Ahnung, wie das geht und irgendwie muss es ja gehen... Wäre sehr froh über eine baldige Antwort...
wieder einmal eine weitere Frage von mir
Diesmal geht es um Excel und VBA. Ich habe einen Auftrag, bei dem ich unter Anderem in einer Zelle ein Raute-Zeichen oder einen Abstand (je nachdem) suchen muss, den Text vor diesem Zeichen in ein Array und den Text danach in ein anderes Array speichern muss.
Nur habe ich keine Ahnung, wie das geht und irgendwie muss es ja gehen... Wäre sehr froh über eine baldige Antwort...
19 Antworten
- LÖSUNG 8644 schreibt am 14.08.2006 um 14:47:41 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 15:29:13 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 15:31:13 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 15:34:23 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 15:47:38 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 16:18:24 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 19:43:20 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 08:21:02 Uhr
- LÖSUNG 8644 schreibt am 15.08.2006 um 08:27:14 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 08:47:07 Uhr
- LÖSUNG 8644 schreibt am 15.08.2006 um 09:00:56 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 09:23:09 Uhr
- LÖSUNG Paescu schreibt am 21.08.2006 um 10:32:47 Uhr
- LÖSUNG Biber schreibt am 21.08.2006 um 12:09:21 Uhr
- LÖSUNG Paescu schreibt am 23.08.2006 um 09:05:41 Uhr
- LÖSUNG miniversum schreibt am 24.08.2006 um 13:30:47 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 10:04:14 Uhr
- LÖSUNG miniversum schreibt am 28.08.2006 um 19:30:37 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 19:40:02 Uhr
- LÖSUNG miniversum schreibt am 28.08.2006 um 19:30:37 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 10:04:14 Uhr
- LÖSUNG miniversum schreibt am 24.08.2006 um 13:30:47 Uhr
- LÖSUNG Paescu schreibt am 23.08.2006 um 09:05:41 Uhr
- LÖSUNG Biber schreibt am 21.08.2006 um 12:09:21 Uhr
- LÖSUNG Paescu schreibt am 21.08.2006 um 10:32:47 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 09:23:09 Uhr
- LÖSUNG 8644 schreibt am 15.08.2006 um 09:00:56 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 08:47:07 Uhr
- LÖSUNG 8644 schreibt am 15.08.2006 um 08:27:14 Uhr
- LÖSUNG Paescu schreibt am 15.08.2006 um 08:21:02 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 19:43:20 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 16:18:24 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 15:47:38 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 15:34:23 Uhr
- LÖSUNG 8644 schreibt am 14.08.2006 um 15:31:13 Uhr
- LÖSUNG Paescu schreibt am 14.08.2006 um 15:29:13 Uhr
LÖSUNG 14.08.2006 um 14:47 Uhr
LÖSUNG 14.08.2006 um 15:29 Uhr
LÖSUNG 14.08.2006 um 15:31 Uhr
LÖSUNG 14.08.2006 um 15:34 Uhr
LÖSUNG 14.08.2006 um 15:47 Uhr
Erstmal zur Erklärung: Eine Zeichenkette (String) ist bereits ein Array, welches aus einzelnen Zeichen besteht, welche über ihren Index angesprochen werden können:
Bsp.
Mein_Feld = "Psycho Dad"
Ein_Zeichen = Mein_Feld(3)
Ein_Zeichen ==> "y"
Und nun zu dir: Ich bin mir sicher, dir helfen zu können. Dazu sind dann aber doch genauere Angaben nötig. In welcher (welchen) Zellen stehen die zu analysierenden Daten?
In was für ein Dokument sollen die "Zieldaten" gespeichert werden. Wenn es sich hier auch um eine Excel-Tabelle handelt, geht es auch ohne Makro.
Beschreib dein Vorhaben mal etwas genauer!
Psycho
P.S. Klingt ja ganz schön Oberlehrermäßig -> Sorry 8-)
Bsp.
Mein_Feld = "Psycho Dad"
Ein_Zeichen = Mein_Feld(3)
Ein_Zeichen ==> "y"
Und nun zu dir: Ich bin mir sicher, dir helfen zu können. Dazu sind dann aber doch genauere Angaben nötig. In welcher (welchen) Zellen stehen die zu analysierenden Daten?
In was für ein Dokument sollen die "Zieldaten" gespeichert werden. Wenn es sich hier auch um eine Excel-Tabelle handelt, geht es auch ohne Makro.
Beschreib dein Vorhaben mal etwas genauer!
Psycho
P.S. Klingt ja ganz schön Oberlehrermäßig -> Sorry 8-)
LÖSUNG 14.08.2006 um 16:18 Uhr
Aaalso
mein Auftrag etwas genauer: Ich habe eine ziemlich umfangreiche Tabelle von einer Mitarbeiterin bekommen. Diese will nun, dass ich Daten aus vier verschiedenen Registern in ein neu erstelltes Dokument schreibe. Im ersten Register, das bearbeitet werden muss, ist in Zelle A2 die Anzahl (geht um Bestellungen). Nebenan in der Zelle B2 ist dann eine Part-Nummer. Diese besteht aus ein paar Zeichen, einem Raute-Zeichen oder einem Leerschlag und dann wieder ein paar Zeichen, also z.B. so: U5466S#4NK
Nun muss ich alle "vollen" Zellen in diesem Register durchgehen (mit "alle" meine ich alle Zellen in den Spalten A und B) und diese will ich in ein Array speichern. Mit der Anzahl ist das kein Problem, geht super. Jedoch möchte die Mitarbeiterin, dass die Part-Nummer in Spalte B in eine Artikel-Nummer und eine Option-Nummer aufgeteilt wird. Der Teil vor dem Raute-Zeichen soll Artikel-Nummer sein, der Teil danach Option-Nummer. Die Nummern sind immer unterschiedlich lang, kann also nicht immer die gleiche Anzahl stellen bis zum Raute-Zeichen nehmen... Ich möchte dann von jedem Artikel die Artikel-Nummer und die Option-Nummer in das Array speichern. Wenn alles durch ist, muss das nächste benötigte Register angewählt werden und dasselbe Spiel nochmal, einfach in ein anderes Array. Wenn dann alle vier Register durch sind, wird ein neues Dokument erzeugt, wo dann die Anzahl, Artikel-Nummer und Option-Nummer eingetragen wird...
Ui, jetzt habe ich aber genug geschrieben :-P Hoffe jetzt genügend Auskunft gegeben zu haben und wenn nicht, dann einfach nachfrage
Gruss Pascal
edit: Habe noch vergessen zu sagen, dass das Raute-Zeichen oder der Leerschlag wegfallen kann.
Nun muss ich alle "vollen" Zellen in diesem Register durchgehen (mit "alle" meine ich alle Zellen in den Spalten A und B) und diese will ich in ein Array speichern. Mit der Anzahl ist das kein Problem, geht super. Jedoch möchte die Mitarbeiterin, dass die Part-Nummer in Spalte B in eine Artikel-Nummer und eine Option-Nummer aufgeteilt wird. Der Teil vor dem Raute-Zeichen soll Artikel-Nummer sein, der Teil danach Option-Nummer. Die Nummern sind immer unterschiedlich lang, kann also nicht immer die gleiche Anzahl stellen bis zum Raute-Zeichen nehmen... Ich möchte dann von jedem Artikel die Artikel-Nummer und die Option-Nummer in das Array speichern. Wenn alles durch ist, muss das nächste benötigte Register angewählt werden und dasselbe Spiel nochmal, einfach in ein anderes Array. Wenn dann alle vier Register durch sind, wird ein neues Dokument erzeugt, wo dann die Anzahl, Artikel-Nummer und Option-Nummer eingetragen wird...
Ui, jetzt habe ich aber genug geschrieben :-P Hoffe jetzt genügend Auskunft gegeben zu haben und wenn nicht, dann einfach nachfrage
Gruss Pascal
edit: Habe noch vergessen zu sagen, dass das Raute-Zeichen oder der Leerschlag wegfallen kann.
LÖSUNG 14.08.2006 um 19:43 Uhr
Hi,
also wenn das so ist, würde ich folgende Variante wählen:
Du benutzt die beiden Formeln und kopierst sie nach unten.
Dann markierst du die Ergebnisse und kopierst sie in die Zwischenablage.
Nun öffnest du das neue Dokument und gehst über das Menü Bearbeiten -> Inhalte einfügen -> Werte.
Das geht meiner Meinung nach am schnellsten.
Psycho
also wenn das so ist, würde ich folgende Variante wählen:
Du benutzt die beiden Formeln und kopierst sie nach unten.
Dann markierst du die Ergebnisse und kopierst sie in die Zwischenablage.
Nun öffnest du das neue Dokument und gehst über das Menü Bearbeiten -> Inhalte einfügen -> Werte.
Das geht meiner Meinung nach am schnellsten.
Psycho
LÖSUNG 15.08.2006 um 08:21 Uhr
LÖSUNG 15.08.2006 um 08:27 Uhr
LÖSUNG 15.08.2006 um 08:47 Uhr
LÖSUNG 15.08.2006 um 09:00 Uhr
LÖSUNG 15.08.2006 um 09:23 Uhr
LÖSUNG 21.08.2006 um 10:32 Uhr
So, habe es geschafft, dass es getrennt wird, nun muss ich das nur noch automatisieren und alles in ein Array und nicht in ne Zelle schreiben...
Meine Lösung sieht so aus:
Hat vielleicht jemand noch Verbessernungsvorschläge oder so etwas?
Meine Lösung sieht so aus:
Do Until Cells(1, 1).Characters(i, 1).Text = "#"
Cells(2, 1) = CStr(Cells(2, 1)) + Cells(1, 1).Characters(i, 1).Text
i = i + 1
links = links + 1
Loop
For links = links To Cells(1, 1).Characters.Count
Cells(3, 1) = CStr(Cells(3, 1)) + Cells(1, 1).Characters(links, 1).Text
Next
LÖSUNG 21.08.2006 um 12:09 Uhr
Moin Päscu,
VB ist ja nicht gerade mein Fachgebiet,...
Aber ein erstes Zusammendampfen Deines Ansatzes ergibt diesen Basis-Schnipsel:
Wenn also in der ersten Spalte diese Strings a la "U5466S#4NK" stehen, werden in die zwei Spalten rechts daneben "U5466S" und "4NK" geschrieben.
Und zwar ROWMAX = 5000x.
Hope that Helps
Biber
VB ist ja nicht gerade mein Fachgebiet,...
Aber ein erstes Zusammendampfen Deines Ansatzes ergibt diesen Basis-Schnipsel:
Sub SubstringGeraffel()
Const ROWMAX = 5000
Dim i, nRow As Long
For nRow = 1 To ROWMAX
i = InStr(1, Cells(nRow, 1), "#")
If i > 0 Then
Cells(nRow, 2) = Mid(Cells(nRow, 1), 1, i - 1)
Cells(nRow, 3) = Mid(Cells(nRow, 1), i + 1)
End If
Next
End Sub
Und zwar ROWMAX = 5000x.
Hope that Helps
Biber
LÖSUNG 23.08.2006 um 09:05 Uhr
LÖSUNG 24.08.2006 um 13:30 Uhr
LÖSUNG 28.08.2006 um 10:04 Uhr
@miniversum
Funktioniert die Split-Funktion auch mit zweidimensionalen Arrays? Habe nur was mit eindimensionalen Arrays gefunden in der Hilfe...
Pascal
Funktioniert die Split-Funktion auch mit zweidimensionalen Arrays? Habe nur was mit eindimensionalen Arrays gefunden in der Hilfe...
Pascal
LÖSUNG 28.08.2006 um 19:30 Uhr
LÖSUNG 28.08.2006 um 19:40 Uhr
Hmm... *-) hat was, dann muss ich einfach noch diese Variabeln dem Array zuweisen... So weit habe ich gar noch nicht gedacht... Habe meine alte, 15-zeilige Version beibehalten 
Ich habe einfach probiert, diese zwei Strings direkt in das zweidimensionale Array zu speichern, aber mit der Split-Funktion ist da nichts zu machen... Werde es mit Variabeln probieren, morgen dann
Danke noch für den Tipp
Pascal
Ich habe einfach probiert, diese zwei Strings direkt in das zweidimensionale Array zu speichern, aber mit der Split-Funktion ist da nichts zu machen... Werde es mit Variabeln probieren, morgen dann
Danke noch für den Tipp
Pascal