Microsoft Excel

Herbers Excel/VBA-Archiv

Größen auslesen

Betrifft: Größen auslesen von: Nils
Geschrieben am: 08.09.2020 14:16:20

Hallo zusammen,

aus der in Spalte A hinterlegten Information sollen immer die Größen entsprechend der manuellen Eingabe in Spalte B und C herausgelöst werden.

https://www.herber.de/bbs/user/140126.xlsx

Diese Angaben sind je nach Produkt unterschiedlich in G, ML, KG etc. angegeben und auf zwei Spalten aufzuteilen.

In Ausnahmefällen kennzeichnet @ einen außer Vertrieb befindlichen Artikel, dieses Symbol soll bei der Abfrage ignoriert werden.

Ich habe versucht, mir mit einer „Teil“-Funktion oder ‚Text in Spalten‘ selbst zu helfen, bin aber an den unterschiedlich gestalteten Textlängen gescheitert.

Hat jemand eine Idee, wie man das mit einer Formel oder einem Makro lösen kann?

Danke vorab und viele Grüße
Nils

Betrifft: AW: Größen auslesen
von: Joachim Lewandowski
Geschrieben am: 08.09.2020 14:34:23

Hallo Nils,
deine Ausgangsdaten weisen eine Regelmäßigkeit auf.
Die interessante Größe steht an letzter Stelle (es sei denn das @ steht an letzter Stelle).
Also hinter dem ersten Leerzeichen von rechts gesehen.
frage ab ob rechts ein @ steht
Wenn ja finde raus wo das rechteste Leerzeichen steht (Teil(a1;Länge(a1)-1;1)(Teil(a1;Länge(a1)-2;1)(Teil(a1;Länge(a1)-2;1)
Wenn Du weisst wo das Leerzeichen steht, hol dir den Text rechts davon und Schneide ggf. das @ ab.
Hilft Dir das schon als Weg, oder brauchst Du stärkere Unterstützung?
Gruß

Betrifft: AW: eine Möglichkeit dazu wäre ...
von: neopa C
Geschrieben am: 08.09.2020 14:41:19

Hallo Nils,

... wie folgt:

In C2 mit einer Formel die lupo mal aufgezeigt hat so:

=GLÄTTEN(RECHTS(WECHSELN(WECHSELN(A2;" @";"");" ";WIEDERHOLEN(" ";99));3))


und mit dieser Methode wäre es etwas erweitert dann auch für B2 zu realisieren, z.B. so:

=--WECHSELN(GLÄTTEN(RECHTS(WECHSELN(GLÄTTEN(LINKS(A2;SUCHEN(" "&C2&" ";A2&" ")));" ";WIEDERHOLEN(" ";99));5));".";",")

Beide Formeln nach unten kopieren.

Gruß Werner
.. , - ...

Betrifft: RegEx UDF
von: ChrisL
Geschrieben am: 08.09.2020 14:54:36

Hi Nils

Weil mir RegEx gefällt, hier noch eine Alternativlösung. Code in ein Standardmodul kopieren und anschliessend als normale Formel verwendet:
=myRegExSpecial(A2;0)
=myRegExSpecial(A2;1)
Public Function myRegExSpecial(TextInput As String, intTeil As Integer) As String
    Dim regEx As Object
    Dim matches
    Set regEx = CreateObject("VBscript.regexp")
    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "(\d+\ \w+)|(\d+\.\d+\ \w+)"
    End With
    If regEx.test(TextInput) Then
        Set matches = regEx.Execute(TextInput)
        myRegExSpecial = Split(matches(matches.Count - 1).Value, " ")(intTeil)
    End If
End Function
cu
Chris

Betrifft: AW: RegEx UDF
von: Günther
Geschrieben am: 08.09.2020 15:38:26

Moin Nils,
als Alternative ohne Formeln und ohne VBA bietet sich (natürlich) noch Power Query an...
 
Gruß
Günther  |  mein Excel-Blog

Betrifft: oder Power-Query
von: ChrisL
Geschrieben am: 08.09.2020 16:50:33

Hi Günther

Stimmt PQ geht erstaunlich einfach, weil "Spalte nach Trennzeichen teilen" die Option "Beim äussersten rechten Trennzeichen" bietet (von rechts nach links).


let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Ausgangsdaten", type text}}),
#"Duplizierte Spalte" = Table.DuplicateColumn(#"Geänderter Typ", "Ausgangsdaten", "Ausgangsdaten - Kopie"),
#"Ersetzter Wert" = Table.ReplaceValue(#"Duplizierte Spalte"," @","",Replacer.ReplaceText,{"Ausgangsdaten - Kopie"}),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Ersetzter Wert", "Ausgangsdaten - Kopie", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Ausgangsdaten - Kopie.1", "Ausgangsdaten - Kopie.2"}),
#"Spalte nach Trennzeichen teilen1" = Table.SplitColumn(#"Spalte nach Trennzeichen teilen", "Ausgangsdaten - Kopie.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Ausgangsdaten - Kopie.1.1", "Ausgangsdaten - Kopie.1.2"}),
#"Geänderter Typ2" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen1",{{"Ausgangsdaten - Kopie.1.1", type text}, {"Ausgangsdaten - Kopie.1.2", type number}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ2",{"Ausgangsdaten - Kopie.1.1"})
in
#"Entfernte Spalten"

cu
Chris

Betrifft: AW: oder Power-Query
von: Günther
Geschrieben am: 08.09.2020 17:15:44

Ja, ich hatte das fast genau so gemacht ... ;-) Das ist wirklich ein problemloser Weg, der gut erlernbar ist.
 
Gruß
Günther  |  mein Excel-Blog

Betrifft: GLÄWEXWDH
von: lupo1
Geschrieben am: 08.09.2020 16:22:24

B2[:C2]: =GLÄTTEN(WECHSELN(RECHTS(WECHSELN(WECHSELN($A2;" @";);" ";WIEDERHOLEN(" ";99));297-SPALTE(A2)*99);C2;))

Zu dem Dezimalpunkt hatte ich jetzt keine Lust mehr. Das kannst Du vorher machen.

Betrifft: hab neopa nicht gesehen ... danke!
von: lupo1
Geschrieben am: 08.09.2020 16:24:09



Betrifft: AW: hab neopa nicht gesehen ... danke!
von: Nils
Geschrieben am: 08.09.2020 16:46:40

Hallo zusammen,

herzlichen Dank für die vielen Ansätze. Das hätte ich definitiv nicht selbst herausgearbeitet und es hilft mir für eine bevorstehende Analyse sehr!

Viele Grüße,

Nils

Betrifft: AW: Größen auslesen
von: Daniel
Geschrieben am: 08.09.2020 17:17:14

HI
mal ein Anzsatz mit Text in Spalten:

1. Teile den Text mit TEXT IN SPALTEN und dem Leerzeichen als Trenner auf.
füge dabei die Werte ab Spalte D ein. Hierbei kannst du auch gleich einstellen, dass du den Punkt als Dezimalzeichen hast.

2. die Werte kannst du dann so auslesen:
B2: =INDEX($E2:$z2;1;ANZAHL2($E2:$z2)-1-ZÄHLENWENN($E2:$z2;"@"))
C2: =INDEX($E2:$z2;1;ANZAHL2($E2:$z2)-0-ZÄHLENWENN($E2:$z2;"@"))

Gruß Daniel

Beiträge aus dem Excel-Forum zum Thema "Größen auslesen"