PDA

Vollständige Version anzeigen : Formel für Teilenummern


Harima
03.10.2016, 16:39
Erstmal Hallo an alle!

Ich bräuchte eine Formel in der Spalte "B" die mir Teilenummern generiert.
Erste Teil aus Spalte "C" rot makiert 3-4 Stellen vor einem Buchstaben.
dann aus Spalte H den 2ten und 3ten Buchstaben oder Zahl, danach das selbe aus Spalte J.
Danach kommt aus H die zahl oder Zahlen zwischen den Bindestrichen gefolgt von J alles zischen den Bindestrichen.
Danach aus der Spalte H alles nach dem 2ten Bindestrich.
Anschließend ein Bindestrich und die Zahlen aus der Spalte F :-)
Ok schwer zu erklären habe die Datei angehängt und Farblich markiert was von wo nach Spalte "B" nacheinander eingefügt werden soll:boah:
Geht sowas mit einer Formel oder braucht man ein Marko?
Wär euch echt dankbar da ich das derzeit händisch eingeben muß und das bei hunderten Datensätzen!
Gruß und Dank Harry

Hajo_Zi
03.10.2016, 17:25
Hallo Harry,

wenn Du Teile per Formel zusammenfügst kannst Du keine unterschiedliche farbliche Markierung mach.
VBA sollte es ja nicht sein, da XLSX kein VBA hat.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Harima
03.10.2016, 17:28
Die Farbliche Markierung sollte nur darstellen, von wo was genommen werden soll, um es in der spalte b zusammenzufügen farbe spielt also keine Rolle

Hajo_Zi
03.10.2016, 17:32
dann schreibe es in der Art =C1&D1&"-"F1
ich erarbeite mir die Logik nicht und Dein Beitrag komme ich nicht klar.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Harima
03.10.2016, 17:48
die erklärung ist schwer zu verstehen ja, deshalb hab ich in den zellen das farblich markiert das in der Spalte B zusammengefügt werden soll.
daher is das farbliche unwichtig . man sieht in Spalte B die Farbe und man sieht in den anderen Spalten ebenfalls die selbe Farbe von den Teilen der Zelle die in Spalte B zusammengefügt werden sollen
diese art kann ich nicht schreiben da es aus jeder spalte nur ein bestimmter teil ist der in spalte B zusammengefügt werden soll.
weiters sind es nicht immer nur eine oder 2 stellen die aus einer spalte genommen werden soll.
daher die erklärung für rot die 3 oder 4 stellen vor einem folgenden buchstaben aus der spalte C.
Aus der Spalte H und J sin es jewils die 2un 3te position.
gefolgt aus der spalte H und J jeweils das zwischen den Bindestrichen.
Danach aus der Spalte H alles nach dem 2ten Bindestrich.
Anschließend ein Bindestrich und die Zahlen aus der Spalte F
so setzt sich die Teilenummer zusammen.
wenn es so einfach wäre =C1&D1&"-"F1 hätt ich die Formel selber gefunden .
Mein problem ist das es nur teile der Zellen sind und diese auch variieren
und die punkte sind eben nicht die ersten 3 oder 4 stellen aus der spalte c , sonder alle zahlen vor dem ersten buchstaben usw

Hajo_Zi
03.10.2016, 17:55
du kennst die Spalte aus der der erste Wert kommt und auch die weiteren. Wie in meinen Beispiel mit & verknüpfen.
Was ist daran schwierig?

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Fennek11
03.10.2016, 18:03
Hallo,

deine Anfrage ist eigentlich sehr einfach zu lösen, aber vielleicht deshalb nicht interessant genug.

Mit der Schleife


For i = 1 to len(cells(1,1)
Tx = mid(cells(1,1), i, 1)
next i


kannst du jeden Buchstaben eines String einzeln abfragen. Es folgt die Prüfung ob Buchstabe oder Zahl. Mit dem "&"-Zeichen kannst du zwei Strings verbinden.

Damit solltest du es lösen können, falls Problem auftreten melde dich.

mfg

Harima
03.10.2016, 18:04
ich bin ne niete auf dem gebiet formeln also kann ich eigentlich nur das einfachste.
ich scheitere schon am ersten wo ich in formel ausdrücken muß , das es die je nachdem , 3-4 stellen vor dem ersten buchstaben aus der spalte C nimmt .
daher wollt ich mich an Profis wenden um es nicht noch Jahrelang händisch eingeben zu müssen!

Harima
03.10.2016, 18:07
danke für eure Geduld, aber das einzige was mir helfen würde, wäre eine fertige formel die ich nur einfügen müsste.
danke Fennek11 für deinen Beitrag aber das ist mir zu hoch :-) wenn es so einfach zu lösen ist wie du behauptest, wäre ich für eine fertige Formel ewig dankbar!

Fennek11
03.10.2016, 18:13
Hallo,

ja, mit Formeln kann zumindest ich das nicht lösen, die gezeigten Fragmente sind VBA-Codes.

Zumindest heute werde ich keine Codes schreiben (die ich nicht auswendig kann).

Also du wirst deinen Code bekommen, auch wenn es morgen werden sollte, ist das auch kein Problem.

mfg

Harima
03.10.2016, 18:23
ma echt herzlichen dank macht nichts ob heut oder übermorgen . haupsache ich bekomm eine Lösung!
Und ein Makro wenn ich richtig verstanden habe mit VBA-Codes wär mir sehr genehm da ich es immer auf unterschiedliche Exceldateien anwenden muß
Mit bestem Dank im Voraus
Harald

Benutzername:
03.10.2016, 18:38
Tach Harald,

also ich fand die farbliche Markierung und die Beschreibung deines Problemes sehr gut. ;)

Der Code ist eigentlich schon fertig, ich möchte ich bloss nochmal kurz prüfen.

Der Beitrag hier nur kurz um doppelte Arbeit zu vermeiden und kurz Bescheid zu geben @Fennek11.

Gruss,
Stephan

Scorefun
03.10.2016, 18:55
Vorschlag von mir:

- VBA Editor (ALT+F11)
- Einfügen Modul

Diesen Code rein:


Public Function GenerateTeileNummer(c As String, h As String, j As String, f As String)
Dim stemp As String
Dim i As Integer

'1. Von 'c 3-4 Stellen vor einem Buchstaben
For i = 1 To Len(c)
If Asc(Mid(c, i, 1)) > 64 Then
stemp = Left(c, i - 1)
Exit For
End If
Next

'2. von H 2. und 3. Stelle
stemp = stemp & Mid(h, 2, 2)

'3. von J 2. und 3. Stelle
stemp = stemp & Mid(j, 2, 2)

'4 Von H zwischen den Bindestrichen
stemp = stemp & Split(h, "-", , vbTextCompare)(1)

'5 Von J zwischen den Bindestrichen
stemp = stemp & Split(j, "-", , vbTextCompare)(1)

'6 Von H nach dem 2. Bindestrich
stemp = stemp & Split(h, "-", , vbTextCompare)(2)

'7. Bindestrich + Inhalt von f
stemp = stemp & "-" & f

GenerateTeileNummer = stemp

End Function



In Deiner Beispieldatei dann in Spalte B die Formel:

=GenerateTeileNummer(C2;H2;J2;F2)

und runterkopieren

BTW: Dein manueller Eintrag in B12 dürfte falsch sein...

Benutzername:
03.10.2016, 19:18
Abend,

Und wieder mal zu langsam...

Wobei dein Split einiges eleganter ist als meine InStrRev und Co.

B12 sieht aber auch bei mir ziemlich falsch aus ;)

Gruss,
Stephan

Harima
03.10.2016, 19:29
Stimmt der Eintrag in B12 ist falsch ist mir gar nicht aufgefallen! Umso wichtiger die Automatisierung dieses Vorgangs um manuelle Fehler zu eliminieren.
ich werde es morgen sofort testen, da ich auf meinen Heimpc ein sehr veraltetest Excel verwende.
Ich werde euch auf jeden Fall bescheid geben, ob es funktionier und danke euch für eure bisherige Hilfe!
dieses Forum und ihr als Mitglieder ihr seid echt toll!!
wie gesagt ich gebe morgen bescheid ob alles funktioniert, aber Vertrau
jetzt schon das das funktioniert!
Dank euch vorerst
Schönen Abend noch
Harald

wick62
03.10.2016, 23:08
Hallo,
einmal alles mit Formeln, mit VBA kann ja das fast jeder ;-)

Gruß Hans

Scorefun
03.10.2016, 23:35
Hallo,
einmal alles mit Formeln, mit VBA kann ja das fast jeder ;-)

Gruß Hans

Das Ergebnis in L2 und L3 stimmt aber nicht...

Und was soll das sein?

=TEIL(H2;2;LÄNGE(H2)-LÄNGE(H2)+2)

Warum nicht direkt

=TEIL(H2;2;2)

;-)

wick62
03.10.2016, 23:52
Hallo Ralf,

schau ich mir Morgen an,
Danke für den Hinweis

Gute Nacht

Scorefun
04.10.2016, 00:08
Wenn Du die gefundene Formel (http://www.excelformeln.de/formeln.html?welcher=100) richtig anwendest, klappt das auch:

=VERWEIS(9^9;1*LINKS(C2;SPALTE(A2:Z2)))

;-)

wick62
04.10.2016, 09:23
Hallo,
hier noch mal die Tabelle mit den geänderten Formeln.
Dank an Ralf für den Hinweis.
Gruß Hans

Harima
04.10.2016, 12:28
Hallo scorefun,
Das läuft perfekt!!! Die lösung gefällt mir sehr.
Leider hab ich die erweiterten teilenummern übersehen.
Wie müsste ich den code ändern/erweitern, das er mir an das alles noch die Zellen Bindestrich G und Bindestrich L daranhängt?
Hatte probiert den punkt 7 des codes nich 2 mal daranzuhängen und den Buchstaben f durch g und l zu ersetzen doch da bekomm ich nur 2 bindestriche aber keine werte😂

Scorefun
04.10.2016, 13:15
Hallo scorefun,
Das läuft perfekt!!! Die lösung gefällt mir sehr.
Leider hab ich die erweiterten teilenummern übersehen.
Wie müsste ich den code ändern/erweitern, das er mir an das alles noch die Zellen Bindestrich G und Bindestrich L daranhängt?
Hatte probiert den punkt 7 des codes nich 2 mal daranzuhängen und den Buchstaben f durch g und l zu ersetzen doch da bekomm ich nur 2 bindestriche aber keine werte��

Nun ja... meiner Funktion werden Argumente übergeben (die ich der Übersichtlichkeit halber den Namen Deiner Spalten gegeben hatte)
Wenn da was hinzukommt, müssen natürlich auch diese Argumente hinzugefügt werden


Public Function GenerateTeileNummer(c As String, h As String, j As String, f As String, g as string, l as string)
Dim stemp As String
Dim i As Integer

'1. Von 'c 3-4 Stellen vor einem Buchstaben
For i = 1 To Len(c)
If Asc(Mid(c, i, 1)) > 64 Then
stemp = Left(c, i - 1)
Exit For
End If
Next

'2. von H 2. und 3. Stelle
stemp = stemp & Mid(h, 2, 2)

'3. von J 2. und 3. Stelle
stemp = stemp & Mid(j, 2, 2)

'4 Von H zwischen den Bindestrichen
stemp = stemp & Split(h, "-", , vbTextCompare)(1)

'5 Von J zwischen den Bindestrichen
stemp = stemp & Split(j, "-", , vbTextCompare)(1)

'6 Von H nach dem 2. Bindestrich
stemp = stemp & Split(h, "-", , vbTextCompare)(2)

'7. Bindestrich + Inhalt von f
stemp = stemp & "-" & f & "-" & g & "-" & l

GenerateTeileNummer = stemp

End Function


...und diese Argumente dann in der Zell-Formel ergänzen

=GenerateTeileNummer(C2;H2;J2;F2,G2,L2)

Harima
04.10.2016, 13:49
Herzlichen Dank ! Funktioniert perfekt. Ich weis gar nicht
Wie ich danken kann!!!
Schöne Grüße
Harald

Harima
04.10.2016, 16:01
Eine Kleinigkeit stört mich noch :-) sorry
Aber wenn in der Zelle L keine Daten sind sollte der Bindstrich auch nicht sein.
Das wäre wirklich der Letzte Punkt :-)
Danach schmeiß ich eine Freudenparty :-)

z.B 441CACA10105-300-FR mit Daten in L
oder 441CACA10105-300 ohne Daten in L
jetz habe ich ohne Daten

441CACA10105-300-

Scorefun
04.10.2016, 18:35
Muttu vorher prüfen, ob was drin steht...
(Code an entsprechender Stelle austauschen)


'7. Bindestrich + Inhalt von f + g + l
If l <> "" then
stemp = stemp & "-" & f & "-" & g & "-" & l
Else
stemp = stemp & "-" & f & "-" & g
End if

Harima
05.10.2016, 15:52
Perfekt ich kann gar nicht genug danken!
Ihr habt echt was drauf!

Gruß Harald

Scorefun
05.10.2016, 16:51
Ich nehme gerne Spenden per PayPal an...;-)