Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textteile aus Zelle extrahieren

Textteile aus Zelle extrahieren
20.02.2015 08:38:03
Peter
Moin,
mir schwirrt der Kopf von Left, Right, Mid, InStr etc.
Ich habe folgendes Problem:
Mein Tabellenblatt hat den Namen Kassenumsaetze_92781.
In der Tabelle finde ich eine Überschrift die so aussieht:
3.4.1 Kassenumsätze Einkauf für 0092781 Weizenbrötchen 65g (WG74 Bake off) für KW 51.2014 bis KW 05.2015
Aus dieser Überschrift muss ich nun folgende Informationen extrahieren:
Artikelbezeichnung (hier: Weizenbrötchen)
Gewicht (hier: 65)
KWStart (hier: 51)
JahrStart (hier: 2014)
KWEnde (hier: 05)
JahrEnde (hier: 2015)
Wie gesagt, ich habe mir schon mit obigen Funktionen den Wolf getippt. Ein Ansatz war, einfach die Zeichen manuell zu zählen, aber die Längen der Angaben (3.4.1 kann auch 3.4.12 sein, die Artikelbezeichnung wechselt, das Gewicht kann auch 4 stellig sein) variieren.
Hat jemand eine Idee?
Gruß,
Peter

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textteile aus Zelle extrahieren
20.02.2015 09:38:50
UweD
Hallo
passt das?

Option Explicit
Sub Broetchen()
Dim StrTXT$, TMPT$, TMP1%, TMP2%
Dim TB
Dim StrBez$, Gew%
Dim KWStart%, JahrStart%
Dim KWEnde%, JahrEnde%
Set TB = Sheets("Tabelle1")
With TB
StrTXT = .Cells(1, 1)
'3.4.1 Kassenumsätze Einkauf für 0092781 Weizenbrötchen 65g (WG74 Bake off) für KW 51. _
2014 bis KW 05.2015
'Artikelbezeichnung
TMPT$ = Application.Substitute(StrTXT, " ", "#", 5)' 5.Leerzeichen
TMP1 = InStr(1, TMPT$, "#")
TMPT$ = Application.Substitute(StrTXT, " ", "#", 6)' 6.Leerzeichen
TMP2 = InStr(1, TMPT$, "#")
StrBez$ = Mid(StrTXT, TMP1 + 1, TMP2 - TMP1 - 1)
'KW Jahr
TMP1 = InStr(1, StrTXT, "KW ")
KWStart = Mid(StrTXT, TMP1 + 3, 2)
JahrStart = Mid(StrTXT, TMP1 + 6, 4)
TMP2 = InStr(TMP1 + 3, StrTXT, "KW ")
KWEnde = Mid(StrTXT, TMP2 + 3, 2)
JahrEnde = Mid(StrTXT, TMP2 + 6, 4)
'Gewicht
TMPT$ = Application.Substitute(StrTXT, " ", "#", 6)' 6.Leerzeichen
TMP1 = InStr(1, TMPT$, "#")
TMP2 = InStr(TMP1 + 1, StrTXT, "g ")
Gew = Mid(StrTXT, TMP1 + 1, TMP2 - TMP1 - 1)
.Cells(3, 1) = "Artikelbezeichnung:": .Cells(3, 2) = StrBez
.Cells(4, 1) = "Gewicht:": .Cells(4, 2) = Gew
.Cells(5, 1) = "KWStart": .Cells(5, 2) = KWStart
.Cells(6, 1) = "JahrStart": .Cells(6, 2) = JahrStart
.Cells(7, 1) = "KWEnde": .Cells(7, 2) = KWEnde
.Cells(8, 1) = "JahrEnde": .Cells(8, 2) = JahrEnde
End With
End Sub
Gruß UweD

Anzeige
AW: Textteile aus Zelle extrahieren
20.02.2015 09:49:42
Peter
Genial. Danke.

sicher?
20.02.2015 10:13:17
Erich
Hi Peter und Uwe,
ist denn sichergestellt, dass die Artikelzez. IMMER zwischen dem 5. und dem 6. Leerzeichen steht,
dass also der Textteil, der "Kassenumsätze Einkauf für 0092781" entspricht,
immer genau 3 Leerzeichen enthält?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: sicher?
20.02.2015 10:37:25
UweD
Hallo Erich, hallo Peter
Der Einwand ist berechtigt.
Ich hab mich an "eigenen automatischen Berichten" orientiert, das "Beiwerk" ist identisch, und beinhaltet nur bestimmte variable Werte....
Bezeichnungen aus mehreren Worten bleibt ebenfalls ein Problem...
Das kann man aus einer Beispielzeile schlecht ableiten.
Umfangreichere Musterdatei wäre da sinnvoll..
Gruß UweD

