none
Excel-Formel: Einfügen in einer neuen Zelle nach Anzahl Zeichen und Wort

    Question

  • Hallo,

    ich habe das gleiche "Problem" wie im folgendem Diskussionsfaden: Excel-Formel: Einfügen von Zeichen nach Anzahl Zeichen und Wort

    Habe eine Exceltabelle mit Produktbeschreibungen die oftmals länger als 40 Zeichen sind,

    diese möchte ich wie oben von user "niklausa" beschrieben trennen, noch besser wäre wenn

    sich die beschreiben nach 40 Zeichen trennt und der restliche Text in die nebenliegenden

    Zellen übertragen wird. Hierbei sollten einzelne Wörter nicht getrennt werden.

    Ich habe bislang keinerlei VBA Kenntnisse, bis auf die einarbeitung durch mehrere Youtube Turtorials etc.

     

    Ich habe versucht die oben genannte Lösung in Microsoft Visual Basic zu kopieren und auszuführen, das funktioniert leider nicht.

    Könnte mir eventuell jemand erkläen wie ich die obige Lösung für meine Excel Datei verwenden kann?

    Oder gibt es eventuell eine andere Lösungsmöglichkeit.

     

    Ich mach jetzt Feierabend (Kopf qualmt)

    Ich freue mich auf eine Atnwort, besten Dank im Vorraus.

    Freundliche Grüße aus Eislingen,

    Proksch

    Wednesday, September 15, 2010 2:29 PM

All replies

  • Hallo,

    ha hierfür jemand eine Lösung?

     

    Bitte um Rückmeldung.

     

    Freundliche Grüße

    Thursday, September 16, 2010 11:05 AM
  • Hallo Proksch,

    Hier die Rückmeldung J

    Erstmals, bitte ich Dich, lese bitte hier was VBA (Visual Basic for Applications) ist. („As its name suggests, VBA is closely related to Visual Basic and uses the Visual Basic Runtime, but can normally only run code within a host application rather than as a standalone application.“ – „Wie der Name andeutet, VBA ist eng mit Visual Basic und verwendet den Visual Basic-Laufzeitmodus,  kann normalerweise Code nur innerhalb einer Hostanwendung ausführen und nicht als eine Selbständige-Anwendung.“)

    Jetzt zum Problem J Habe mal den Code genommen und in Microsoft Visual Basic 6 (SP6) getestet min einer sehr kleinen Änderung…1) auf Form1 ein CommandButton (Command1) gezogen.

    2) Auf den Click Ereignis des Buttons den Code Einfach ohne Änderung kopiert.

    3) Test ausgeführt für beide Strings:

    mystring1 = "Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm"

    mystring2 = "Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59"

    4) Breakpoints ([F9]) auf Exit Function und End Function gesetzt und den Wert von myfinalstring geprüft

    5) Ergebnisse:

    ·          für mystring1, myfinalstring=“_Hohlflachprofile Nicht Gelocht Sand/Eloxiert 1000x30x5mm“

    ·          für mystring2, myfinalstring=“_Jowat 460.56 (Contact Styropor 455)/Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59“

    Feststellungen:

    ·          Man sieht in den Strings das „/“ Zeichen.

    ·          Die Strings haben noch ein Leerzeichen am Anfang. Kann man mit myfinalstring = Trim(myfinalstring) vor Exit Function loswerden.

    6) Neue Ergebnisse nach der Zeile mit Trim Funktion:

    ·          für mystring1, myfinalstring=“Hohlflachprofile Nicht Gelocht Sand/Eloxiert 1000x30x5mm“

    ·          für mystring2, myfinalstring=“Jowat 460.56 (Contact Styropor 455)/Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59“

    Feststellungen:

    Wie man im folgenden Bild sieht hat der Erste String 56 Zeichen und der Zweite String 85 Zeichen.

    Das 40ste Zeichen ist im ersten String innerhalb des Wortes „Eloxiert“ und im Zweiten String innerhalb des Wortes „Kontaktkleber“ à deshalb wurde die Zeichenkette getrennt wie man bei Punkt 6) sehen kann.

    [BILD]

    [Code in Microsoft Visual Basic 6 (SP6)]

     

    Private Sub Command1_Click()
    
    Dim mystring1 As String
    Dim mystring2 As String
      
      
      mystring1 = "Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm"
      mystring2 = "Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59"
      
      MsgBox (Len(mystring1)) '//56
      MsgBox (Len(mystring2)) '//85
      
      Call fncSpPos(mystring1, 20)
      '//Call fncSpPos(mystring2, 20)
      
    End Sub
    
    Function fncSpPos(strPassedString As String, iNum As Integer) As Integer
    
    fncSpPos = 0
    
    Dim myfinalstring As String
    Dim myflag As Boolean
    
    myfinalstring = ""
    myflag = False
    While Len(strPassedString) And (iNum > 0)
      If InStr(1, strPassedString, " ") Then
        fncSpPos = fncSpPos + InStr(1, strPassedString, " ")
        part1 = strPassedString
        strPassedString = Mid(strPassedString, InStr(1, strPassedString, " ") + 1)
        part2 = strPassedString
        
        If Len(myfinalstring + Left(part1, Len(part1) - Len(part2) - 1)) < 40 Then
          myfinalstring = myfinalstring + " " + Left(part1, Len(part1) - Len(part2) - 1)
        Else
          If Not myflag Then
          myfinalstring = myfinalstring + "/" + Left(part1, Len(part1) - Len(part2) - 1)
          myflag = True
          Else
          myfinalstring = myfinalstring + " " + Left(part1, Len(part1) - Len(part2) - 1)
          End If
          
          
        End If
        
        
        iNum = iNum - 1
      Else
        fncSpPos = 0
        myfinalstring = myfinalstring + " " + part2
        myfinalstring = Trim(myfinalstring)
        Exit Function
      End If
    Wend
    
    If iNum Then fncSpPos = 0
    
    End Function
    

    [Code in VBA unter Excel 2007]

    Sub testtext()
    
      Dim mystring1 As String
      Dim mystring2 As String
      
      
      '//mystring1 = "Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm"
      '//mystring2 = "Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59"
      
      mystring1 = Worksheets("Sheet1").Cells(2, 2).Value
      mystring2 = Worksheets("Sheet1").Cells(3, 2).Value
      
      Worksheets("Sheet1").Cells(2, 3).Value = fncSpPos(mystring1, 20)
      Worksheets("Sheet1").Cells(3, 3).Value = fncSpPos(mystring2, 20)
      
    End Sub
    Function fncSpPos(strPassedString As String, iNum As Integer) As String
    
    fncSpPos = 0
    
    Dim myfinalstring As String
    Dim myflag As Boolean
    
    myfinalstring = ""
    myflag = False
    While Len(strPassedString) And (iNum > 0)
      If InStr(1, strPassedString, " ") Then
        fncSpPos = fncSpPos + InStr(1, strPassedString, " ")
        part1 = strPassedString
        strPassedString = Mid(strPassedString, InStr(1, strPassedString, " ") + 1)
        part2 = strPassedString
        
        If Len(myfinalstring + Left(part1, Len(part1) - Len(part2) - 1)) < 40 Then
          myfinalstring = myfinalstring + " " + Left(part1, Len(part1) - Len(part2) - 1)
        Else
          If Not myflag Then
          myfinalstring = myfinalstring + "/" + Left(part1, Len(part1) - Len(part2) - 1)
          myflag = True
          Else
          myfinalstring = myfinalstring + " " + Left(part1, Len(part1) - Len(part2) - 1)
          End If
          
          
        End If
        
        
        iNum = iNum - 1
      Else
        fncSpPos = 0
        myfinalstring = myfinalstring + " " + part2
        myfinalstring = Trim(myfinalstring)
        
        
        fncSpPos = myfinalstring
        Exit Function
      End If
    Wend
    
    If iNum Then fncSpPos = 0
    
    End Function
    

    Jetzt für: „Könnte mir eventuell jemand erklären wie ich die obige Lösung für meine Excel Datei verwenden kann?“ à Zum Beispiel haben wir eine Excel Datei mit folgenden Eingangsdaten: Auf Sheet1 in der Zelle B2 steht „Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm“ und in der Zelle B3 steht „Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59“

    Jetzt im VBA Editor von Excel [Alt+F11] auf ThisWorkbook (Code) schreiben geben wir den obigen [Code in VBA unter Excel 2007] ein.  Die Funktion schreibt die Neuen Werte in den Zellen C2 (im Fall von mystring1) und C3 (im Fall von mystring2).

    Jetzt kann man weitermachen auch mit Excel Formeln…oder durch VBA code.

    Zum Beispiel mit Excel Formeln: in der Zelle D2 die Formel =SEARCH("/",C2) eintragen à in der Zelle E2 die Formel =LEFT(C2,D2-1) eintragen und in der Zelle F2 die Formel =RIGHT(C2,LEN(C2)-D2) eintragen.

    Jetzt haben wir die Strings in E2 und F2 getrennt.

     

    Grüße,

    Robert

    Thursday, September 16, 2010 11:24 AM
  • Hallo,

    vielen Dank für deine ausführliche Antwort. Ich kann dir von der logik auf wunderbar folgen, nur leider funktioniert es nicht wie ich es mir vorstelle.

    So bin ich vorgegangen:

     

    - Neue Excel Arbeitsmappe erstellt

    - in B2 eingefügt: „Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm“

    - in C2 eingefügt: „Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59“

    - mit Alt+F11 Visual Basic geöffnet

    - Doppelklick auf diese Arbeitsmappe (rechts öffnet sich ein Fenster)

    - in das neue Fenster habe ich deinen Code von : Private Sub Commandl_Click ()    bis : End Function    per Kopieren/Einfügen eingefügt.

    - danach per Grünpfeil ausführen (F5)

    - Ergebniss: Fehler beim Kompilieren: Mehrdeutiger Name: fncSpPos

     

    Wo lag mein fehler?

    Und wie mache ich das (wenn ichs hinbekomm) wenn ich eine andere Excel Tabelle mit anderen Texten habe? Weil Sie haben den Text der Excel Tabelle jetzt auch in Ihrem Code hinterlegt.

     

    Freue mich auf eine Antwort und gönner mit schnell eine 10 minütige Pause :)

    Thursday, September 16, 2010 11:56 AM
  • vielleicht hilft ja dieser link:

    http://www.gidf.de/

    Friday, September 17, 2010 9:07 AM
  • danke für den link.

     

    und glaub mir bitte ich habe lange gegoogelt. aber googel kann mir auch nicht sagen wie ich den code zu verwenden habe...

     

    naja schade, ich dachte hier bekomme ich hilfe.

    Friday, September 17, 2010 1:17 PM
  • Hallo Proksch,

    Du hast auf einmal geschrieben:

    „- mit Alt+F11 Visual Basic geöffnet
    - Doppelklick auf diese Arbeitsmappe (rechts öffnet sich ein Fenster)
    - in das neue Fenster habe ich deinen Code von: Private Sub Commandl_Click ()    bis : End Function    per Kopieren/Einfügen eingefügt.“

    Ich habe aber geschrieben:

    „Jetzt im VBA Editor von Excel [Alt+F11] auf ThisWorkbook (Code) schreiben geben wir den obigen [Code in VBA unter Excel 2007] ein.  Die Funktion schreibt die Neuen Werte in den Zellen C2 (im Fall von mystring1) und C3 (im Fall von mystring2).“

    …und unter [Code in VBA unter Excel 2007] habe ich keinen Private Sub Command1_Click() geschrieben.

    Grüße,

    Robert

    Friday, September 17, 2010 1:32 PM
  • Hallo,

     

    danke für deine Antwort, Robert.

     

    Ich hab alles versucht und bekomme es nicht hin, dabei ist es mir enorm wichtig da ich viel Zeit einsparen könnte.

    Kann ich eventuell telefonischen Support oder eine genauere erklärung hier bekommen??

    Natürlich bezahle ich das ganze auch, gegen eine offizielle Rechnungsstellung.


    Schönen Sonntag noch..

    Sunday, September 19, 2010 4:08 PM
  • ok, mein schlechtes gewissen plagt mich.

    ihr 2 redet aneinander vorbei. ;)

    @Prosch: Du mußt da unterscheiden, es gibt das visual studio und das excel mit seinem MAKRO editor.

    beide kannst du mit VB programmieren, sind aber vom programmcode her doch etwas unterschiedlich.

    damit meine ich, du kannst es nicht einfach rein copieren.

    du mußt den programm code "übertragen" also portieren. von der einen programmiersprache VB in die andere Programmiersprache VB, dann sollte es wohl gehen.

    gruß cd

    Monday, September 20, 2010 6:02 AM
  • Danke codedive, ich hab schon stark an mir gezweifelt :)

     

    Dann google ich jetzt mal wie ich die Programmiersprache irgendwie umwandeln kann.

     

    Hast du mir hierfür eventuell einen Tipp?

     

    Grüße aus Eislingen (Baden-Württemberg)

    Tuesday, September 21, 2010 7:38 AM
  • also, irgendwie frage ich mich schon wie du zu dieser tätigkeit gekommen bist ......(sorry)

    du kannst entweder bei www.gidf.de nach excel makro foren suchen und dort deine frage stellen oder einfach mit etwas überlegen den programmcode übertragen.

    gruss cd

    aus dem rems murr kreis in bw

    Tuesday, September 21, 2010 8:22 AM
  • Zu meiner Tätigkeit als Geschäftsführer einer Großhandels GmbH?

    Ich glaube das sprengt hier den Rahmen dir das zu erläutern.

     

    Meine Fähigkeiten im bereich der EDV habe ich mir selbst angeeignet, mit großem Erfolg.

    Selbst Flash kann ich mitlerweile, leider hatte ich bisland mit VB nichts zu tun, deshalb die Ratlosigkeit.

     

    Ich denke es ist normal dass man nicht allwissend auf die Welt kommt.

     

    Zum Nutzen:

     

    Ich bekommen fast wochentlich von verschiedenen Lieferanten Excel-Preisdatein die allesam unterschiedlich aufgebaut sind,

    um diese in mein WWS korrekt einlesen zu können müssen die Beschreibungen auf max. 40 Zeichen gekurzt sein.

    Tuesday, September 21, 2010 8:33 AM
  • ok, jetzt ist mir klar, das für dich der unterschied zwischen makro und visual studio nicht klar war.

    wenn du dich mit flash auskennst, alle achtung, ich hab da keine ahnung! ;)

    zeichne dir doch mal ein makro bei excel auf und versuche sinn gemäß die inhalte von robert da einzubinden.

    meine kenntnisse sind hauptsächlich in C# mit Excel 2007 und vsto, damit habe ich dich jetzt wohl ganz verwirrt, odr?

     

    grüße aus dem remstal ans filstal!

     

    Tuesday, September 21, 2010 11:56 AM
  • Hallo Proksch,

    Möchte noch einmal meinen Code Schritt für Schritt mit Dir durchgehen.

    1.     In einer Neuen Excel Datei auf Sheet1 in der Zelle B2 geben wir ein „Hohlflachprofile Nicht Gelocht Sand Eloxiert 1000x30x5mm“ und in der Zelle B3 geben wir ein „Jowat 460.56 (Contact Styropor 455) Kontaktkleber 850Gr Voc Lenkabgabe Inbeg Chf 1,59“

    2.     Jetzt mit [Alt+F11] VBA aufmachen und auf ThisWorkbook doppelklick à Fenster ThisWorkbook (Code)

    3.     Code von meinem Post wo [Code in VBA unter Excel 2007] mit Copy und Paste einfügen und Cursor nach Sub testtext() setzten und mit Run(oder F5) ausführen

    4.     Nach dem Ausführen haben wir neue Werte in C2 und C3 (man sieht das / Zeichen)

    5.     in der Zelle D2 die Formel =SEARCH("/",C2) eintragen à in der Zelle E2 die Formel =LEFT(C2,D2-1) eintragen und in der Zelle F2 die Formel =RIGHT(C2,LEN(C2)-D2) eintragen. Jetzt haben wir die Strings in E2 und F2 getrennt.

     

     

    @codedive: Bitte achten wir sind hier weil „Entwickler helfen Entwicklern“. Danke.

    Grüße,

    Robert

    Tuesday, September 21, 2010 12:35 PM
  • Tuesday, September 21, 2010 1:21 PM