Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
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

Variablen im Text zeilenspezifisch ersetzen

Variablen im Text zeilenspezifisch ersetzen
18.12.2023 17:31:34
Koopert
Hallo, ich möchte gerne einen produktbezogenen Text, der Variablen enthält, im Klartext füllen lassen anhand von Werten, die ebenfalls in der Excel Datei stehen.

Hintergrund: Ich habe Produktinformationen in einem System (PIM) gepflegt und habe den Text auch entsprechend variabel aufgebaut (da die technischen Daten für jedes Produkt annähernd gleich sind (Unterschiede gibt es ggf. bei der Form - rechteckig / rund)).
Wenn ich aber nun die Daten exportiere, werden mir die Variablen entsprechend im Text ausgegeben. Ich bräuchte hier allerdings den Klartext (ob der Text ersetzt oder in eine andere Zelle geschrieben wird ist erstmal nebensächlich.
Ich denke ich bräuchte hier einen VBA Code mit einer Art SVERWEIS und Suchen/Ersetzen, komme dabei aber nicht richtig weiter.

Hier die Beispieldatei: https://www.herber.de/bbs/user/165271.xlsx

Vielen Dank für die Denkanstöße!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen im Text zeilenspezifisch ersetzen
18.12.2023 19:19:02
Piet
Hallo

ich sehe einen Text mit Zeilenumbruch, nehme an das ist dein Fliesstext, richtig??
Den kann man zerlegen, wahrscheinlich mit Formeln, ich nehme dafür VBA Makros.

Was fehlt ist eine Lösungsvorgabe von Hand, am besten mit Schriftfarbe rot oder blau, was wo hingehört. In welche Spalte?
Ohne diese Information können wir nicht weitermachen. Und müssen ALLE Daten in eine eigene Spalte, oder nur bestimmte???
Ist bei Montageart der Text "i9do2ltftv1equ" das richtige Ergebnis, oder steht da ein anderer Text?? Ein lesbarer Text?

mfg Piet
AW: Variablen im Text zeilenspezifisch ersetzen
18.12.2023 19:22:06
Piet
Nachtrag

bei den technischen Daten sehe ich in den Spalten E-X keine Überschriften.
Das ist Fatal, woher sollen wir als technische Laien wissen was wohin gehört??

mfg Piet
Anzeige
AW: Variablen im Text zeilenspezifisch ersetzen
18.12.2023 19:37:02
Piet
Nachtrag

wenn die Variablen im Text durch bereits bekannten Text ersetzt werden sollen ist das auch kein Problem.
Dazu müssten wir aber wissen wo der auszutauschende Text steht? In welcher Tabelle? Welche Spalte?

mfg Piet
AW: Variablen im Text zeilenspezifisch ersetzen
18.12.2023 21:05:44
Koopert
Sorry, wenn ich nicht spezifisch genug war. Bei mir haben die Spalten E-X Überschriften...

Der eigentliche Text steht in Spalte C "Artikel-Langbeschreibung". Dort sind die "Technischen Daten" vermerkt, die aus den Spalten E-X ausgelesen werden sollen.
Also beispielsweise steht dort:
Montageart: ..i9do2ltftv1equ.. (die ".." ist die Variable, wie sie aus der Software exportiert werden). Diese Variable soll durch den entsprechenden Wert in Zelle E "Montageart DE" ersetzt werden.
Dann geht's entsprechend weiter, mit z.B. "Schutzart: ..if1ghakdnv9ps1..". Hier soll die Variable "..if1ghakdnv9ps1.." durch den Wert in Spalte G "Schutzart" ersetzt werden, usw.

Ich hoffe, das macht es klarer.
Anzeige
AW: Variablen im Text zeilenspezifisch ersetzen
18.12.2023 23:44:04
Piet
Hallo

mit diesem kleinen Makro kannst du den Fliesstext in Einzeltexte zerlegen. Ich nahm dazu den Text aus Zelle C4
Wie du dann aber weiter vorgehen musst ist mir noch schleierhaft. Vielleicht hilft es dir ja weiter??

mfg Piet

  • Sub test()
    Dim AC As Range, Wert As Variant
    'Splittt Fliesstext nach LineFeed
    Wert = Split([c4], vbLf)
    Range("C8").Resize(UBound(Wert), 1) = Application.Transpose(Wert)

    'Zerlegt Text in 2 Strings
    For Each AC In Range("C8:C30")
    If InStr(AC, "..") Then
    AC.Cells(1, 3) = Left(AC, InStr(AC, ":"))
    AC.Cells(1, 4) = Trim(Mid(AC, InStr(AC, ":") + 1))
    en dif
    Next AC
    End Sub
  • Anzeige
    AW: Variablen im Text zeilenspezifisch ersetzen
    19.12.2023 10:40:43
    MCO
    Moin!

    Das sollte tun, was es soll. Du musst es nur nach diesem Prinzip ausfüllen:

    Sub Text_ersetzen()
    
    Dim Mont as String
    Dim Eing as String
    Dim Schu1 as String
    Dim Max_ as String
    Dim Nenn as String
    Dim Umge as String
    Dim Gehä as String
    Dim Brei as String
    Dim Höhe as String
    Dim Tief as String
    Dim Durc as String
    Dim Nett as String
    Dim Schu2 as String
    Dim Schl as String
    Dim Gehä as String
    Dim Max_ as String
    Dim Lich1 as String
    Dim Lich2 as String
    Dim Erwa as String
    Dim Farb as String
    For Each cl In Range("C2:C99").SpecialCells(xlcelltypconstants)
    Mont = Cells(cl, 5)
    Eing = Cells(cl, 6)
    Schu1 = Cells(cl, 7)'von hand angepasst, ansonsten doppelt
    Max_ = Cells(cl, 8)
    Nenn = Cells(cl, 9)
    Umge = Cells(cl, 10)
    Gehä = Cells(cl, 11)
    Brei = Cells(cl, 12)
    Höhe = Cells(cl, 13)
    Tief = Cells(cl, 14)
    Durc = Cells(cl, 15)
    Nett = Cells(cl, 16)
    Schu2 = Cells(cl, 17)'von hand angepasst, ansonsten doppelt
    Schl = Cells(cl, 18)
    Gehä = Cells(cl, 19)
    Max_ = Cells(cl, 20)
    Lich1 = Cells(cl, 21) 'von hand angepasst, ansonsten doppelt
    Lich2 = Cells(cl, 22)'von hand angepasst, ansonsten doppelt
    Erwa = Cells(cl, 23)
    Farb = Cells(cl, 24)


    ' Montageart: ..i9do2ltftv1equ..
    ' Abmessungen (HxBxT) in mm: ..ics0vg21b2hmhq.. x ..ic9qens4pklflo.. x ..iddnfe1r574ne1..
    ' Eingangsspannung | -frequenz: ..idveufqqutig1u..
    ' Schutzart: ..if1ghakdnv9ps1..
    ' Schutzklasse: ..i1ru1oj1d91snj..
    ' Schlagfestigkeit: ..ia4tom0erht2ma..
    ' Max. Leistung: ..i3mhv0ajp7238o..
    ' Nennleistung Leuchtmittel: ..ia6c7u3kgs139l..
    ' Lichtstrom im Netzbetrieb: ..i5uoaa3grvaacv..
    ' Umgebungstemperatur: ..ifev1fvcg77f8j..
    ' Gehäusematerial: ..ifntu1fn2dspa7..
    ' Gehäusefarbe: ..yjkdf8ztdas786..

    repl_cl = Replace(cl, alter_text, neuer_Text) 'Achtung, 1. Zeile ist CL der Ursprung
    repl_cl = Replace(repl_cl, alter_text, neuer_Text) 'ab jetzt nur noch repl_cl
    '.
    '.
    '.
    '.
    cl.Value = repl_cl 'hier wird zurückgeschrieben, wichtig ist .value! ansonsten wird nur die Variable geändert....
    Next cl

    End Sub

    Als kleinen Bonus noch der code, mit dem ich die Überschriften zugwiesen hab.Sub var_machen()
    For i = 5 To 24
    Debug.Print "Dim " & Replace(Left(Cells(1, i), 4), ".", "_") & " as String"
    Next
    Debug.Print Chr(10)
    For i = 5 To 24
    Debug.Print Replace(Left(Cells(1, i), 4), ".", "_") & " = Cells(cl, " & i & ")"
    Next
    End Sub


    Gruß, MCO
    Anzeige
    AW: Variablen im Text zeilenspezifisch ersetzen
    19.12.2023 11:39:56
    Koopert
    Besten Dank!
    Ich denke das ist des Rätsels Lösung. Allerdings bekomme ich beim Debuggen folgenden Fehler beim SpecialCells Argument:

    Laufzeitfehler '1004': Die SpecialCells Eigenschaft des Range-Objektes kann nicht zugeordnet werden.
    


    Zudem ist mir noch nicht ganz klar, wofür ich den "Bonus" benötige, denn die Überschriften/Zellen weise ich ja im SpecialCells Block zu?
    Oder benötige ich dann noch weitere Variablen für den Zellwert? Also quasi var_Mont = Mont.value ?

    Dass es dann im Code so aussieht:

    repl_cl = Replace(cl, "..i9do2ltftv1equ..", var_Mont)
    Anzeige
    Tipfehler Laufzeitfehler '1004':
    19.12.2023 12:07:28
    MCO
    Hey,

    Es muss heißen xlcelltypeconstants, also mit "e", statt xlcelltypconstants

    Den Bonus hab ich nur gebraucht, damit ich die Typendeklaration und Wert-/Variablenzuweisung nicht von Hand machen muss... bin eben faul....

    Weitere Variablen? Du hast doch jetzt reichlich...
            repl_cl = Replace(cl, "..i9do2ltftv1equ..", Mont ) 'Achtung, 1. Zeile ist CL der Ursprung
    
    repl_cl = Replace(repl_cl, alter_text, neuer_Text)

    Aber das Prinzip scheinst du verstanden zu haben :-)

    Gruß, MCO
    AW: Tipfehler Laufzeitfehler '1004':
    19.12.2023 13:03:00
    Koopert
    Danke dir! Das habe ich übersehen.

    Jetzt bekomme ich
    Laufzeitfehler '13': Typen unverträglich


    Ich schätze das liegt an der Variable "cl", die müsste wahrscheinlich noch als Integer definiert werden...? Aber das ist auch nicht zulässig, da "For Each" Object oder Variant sein muss. Ich dreh noch durch :-D

    Mit den weiteren Variablen war der Gedanke, dass ich die ggf. noch auslesen muss, da ich dachte das wäre eine Range (also nur Verweis auf die Zelle). Aber sind ja als String definiert...

    Das mit dem automatischen Benennen der Variablen ist natürlich smart! :-)
    Anzeige
    AW: Tipfehler Laufzeitfehler '1004':
    19.12.2023 18:15:24
    Piet
    Hallo

    es gibt hier noch ein "kleines Dummchen", denn ich habe immer noch nicht verstanden wie ihr bei dem Code "..i9do2ltftv1equ.." als Hellseher wisst, was da für ein Text hingehört?
    Ich lese zwar im Fliesstext den Anfangstext, z.B. Montageart, aber wo bitte findet man eine Liste mit dem dazu passenden Text??
    Wäre nett wenn ihr mich da aufklären könntet. Im Beispiel sehe ich dazu nix. Vielleicht habe ich es übersehen.

    mfg Piet
    AW: Tipfehler Laufzeitfehler '1004':
    20.12.2023 06:44:51
    MCO
    Moin, Piet!

    Ich hab auch nur alle Variablen aufgelistet und die erste Beispielhaft gefüllt. Was da wirklich reinkommt weiß nur Koopert.

    @Koopert
    cl muss als Range deklariert sein, da es ja ein Durchlauf durch einen Bereich ist
    Du musst aber auch nicht zwingend einen Typen vorgeben: entweder als Variant oder nur "Dim cl"
    Ist zwar etwas dünn, sollte aber laufen.

    Gruß, MCO
    Anzeige
    AW: Tipfehler Laufzeitfehler '1004':
    20.12.2023 14:18:29
    Koopert
    Hi und danke für die Antwort. Ich bekomme leider immer noch Laufzeitfehler 13... ob ich sie als "nichts" definiere, als Range oder als Variant, macht alles keinen Unterschied...
    AW: Tipfehler Laufzeitfehler '1004':
    20.12.2023 16:30:49
    Koopert
    Hi, ich habe die Schleife, etc. jetzt etwas umgebaut.
    Ich suche mir die Spaltennummern jetzt auch anhand der Überschriften, um sicher zu sein, falls die mal an einer anderen Stelle stehen.
    Ist wahrscheinlich etwas umständlicher als es sein müsste, aber so funktioniert es auf jeden Fall.
    Muss mir ggf. nur noch was für's Error Handling einfallen lassen, falls sich in der Datei mal was ändert (z.B. Name einer Überschrift).

    Danke dir auf jeden Fall für den Input, den Anstoß hab ich gebraucht :-)

    
    
    Sub Text_ersetzen()
    Dim val_MontArt, val_Eingspng, val_Schutzart, val_LeistungAC, val_Nennleist, val_Temp, val_GMaterial, val_Breite, val_Hoehe, val_Tiefe, val_Durchm, _
    val_Netgew, val_Schutzkl, val_Schlagf, val_Farbe, val_Quersch, val_Lichtstrom, val_Lichtfarbe, val_Lebensd, val_RA, val_ArtText As String
    Dim head_MontArt, head_Eingspng, head_Schutzart, head_LeistungAC, head_Nennleist, head_Temp, head_GMaterial, head_Breite, head_Hoehe, head_Tiefe, head_Durchm, _
    head_Netgew, head_Schutzkl, head_Schlagf, head_Farbe, head_Quersch, head_Lichtstrom, head_Lichtfarbe, head_Lebensd, head_RA, head_ArtText As String
    Dim col_MontArt, col_Eingspng, col_Schutzart, col_LeistungAC, col_Nennleist, col_Temp, col_GMaterial, col_Breite, col_Hoehe, col_Tiefe, col_Durchm, _
    col_Netgew, col_Schutzkl, col_Schlagf, col_Farbe, col_Quersch, col_Lichtstrom, col_Lichtfarbe, col_Lebensd, col_RA, col_ArtText As Integer
    Dim i, last_row, head_row, first_row, loop_row, cl, repl_cl As Long

    'Überschriften finden, Spalten rausschreiben und letzte Zeile finden

    head_MontArt = "Montageart DE"
    head_Eingspng = "Eingangsspannung | -frequenz DE"
    head_Schutzart = "Schutzart"
    head_LeistungAC = "Max. Leistung"
    head_Nennleist = "Nennleistung Leuchtmittel"
    head_Temp = "Umgebungstemperatur"
    head_GMaterial = "Gehäusematerial DE"
    head_Breite = "Breite (mm)"
    head_Hoehe = "Höhe (mm)"
    head_Tiefe = "Tiefe (mm)"
    head_Durchm = "Durchmesser (mm)"
    head_Netgew = "Nettogewicht (kg)"
    head_Schutzkl = "Schutzklasse"
    head_Schlagf = "Schlagfestigkeit"
    head_Farbe = "Gehäusefarbe (RAL)"
    head_Quersch = "Max. Leitungsquerschnitt"
    head_Lichtstrom = "Lichtstrom"
    head_Lichtfarbe = "Lichtfarbe Leuchtmittel"
    head_Lebensd = "Erwartete LED-Lebensdauer (h)"
    head_RA = "Farbwiedergabeindex (Ra)"
    head_ArtText = "Artikel-Langbeschreibung"
    head_row = 1

    col_MontArt = Application.WorksheetFunction.Match(head_MontArt, Cells(head_row, 1).EntireRow, False)
    col_Eingspng = Application.WorksheetFunction.Match(head_Eingspng, Cells(head_row, 1).EntireRow, False)
    col_Schutzart = Application.WorksheetFunction.Match(head_Schutzart, Cells(head_row, 1).EntireRow, False)
    col_LeistungAC = Application.WorksheetFunction.Match(head_LeistungAC, Cells(head_row, 1).EntireRow, False)
    col_Nennleist = Application.WorksheetFunction.Match(head_Nennleist, Cells(head_row, 1).EntireRow, False)
    col_Temp = Application.WorksheetFunction.Match(head_Temp, Cells(head_row, 1).EntireRow, False)
    col_GMaterial = Application.WorksheetFunction.Match(head_GMaterial, Cells(head_row, 1).EntireRow, False)
    col_Breite = Application.WorksheetFunction.Match(head_Breite, Cells(head_row, 1).EntireRow, False)
    col_Hoehe = Application.WorksheetFunction.Match(head_Hoehe, Cells(head_row, 1).EntireRow, False)
    col_Tiefe = Application.WorksheetFunction.Match(head_Tiefe, Cells(head_row, 1).EntireRow, False)
    col_Durchm = Application.WorksheetFunction.Match(head_Durchm, Cells(head_row, 1).EntireRow, False)
    col_Netgew = Application.WorksheetFunction.Match(head_Netgew, Cells(head_row, 1).EntireRow, False)
    col_Schutzkl = Application.WorksheetFunction.Match(head_Schutzkl, Cells(head_row, 1).EntireRow, False)
    col_Schlagf = Application.WorksheetFunction.Match(head_Schlagf, Cells(head_row, 1).EntireRow, False)
    col_Farbe = Application.WorksheetFunction.Match(head_Farbe, Cells(head_row, 1).EntireRow, False)
    col_Quersch = Application.WorksheetFunction.Match(head_Quersch, Cells(head_row, 1).EntireRow, False)
    col_Lichtstrom = Application.WorksheetFunction.Match(head_Lichtstrom, Cells(head_row, 1).EntireRow, False)
    col_Lichtfarbe = Application.WorksheetFunction.Match(head_Lichtfarbe, Cells(head_row, 1).EntireRow, False)
    col_Lebensd = Application.WorksheetFunction.Match(head_Lebensd, Cells(head_row, 1).EntireRow, False)
    col_RA = Application.WorksheetFunction.Match(head_RA, Cells(head_row, 1).EntireRow, False)
    col_ArtText = Application.WorksheetFunction.Match(head_ArtText, Cells(head_row, 1).EntireRow, False)

    last_row = Cells(Rows.Count, col_ArtText).End(xlUp).Row


    'Schleife zum Austauschen der Variablen
    loop_row = 2


    For i = loop_row To last_row

    'Werte aus den Zellen auslesen
    val_MontArt = Cells(loop_row, col_MontArt).Value
    val_Eingspng = Cells(loop_row, col_Eingspng).Value
    val_Schutzart = Cells(loop_row, col_Schutzart).Value
    val_LeistungAC = Cells(loop_row, col_LeistungAC).Value
    val_Nennleist = Cells(loop_row, col_Nennleist).Value
    val_Temp = Cells(loop_row, col_Temp).Value
    val_GMaterial = Cells(loop_row, col_GMaterial).Value
    val_Breite = Cells(loop_row, col_Breite).Value
    val_Hoehe = Cells(loop_row, col_Hoehe).Value
    val_Tiefe = Cells(loop_row, col_Tiefe).Value
    val_Durchm = Cells(loop_row, col_Durchm).Value
    val_Netgew = Cells(loop_row, col_Netgew).Value
    val_Schutzkl = Cells(loop_row, col_Schutzkl).Value
    val_Schlagf = Cells(loop_row, col_Schlagf).Value
    val_Farbe = Cells(loop_row, col_Farbe).Value
    val_Quersch = Cells(loop_row, col_Quersch).Value
    val_Lichtstrom = Cells(loop_row, col_Lichtstrom).Value
    val_Lichtfarbe = Cells(loop_row, col_Lichtfarbe).Value
    val_Lebensd = Cells(loop_row, col_Lebensd).Value
    val_RA = Cells(loop_row, col_RA).Value


    ' Montageart: ..i9do2ltftv1equ..
    ' Eingangsspannung | -frequenz: ..idveufqqutig1u..

    On Error Resume Next
    Cells(loop_row, col_ArtText).Value = Replace(Cells(loop_row, col_ArtText).Value, "..i9do2ltftv1equ..", val_MontArt) 'Entsprechende Variable durch spezifischen Wert ersetzen
    Cells(loop_row, col_ArtText).Value = Replace(Cells(loop_row, col_ArtText).Value, "..idveufqqutig1u..", val_Eingspng)
    '.
    '.
    '.
    '.
    loop_row = loop_row + 1 'Schleife um 1 hochzählen
    Next i


    End Sub
    Anzeige
    AW: Tipfehler Laufzeitfehler '1004':
    20.12.2023 14:17:18
    Koopert
    Hallo, ich kann hier leider keine Bilder hochladen, sonst hätte ich das mit einem Screenshot schon gemacht.
    Im Prinzip passt der Text in Spalte C zu den technischen Daten, die dann in den Spalten E - X kommen. Zum Beispiel hat die Spalte E die Überschrift "Montageart DE" und somit gehört diese zur Variable, die nach "Montageart:" in Spalte C steht.

    Ich habe mir die Beispieldatei auch nochmal runtergeladen und kann die Überschriften sehen. Deshalb bin ich jetzt auch etwas überfragt...
    AW: Variablen im Text zeilenspezifisch ersetzen
    19.12.2023 07:55:41
    Koopert
    Hallo,

    danke für die Antwort.
    Mir ist noch nicht klar, was mir das Aufteilen bringt. Im Endeffekt will ich ja "nur" die Variablen raushaben. Sprich:

    Technische Daten:

    Montageart: ..i9do2ltftv1equ..
    Abmessungen (HxBxT) in mm: ..ics0vg21b2hmhq.. x ..ic9qens4pklflo.. x ..iddnfe1r574ne1..
    Eingangsspannung | -frequenz: ..idveufqqutig1u..
    Schutzart: ..if1ghakdnv9ps1..
    Schutzklasse: ..i1ru1oj1d91snj..
    Schlagfestigkeit: ..ia4tom0erht2ma..
    Max. Leistung: ..i3mhv0ajp7238o..

    sollte dann so aussehen (für Zeile 3):

    Technische Daten:

    Montageart: Deckenaufbau
    Abmessungen (HxBxT) in mm: 200 x 240 x 55
    Eingangsspannung | -frequenz: 230V AC | 50/60Hz
    Schutzart: IP41
    Schutzklasse: II
    Schlagfestigkeit: IK07
    Max. Leistung: 18VA


    ...für Zeile 4:

    Technische Daten:

    Montageart: Wand
    Abmessungen (HxBxT) in mm: 70 x 310 x 75,5
    Eingangsspannung | -frequenz: 230V AC | 50/60Hz
    Schutzart: IP54
    Schutzklasse: I
    Schlagfestigkeit: IK07
    Max. Leistung: 40VA

    ...usw.
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige