Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen einfügen mittels best. Zellwerte

Betrifft: Zeilen einfügen mittels best. Zellwerte von: Howard
Geschrieben am: 04.04.2008 14:37:00

Hi gEEks!
Ich arbeite grade an einem Projekt welches tausende von Informationen über diverse Reihen/serien sammelt (und auswertet).

Die Ausgangssituation ist wie folgt:
-ich habe Gruppierungen eingeteilt (das Alphabet -damit jeder buchstabe einzeln ausfahrbar ist)
-in jeder Gruppierung gibt es diverse Einträge gewisser Reihen/serien (Jede Reihe hat in Spalte F einen Vermerk wie viele Exemplare es gibt bzw. wie hoch die Anzahl ist)

http://img237.imageshack.us/img237/2592/neuesbildzz3.png
Ein Bild um es verständlich zu machen!

Ziel:
Am ende sollten unter der jeweiligen Reihe/serie so viele Leerzeilen sein wie in der Anzahl vermerkt wurde
Diese automatisch eingefügten Leerzeilen sollten (wenn das mgl. ist) sich gruppieren (mit dem Reihennamen als Hauptzeile).
Das tollste wäre es wenn der titel der Reihe in den darunter stehenden Leerzeilen nummeriert aufgelistet wird.

Ich hoffe es ist nicht zu schwierig!

Danke schon mal fuer eure Hilfe!
Den diese Arbeit nervt wenn mensch es tausende mal stupide nacheinander machen muß!

der Howard

  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Renee
Geschrieben am: 04.04.2008 14:40:33

Hi Howard,

Bei mir passiert nix, wenn ich auf die Buttons, deines hochgeladenen Programms drücke ;-)

GreetZ Renée


  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Howard
Geschrieben am: 04.04.2008 14:53:57

Hi Renee,
Hilft es dir trotzdem mir zu helfen? (Schliesslich sollten ja die Knöpfe deines Programms noch Funktionieren)
Oder war dein Post ein wissentliches Missverständniss?

Howard


  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Renee
Geschrieben am: 04.04.2008 15:04:21

Hi Howard,

Der Post war kein wissentliches Missverständniss, sondern ein unmissverständlicher Sarkasmus.

Lad doch deine Datei hoch. Niemand hat Lust irgendein Bild anzustarren, das Ganze irgendwie in Excel nachzubauen und dir dann irgendwelche, unvollständigen Tips zu geben.

GreetZ Renée


  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Howard
Geschrieben am: 04.04.2008 15:41:06

Hi Renée,
Hier ist die Datei zum Bild, hoffentlich hilft sie dir und den anderen!
Falls noch mehr grundInfos benötigt werden, bin ich zur stelle!

https://www.herber.de/bbs/user/51271.xls

Ps. hatte das Bild eigentlich nur eingefügt um meine Argumentationen verstaendlicher zu machen. Aber du hast vollkommen recht! Eine Xls.Datei ist wirklich benutzerfreundlicher!

Howard


  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: fcs
Geschrieben am: 06.04.2008 11:51:19

Hallo Howard,

hier mein Lösungsvorschlag

Gruß
Franz

Sub ZeilenEinfuegen()
'
' Makro am 06.04.08 von fcs erstellt unter Excel 97
'
  Dim objWs As Worksheet
  Dim bolRahmen As Boolean
  Dim lngZeile As Long
  Dim intAnzahl As Integer, intI As Integer
  Dim strGruppe As String
  
  Const lngZeileGrp1 As Long = 5    '1. Zeile mit einer Gruppe
  Const intSpalteAnz As Integer = 6 'Nummer der Spalte mit der Anzahl
  Const intSpalteGrp As Integer = 3 'Nummer der Spalte mit der Gruppe
  Const lngFarbe As Long = 4        'ColorIndex, Farbe der eingefügten Zeilen (hellgrün)
  'Format der laufenden Nr, die angehängt wird, hier 01, 02 ,03 usw.
  Const strFormatNr As String = "00"
  
  Set objWs = Worksheets("Tabelle1")
'
  With objWs
    'Alle gruppierten Zeilen der Ebene 2 einblenden
    .Outline.ShowLevels RowLevels:=2
    Application.ScreenUpdating = False
    'Zeilen von unten nach oben abarbeiten
    For lngZeile = .Cells(.Rows.Count, intSpalteGrp).End(xlUp).Row To lngZeileGrp1 Step -1
      'Prüfen ob in Spalte mit Anzahl eine Zahl eingetragen ist
      If Not IsEmpty(.Cells(lngZeile, intSpalteAnz)) _
            And IsNumeric(.Cells(lngZeile, intSpalteAnz)) Then
        'Prüfen, ob Zeile, vor der eingefügt wird, in Spalte Anzahl leer ist. _
          Diese Zeilen haben keine Rahmen und der Rahmen für die eingefügten _
          Zeilen muss formatiert werden
        If IsEmpty(.Cells(lngZeile + 1, intSpalteAnz)) Then
          bolRahmen = True
        Else
          bolRahmen = False
        End If
        'Werte für Gruppe und Anzahl merken
        strGruppe = .Cells(lngZeile, intSpalteGrp).Value
        intAnzahl = .Cells(lngZeile, intSpalteAnz).Value
        'Anzahl Leerzeilen einfügen
        .Range(.Rows(lngZeile + 1), _
            .Rows(lngZeile + intAnzahl)).Insert Shift:=xlShiftDown
        'Eingefügte Zeilen formatieren
        With .Range(.Rows(lngZeile + 1), .Rows(lngZeile + intAnzahl))
          'Füllfarbe  ändern
          .Interior.ColorIndex = lngFarbe
          'ggf. Rahmen formatieren
          If bolRahmen = True Then
            .BorderAround LineStyle:=xlContinuous
            .Borders(xlInsideHorizontal).LineStyle = xlContinuous
            .Borders(xlInsideVertical).LineStyle = xlContinuous
            With .Borders
              .Weight = xlThin
            End With
          End If
        End With
        'Gruppenbezeichnungen durchnummerieren
        For intI = 1 To intAnzahl
          .Cells(lngZeile + intI, intSpalteGrp).Value = strGruppe _
                & Format(intI, strFormatNr)
        Next
      End If
    Next
    Application.ScreenUpdating = True
  End With
End Sub




  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Howard
Geschrieben am: 06.04.2008 17:48:56

Hi FCS und andere gEEks,

Ersteinmal ein Riesendanke fuer diesen Macro, er hilft mir sehr viel weiter! =)



Ich habe ein bisschen was veraendert, wie zb. 001 anstatt 01, also nur kleinigkeiten!

die einzigen Sachen die mir noch einfallen, was ich aber nicht hinkriege>>

-das die eingefuegten leerzeilen gruppiert werden

-das bei einem wert von 1 keine leerzeile eingefuegt wird

-(Cool waer es auch wenn die infos aus spalte D & E nach unten kopiert werden ohne aenderung)



https://www.herber.de/bbs/user/51302.xls


Hier ist eine xls direkt aus dem projekt um zu veranschaulichen was ich meine!



der dankbare Howard





MACRO:




Sub ZeilenEinfuegen()
'
' Makro am 06.04.08 von fcs erstellt unter Excel 97 & bearbeitet von Howard unter Excel 03
'
  Dim objWs As Worksheet
  Dim bolRahmen As Boolean
  Dim lngZeile As Long
  Dim intAnzahl As Integer, intI As Integer
  Dim strGruppe As String
  
  Const lngZeileGrp1 As Long = 5    '1. Zeile mit einer Gruppe
  Const intSpalteAnz As Integer = 6 'Nummer der Spalte mit der Anzahl
  Const intSpalteGrp As Integer = 3 'Nummer der Spalte mit der Gruppe
  'Format der laufenden Nr, die angehängt wird, hier 001, 002 ,003 usw.
  Const strFormatNr As String = " 000"
  
  Set objWs = Worksheets("Tabelle1")
'
  With objWs
    'Alle gruppierten Zeilen der Ebene 2 einblenden
    .Outline.ShowLevels RowLevels:=2
    Application.ScreenUpdating = False
    'Zeilen von unten nach oben abarbeiten
    For lngZeile = .Cells(.Rows.Count, intSpalteGrp).End(xlUp).Row To lngZeileGrp1 Step -1
      'Prüfen ob in Spalte mit Anzahl eine Zahl eingetragen ist
      If Not IsEmpty(.Cells(lngZeile, intSpalteAnz)) _
            And IsNumeric(.Cells(lngZeile, intSpalteAnz)) Then
        'Prüfen, ob Zeile, vor der eingefügt wird, in Spalte Anzahl leer ist. _
          Diese Zeilen haben keine Rahmen und der Rahmen für die eingefügten _
          Zeilen muss formatiert werden
        If IsEmpty(.Cells(lngZeile + 1, intSpalteAnz)) Then
          bolRahmen = True
        Else
          bolRahmen = False
        End If
        'Werte für Gruppe und Anzahl merken
        strGruppe = .Cells(lngZeile, intSpalteGrp).Value
        intAnzahl = .Cells(lngZeile, intSpalteAnz).Value
        'Anzahl Leerzeilen einfügen
        .Range(.Rows(lngZeile + 1), _
            .Rows(lngZeile + intAnzahl)).Insert Shift:=xlShiftDown
        'Eingefügte Zeilen formatieren
        With .Range(.Rows(lngZeile + 1), .Rows(lngZeile + intAnzahl))
          'ggf. Rahmen formatieren
          If bolRahmen = True Then
            .BorderAround LineStyle:=xlContinuous
            .Borders(xlInsideHorizontal).LineStyle = xlContinuous
            .Borders(xlInsideVertical).LineStyle = xlContinuous
            With .Borders
              .Weight = xlThin
            End With
          End If
        End With
        'Gruppenbezeichnungen durchnummerieren
        For intI = 1 To intAnzahl
          .Cells(lngZeile + intI, intSpalteGrp).Value = strGruppe _
                & Format(intI, strFormatNr)
        Next
      End If




  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: fcs
Geschrieben am: 06.04.2008 18:54:43

Hallo Howard,

hier das Makro mit den erforderlichen Anpassungen.
Ich hab auch noch bei den Formatierungen etwas gebastelt, so dass die Rahmen nur in den Spalten C bis J eingefügt werden falls erforderlich und in Spalte C die Zeilen mit den nummerierten Einträgen nicht fett formatiert werden.

Gruß
Franz

Sub ZeilenEinfuegen()
'
' Makro am 06.04.08 von fcs erstellt unter Excel 97 & bearbeitet von Howard unter Excel 03
'
  Dim objWs As Worksheet
  Dim bolRahmen As Boolean
  Dim lngZeile As Long
  Dim intAnzahl As Integer, intI As Integer
  Dim strGruppe As String
  
  Const lngZeileGrp1 As Long = 5    '1. Zeile mit einer Gruppe
  Const intSpalteAnz As Integer = 6 'Nummer der Spalte mit der Anzahl
  Const intSpalteGrp As Integer = 3 'Nummer der Spalte mit der Gruppe
  'Format der laufenden Nr, die angehängt wird, hier 001, 002 ,003 usw.
  Const strFormatNr As String = " 000"
  
  Set objWs = Worksheets("Tabelle1")
'
  With objWs
    'Alle gruppierten Zeilen der Ebene 2 einblenden
    .Outline.ShowLevels RowLevels:=2
    Application.ScreenUpdating = False
    'Zeilen von unten nach oben abarbeiten
    For lngZeile = .Cells(.Rows.Count, intSpalteGrp).End(xlUp).Row To lngZeileGrp1 Step -1
      'Prüfen ob in Spalte mit Anzahl eine Zahl eingetragen ist
      If Not IsEmpty(.Cells(lngZeile, intSpalteAnz)) _
            And IsNumeric(.Cells(lngZeile, intSpalteAnz)) Then
        'Prüfen, ob Zeile, vor der eingefügt wird, in Spalte Anzahl leer ist. _
          Diese Zeilen haben keine Rahmen und der Rahmen für die eingefügten _
          Zeilen muss formatiert werden
        If IsEmpty(.Cells(lngZeile + 1, intSpalteAnz)) Then
          bolRahmen = True
        Else
          bolRahmen = False
        End If
        'Werte für Gruppe und Anzahl merken
        strGruppe = .Cells(lngZeile, intSpalteGrp).Value
        intAnzahl = .Cells(lngZeile, intSpalteAnz).Value
        If intAnzahl > 1 Then
          'Anzahl Leerzeilen einfügen
          .Range(.Rows(lngZeile + 1), _
              .Rows(lngZeile + intAnzahl)).Insert Shift:=xlShiftDown
          'Eingefügte Zeilen formatieren und gruppieren
          With .Range(.Cells(lngZeile + 1, 3), .Cells(lngZeile + intAnzahl, 10))
            'ggf. Rahmen in Spalten C bis J formatieren
            If bolRahmen = True Then
              .BorderAround LineStyle:=xlContinuous
              .Borders(xlInsideHorizontal).LineStyle = xlContinuous
              .Borders(xlInsideVertical).LineStyle = xlContinuous
              With .Borders
                .Weight = xlThin
              End With
            End If
          End With
          'Zellen mit nummerierten Gruppen in Spalte C nicht fett
          With .Range(.Cells(lngZeile + 1, 3), .Cells(lngZeile + intAnzahl, 3))
            .Font.Bold = False
          End With
          'eingefügte Zeilen gruppieren
          With .Range(.Rows(lngZeile + 1), .Rows(lngZeile + intAnzahl))
            .Group
          End With
          'Gruppenbezeichnungen durchnummerieren und Werte aus Spalten D und E übernehmen
          For intI = 1 To intAnzahl
            .Cells(lngZeile + intI, intSpalteGrp).Value = strGruppe _
                  & Format(intI, strFormatNr)
            .Cells(lngZeile + intI, intSpalteGrp + 1).Value = _
                  .Cells(lngZeile, intSpalteGrp + 1).Value
            .Cells(lngZeile + intI, intSpalteGrp + 2).Value = _
                  .Cells(lngZeile, intSpalteGrp + 2).Value
          Next
        End If
      End If
    Next
    Application.ScreenUpdating = True
  End With
End Sub




  

Betrifft: AW: Zeilen einfügen mittels best. Zellwerte von: Howard
Geschrieben am: 07.04.2008 12:11:36

hi FCS!

DANKE! DANKE! DANKE! Der Macro erfüllt all meine Wünsche! Das ist echt der totale Hammer!! =)

Damit wird das Projekt um Wochen/Monate verkuerzt!!! =)



Ich haette allerdings noch eine Frage zu folgenden Sachverhalt:



Da ich den Macro von FCS (danke nochmal!) noch nicht die ganze zeit zur verfuegung hatte, habe ich einige Eintraege manuell bearbeitet nun sind aber die infos aus den Spalten D & E nicht mit kopiert worden, da ich zu faul war (das mit nummerieren und gruppieren hat mir gereicht!=).

Ist es moeglich das die infos der spalten d & e solange nach unten kopiert werden bis die leerzeilen enden

(das naechste info beginnt)?



Hier wieder eine *.xls!!

https://www.herber.de/bbs/user/51311.xls




der Howard (ist echt megagluecklich !!)



PS. Franz du bist Klasse!


 

Beiträge aus den Excel-Beispielen zum Thema "Zeilen einfügen mittels best. Zellwerte"