Zeilen einfügen wenn Zelle nicht leer

  • Excel

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Zeilen einfügen wenn Zelle nicht leer

    Hallo liebe Mitglieder,

    bin ein VBA Neuling und brauche dringend Hilfe! Ich habe eine Excel-Tabelle in der in Spalte A was drin steht. Nun möchte ich in eine InputBox eingeben wieviel Leerzeilen ich einfügen möchte. Z.B. 20, dann soll geprüft werden ob in der Zelle A1, A2, A3 usw. was drin steht und wenn ja dann darunter diese 20 Zeilen eingefügt werden. Bitte bitte helft mir ich finde selbst keine Lösung. ;(

    Danke schon mal für die Mühe! :thumbup:
    Hey Chris,

    hast du schon Code probiert, bzw. einen Ansatz bei dem du nicht weiter kommst?

    Ich geb dir mal ein paar Stichworte: inputbox , entirerow.insert , isnumeric , cint

    lg
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Hi danke für die schnelle Antwort.

    Das man Zellen "manuell" einfügen kann habe ich schon mal.

    Visual Basic-Quellcode

    1. Sub Zeilen_einfuegen()
    2. Dim zeilenanzahl As Integer
    3. zeilenanzahl = InputBox("Wieviele Zeilen?")
    4. Range(ActiveCell, ActiveCell.Offset((zeilenanzahl - 1), 0)).EntireRow.Insert
    5. Cancel = True
    6. End Sub


    Dann habe ich probiert das er quasi prüft ob in der Zelle was drin steht, und wenn ja er dann Zellen einfügt. Das läuft aber auf eine Endlosschleife hinaus.

    Visual Basic-Quellcode

    1. Sub pruefen()
    2. Dim zeilenanzahl As Integer
    3. ende = ActiveSheet.UsedRange.Rows.Count
    4. zeilenanzahl = InputBox("Wieviele Zeilen sollen eingefügt werden?")
    5. For Each zelle In Tabelle1.Range("A1:A" & ende)
    6. On Error Resume Next
    7. If Not IsEmpty(zelle) Then
    8. zelle.EntireRow.Select
    9. Range(ActiveCell, ActiveCell.Offset((zeilenanzahl - 1), 0)).EntireRow.Insert
    10. Cancel = True
    11. Tabelle1.Cells(ActiveSheet.UsedRange.Rows.Count, 1).Value = zelle.Value
    12. Tabelle1.Cells(ActiveSheet.UsedRange.Rows.Count, 2).Value = ""
    13. End If
    14. Next zelle
    15. End Sub


    Weiß nicht ob ich komplett falsch bin oder schon auf dem richtigen Weg. Vielleicht hast du eine Lösung für mich? ;)
    Sieht doch nicht so übel aus der Anfang. ;)
    Als riesen Tip, den du dir hinter die Ohren schreiben solltest: verwende (wenn es nicht anders geht bzw. sich vermeiden lässt) niemals SELECT , ACTIVE ...

    Ich verstehe aber gar nicht so recht, was du vor hast... du ermittelst zuerst das ende der Tabelle (nicht zwingend Spalte A) um dann neue leere Zellen einzufügen, die doch eh schon leer sind?
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Also ich habe eine Tabelle in der stehen in Blatt eins Nummern in einer Spalte. Wie auf diesen Bild zu sehen:



    imgbox.de/show/img/HfKYegS8jZ.jpg

    In Tabellen-Blatt 2 stehen mehrere Zeilen Text. Am besten wäre es das VBA-Script automatisch ermittelt wie viele Zeilen das sind und die dann auf Blatt eins immer unter einer Nummer einfügt. Bzw. dort gleich den Text aus Blatt 2 einfügt.

    Das heisst am Ende soll es dann so aussehen:



    imgbox.de/show/img/ECXtbTuleV.jpg

    Ich hoffe das ist einigermaßen verständlich. ^^
    In Tabelle 2 steht immer der selbe Text bzw. der Text an selber Stelle (Spalte B). Kann ich per VBA nicht irgendwie festlegen er soll den Text aus Tab 2 Spalte B immer in Tab 1 neben die Nummern in Spalte B einfügen und eben enstprechend vorher die Leezeilen einfügen die er für den Text braucht?

    Die Frage war/ist notwendig, da ich die Leerzeichen einfügen wollte und dann manuell von Tab2 den Text kopieren und in Tab1 einfügen wollte, unsinnig und umständlich ich weiß. :wacko:
    Vielleicht lässt sich das ja auch automatisieren. Wie gesagt ich bin ein Neuling in VBA aber ich denke irgendwie muss das doch realisierbar sein oder, zumindest wäre es ideal und sehr zeitsparend wenn es automatisch ginge?

    Sorry, hatte mich nicht klar ausgedrückt. ;)
    So ungefähr (damit du was zum Debuggen hast):

    Visual Basic-Quellcode

    1. Sub InsertLines()
    2. LastLine = Tabelle2.Cells(Rows.Count, 2).End(xlUp).Row
    3. Set CopyRange = Tabelle2.Range("B1:B" & LastLine)
    4. Set c = Tabelle1.Cells(Rows.Count, 1).End(xlUp)
    5. Do
    6. For i = 2 To LastLine
    7. c.Offset(1).EntireRow.Insert xlDown
    8. Next
    9. CopyRange.Copy c.Offset(0, 1)
    10. If c.Row = 1 Then Exit Do
    11. Set c = c.Offset(-1)
    12. Loop
    13. End Sub
    Falls dein Sheet noch variabler wird, musst du halt den Rest anpassen.

    Das geht auch noch eleganter, aber ich habe gerade keine Lust (da drüben wartet eine nette Kollegin mit 'nem Kaffee ;))
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Spaß - OFFTOPIC

    Spoiler anzeigen

    Chris92 schrieb:

    ;) Mache mich heute oder morgen nochmal drüber ^^

    er vielleicht auch!? :D :D

    petaod schrieb:

    (da drüben wartet eine nette Kollegin mit 'nem Kaffee ;))


    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Okay, habe mal debuggt. Das ganze schaut ja ganz gut aus, zumindest ist mir kein Fehler aufgefallen. Den Code verstehe ich auch so einigermaßen (Zumindest denke ich, dass ich das tue :D ). Nur wo in dem Code wird festgelegt, dass er den Text aus Tabelle 2 in die Spalte B bei Tabelle 1 einfügt? Das wäre das einzige was ich noch etwas variabel anpassen können müsste, denn manchmal steht dann in A und B was und der Text soll in C. ^^

    Edit: Gut ich habe die Stelle schon mal gefunden in der das festgelegt wird. Jetzt funktioniert der Code aber nicht mehr so ganz.

    Edit: Der Code funktioniert wieder. :thumbsup:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Chris92“ ()

    Set c = Tabelle1.Cells(Rows.Count, 1).End(xlUp)Das c wird auf die erste Spalte festgelegt
    CopyRange.Copy c.Offset(0, 1)Hier wird eingefügt 1 Stelle rechts von c
    Wenn du immer nach der letzten gefüllten Spalte einfügen willst, kannst du das auch variabel gestalten:

    Visual Basic-Quellcode

    1. CopyRange.Copy Tabelle1.Cells(c.Row,Columns.Count).End(xlToLeft).Offset(0,1)
    Falls du in der ersten freien Zelle einfügen willst:

    Visual Basic-Quellcode

    1. CopyRange.Copy c.End(xlToRight).Offset(0,1)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()