Anzeige
AW: sicher?
20.02.2015 11:01:39
Peter
Hallo zusammen,
die Einwände sind an dieser Stelle (Gott sei Dank) unberechtigt. Die Berichte sind automatisiert und die Überschrift enthält zwar variable Textlängen, aber der Aufbau, speziell die Anzahl und Abfolge der Leerzeichen, sind immer identisch.
Die Frage ist natürlich, ob es in Zukunft evtl. Abweichungen geben könnte und wie weit man hier in die Zukunft planen sollte.
Gruß,
Peter

AW: sicher?
20.02.2015 11:53:39
UweD
Hi
Artikelbezeichnungen aus mehreren Worten ginge so.... (mit InStrRev)
    Sub Broetchen()
Dim StrTXT$, TMPT$, TMP1%, TMP2%, TMP3%
Dim TB
Dim StrBez$, Gew%
Dim KWStart%, JahrStart%
Dim KWEnde%, JahrEnde%
Set TB = Sheets("Tabelle1")
With TB
StrTXT = .Cells(1, 1)
'3.4.1 Kassenumsätze Einkauf für 0092781 Weizen Brötchen groß 65g (WG74 Bake off) fü _
r KW 51.2014 bis KW 05.2015
'Artikelbezeichnung
TMPT$ = Application.Substitute(StrTXT, " ", "#", 5) ' 5.Leerzeichen
TMP1 = InStr(1, TMPT$, "#")
TMP2 = InStr(TMP1 + 1, StrTXT, "g ")
TMP3 = InStrRev(StrTXT, " ", TMP2) 'Leerzeichen vor Gewicht
StrBez$ = Mid(StrTXT, TMP1 + 1, TMP3 - TMP1 - 1)
'Gewicht
Gew = Mid(StrTXT, TMP3 + 1, TMP2 - TMP3 - 1)
'KW Jahr
TMP1 = InStr(1, StrTXT, "KW ")
KWStart = Mid(StrTXT, TMP1 + 3, 2)
JahrStart = Mid(StrTXT, TMP1 + 6, 4)
TMP2 = InStr(TMP1 + 3, StrTXT, "KW ")
KWEnde = Mid(StrTXT, TMP2 + 3, 2)
JahrEnde = Mid(StrTXT, TMP2 + 6, 4)
.Cells(3, 1) = "Artikelbezeichnung:": .Cells(3, 2) = StrBez
.Cells(4, 1) = "Gewicht:": .Cells(4, 2) = Gew
.Cells(5, 1) = "KWStart": .Cells(5, 2) = KWStart
.Cells(6, 1) = "JahrStart": .Cells(6, 2) = JahrStart
.Cells(7, 1) = "KWEnde": .Cells(7, 2) = KWEnde
.Cells(8, 1) = "JahrEnde": .Cells(8, 2) = JahrEnde
End With
End Sub

Gruß UweD

Anzeige
AW: sicher?
20.02.2015 11:58:25
Peter
Nochmal Danke :-)

mehr Infos?
20.02.2015 09:55:56
Erich
Hi Peter,
ein paar mehr Infos darüber, was in dem Text sicher ist und was variabel, wären wohl gut.
Ein paar Fragen dazu:
a) Kommt der Text "für 0092781" oder "0092781" in jeder Zeile vor?
b) Wenn ja, ist "0092781" immer siebenstellig? Ist die Zahl dem Blattnamen zu entnehmen? (hier 92781)
c) Ist das Gewicht immer in "g" für Gramm gegeben, oder kommt vielleicht auch "kg" vor?
d) Steht hinter dem Gewicht immer ein Text in Klammern?
Wenn die Zahl 92781 nicht immer im Text steht, stellt sich die Frage, wie man den Text vor der Artikelbezeichnung
von der Artikelbezeichnung trennen kann.
Hier noch zwei Textbeispiele unter dem deinigen. Inwieweit kann das auftreten?
3.4.1 Kassenumsätze Einkauf für 0092781 Weizenbrötchen 65g (WG74 Bake off) für KW 51.2014 bis KW 05.2015
13.14.12 Dreimal Schwarzer Kater für 0092781 Rote Beete 4,5 kg (ein Text) für KW 52.2014 bis KW 6.2015
13.14.12 Dreimal Schwarzer Kater Rote Beete 4,5g für KW 52.2014 bis KW 06.2015
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

346 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige