Excel Artikelnummern auf gleiche Länge füllen

  • #1
F

Franky B.

Guest
Hallo Zusammen,
ich habe hier ein vermeintlich leichtes Problem, krieg es aber trotzdem nicht hin.
Ich habe ein Arbeitsblatt mit einer Artikelliste. In der Spalte A steht immer die Artikelnummer, leider aber nicht immer mit gleicher Feldlänge. Wie kann ich die einzelnen Zellen via Makro auf gleiche Länge bringen. Als Füllzeichen soll das Leerzeichen herhalten. ich brauche die Geschichte für eine csv-Übernahme in ein anderes Programm.
Weiß jemand, wie ich das machen kann.

Schon mal Danke.

Frank
 
  • #2
Hi Franky B.,

gib doch mal  ein paar Beispiele, wie die Artikelnummern aussehen - Ist und Soll.

Wichtig ist auch welche Fromatierung haben die Artikelnummern. Sind alle gleich formatiert. Ich hatte letztens ein Problem am Wickel, bei dem es um Aktenzeichen ging. Da stellte sich nach näherer Untersuchung heraus, daß die Aktenzeichen in 18 unterschiedlichen Formaten vorlagen.

Gruß Matjes :)
 
  • #3
Hallo Matjes,

ich habe eine Spalte A in der untereinander die Artikelnummern stehen. Diese können aus Zahlen und Buchstaben bestehen. Das Makro soll nun checken, ob die hinterlegte Artikelnummer eine Länge von 15 Zeichen hat. Ist dies nicht der Fall, soll es die Nummer mit Leerzeichen auffüllen. Die Leerzeichen sollen vor die Nummer gestellt werden.

Beispiel:

45673456
545kj8as82n
234324812398765
dsf887876

nach dem füllen sollen alle Artikelnummern 15 Zeichen lang sein.

Schon mal Danke.

Gruss

Frank
 
  • #4
Hallo Franky B.,

nun denn. Format der Artikelnummern wird dabei auf->Text'gesetzt, sonst gehen eventuell die Leerzeichen wieder verloren.

Gruß Matjes :)

Code:
Sub ArtNrAufStringLange15()
  Const c_SP = 1->Spalte A
  Const c_ersteWerteZeile = 1->erste Zeile mit ArtNr ggf. anpassen!!!
  
  Dim ws As Worksheet, l_zeilemax As Long, s_tmp As String, z As Long
  
  Set ws = ActiveSheet
 ->letzte Zeile bestimmen
  l_zeilemax = ws.Cells(ws.Rows.Count, c_SP).End(xlUp).Row
  
  For z = c_ersteWerteZeile To l_zeilemax
   ->Wert aus Zelle
    s_tmp = ws.Cells(z, c_SP).Value
    If Len(s_tmp) > 15 Then
      MsgBox (In Zeile  & z &  hat dir Artikelnummer mehr als 15 Character !!! -> Abbruch)
    End If
    If Len(s_tmp) < 15 Then
     ->Zell-Format = Text setzen
      ws.Cells(z, c_SP).NumberFormat = @
      s_tmp = String(15 - Len(s_tmp), Chr(32)) & s_tmp
      ws.Cells(z, c_SP).Value = s_tmp
    End If
    
   ->zurueckschreiben
    ws.Cells(z, c_SP).NumberFormat = @
    ws.Cells(z, c_SP).Value = s_tmp
    
  Next
  Set ws = Nothing
End Sub
 
  • #5
Herzlichen Dank!
Funktioniert genau so, wie ich es wollte!

Viele Grüsse

Frank
 
  • #6
hi,
leider versteh ich nicht viel von den Makros. Aber ich such genau das selbe wie es hier beschrieben ist,nur die Leerzeichen sollen auf der rechten Seite erzeugt werden. Also wenn ich max. 35 Zeichen vorgebe und nur 10 Zeichen eingetragen werden, sollen die restlichen Zeichen auf der rechten Seite mit Leerzeichen aufgefüllt werden. Ich habe versucht das Makro hier umzuschreiben,bin dabei aber kläglich gescheitert. Ich hoffe das mir da jemand etwas weiter helfen kann??
 
  • #7
Hallo booboo,

also folgendes Makro geht über die Spalte A des aktuellen Blattes und schaut sich die Werte an. Hat der Wert weniger als 35 Zeichen, wird rechts mit Leerzeichen auf 35 Zeichen aufgefüllt. Ist ein Wert dabei, der mehr als 35 Zeichen lang ist, erfolgt die Meldung der Zeile und das Makro beendet sich.

Anpassen mußt du die Konstante  c_ersteWerteZeile mit der Zeilennummer des ersten zu untersuchenden Wertes.

Spalte kann in der Konstanten c_SP angepasst werden, für Spalte B eine 2, für Spalte C eine 3, ...

Auch die gewünschte Gesamtlänge der Artikelnummer kannst Du anpassen, indem Du der Konstanten c_ArtNrSollLaenge  die entsprechende Zahl zuweist.

Den Makro bringst Du folgendermassen in die Arbeitsmappe:
(sicherheitshalber erstmal eine Kopie der Arbeitsmappe)
1. Arbeitsmappe öffnen
2. VB-Editor öffnen mit Alt+F11
Links im Projekt-Fenster findest Du VBAProject(Dateiname)
3. VBAProject(Dateiname) -> rechte Maustaste->Einfügen->Modul
Es öffnet sich das Modulfenster.
4. In das Modulfenster kopierst Du per Copy und Paste den Makro.
5. Anpassungen der Konstanten
6. mit Alt+S speichern
7. mit Alt+Q den VB-Editor schliessen
8. Makro ausprobieren -> Alt+F8->ArtNrAufStringLange35BlancsRechtsAuffuellen auswählen -> Ausführen

Gruß Matjes :)


Code:
Sub ArtNrAufStringLange35BlancsRechtsAuffuellen()
  Const c_SP = 1->Spalte A
  Const c_ersteWerteZeile = 1->erste Zeile mit ArtNr ggf. anpassen!!!
  Const c_ArtNrSollLaenge = 35
  
  Dim ws As Worksheet, l_zeilemax As Long, s_tmp As String, z As Long
  
  Set ws = ActiveSheet
 ->letzte Zeile bestimmen
  l_zeilemax = ws.Cells(ws.Rows.Count, c_SP).End(xlUp).Row
  
  For z = c_ersteWerteZeile To l_zeilemax
   ->Wert aus Zelle
    s_tmp = ws.Cells(z, c_SP).Value
    If Len(s_tmp) > c_ArtNrSollLaenge Then
      MsgBox (In Zeile  & z &  hat dir Artikelnummer mehr als  & _
              c_ArtNrSollLaenge &  Character !!! -> Abbruch)
      GoTo Aufraeumen
    End If
   ->rechts mit Leerzeichen auffüllen
    If Len(s_tmp) < c_ArtNrSollLaenge Then
      s_tmp = s_tmp & String(c_ArtNrSollLaenge - Len(s_tmp), Chr(32))
    End If
    
   ->zurueckschreiben
   ->Format als Text setzen
    ws.Cells(z, c_SP).NumberFormat = @
    ws.Cells(z, c_SP).Value = s_tmp
    
  Next
Aufraeumen:
  Set ws = Nothing
End Sub
 
  • #8
oh danke,genau so wollte ich es haben. :)
 
  • #9
mir ist da noch eine Frage beim testen eingefallen. ich wollte zusätzlich noch das selbe mit Spalte D machen(diesmal 10 Zeichen). nur leider klappt das nicht so einfach mit kopieren und auf Spalte D legen,da er ja die selben Variablen benutzt wie bei der Spalte A. wie gesagt, mit Makros kenn ich mich nicht aus. Ich wäre sehr dankbar wenn du mir das zeigen würdest.
 
  • #10
ahh,hab mich vertan. Bei der Spalte D bräuchte ich die Leerzeichen auf der linken Seite.
 
  • #11
Hi booboo,

die Konstanten/Variablen liegen innerhalb des Makro. Deshalb sind sie auch nur innerhalb sichtbar. Daher hättest Du ihn ruhig kopieren können. Den Namen des Makro mußt du dann aber ändern.

Hier das Gewünschte:
Code:
Sub SpalteDAufStringLange10BlancsLinksAuffuellen()
  Const c_SP = 4->Spalte D
  Const c_ersteWerteZeile = 1->erste Zeile mit ArtNr ggf. anpassen!!!
  Const c_ArtNrSollLaenge = 10
  
  Dim ws As Worksheet, l_zeilemax As Long, s_tmp As String, z As Long
  
  Set ws = ActiveSheet
 ->letzte Zeile bestimmen
  l_zeilemax = ws.Cells(ws.Rows.Count, c_SP).End(xlUp).Row
  
  For z = c_ersteWerteZeile To l_zeilemax
   ->Wert aus Zelle
    s_tmp = ws.Cells(z, c_SP).Value
    If Len(s_tmp) > c_ArtNrSollLaenge Then
      MsgBox (In Zeile  & z &  hat dir Artikelnummer mehr als  & _
              c_ArtNrSollLaenge &  Character !!! -> Abbruch)
      GoTo Aufraeumen
    End If
   ->rechts mit Leerzeichen auffüllen
    If Len(s_tmp) < c_ArtNrSollLaenge Then
      s_tmp = String(c_ArtNrSollLaenge - Len(s_tmp), Chr(32)) & s_tmp
    End If
    
   ->zurueckschreiben
   ->Format als Text setzen
    ws.Cells(z, c_SP).NumberFormat = @
    ws.Cells(z, c_SP).Value = s_tmp
    
  Next
Aufraeumen:
  Set ws = Nothing
End Sub

Einfach das Modul wieder öffnen und hinter den 1.Makro kopieren.

Gruß Matjes :)
 
  • #12
ich wollt mich nochmal kurz bedanken. Funktioniert alles super :)
Hät ich ohne deine Hilfe nicht hinbekommen.
 
Thema:

Excel Artikelnummern auf gleiche Länge füllen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben