Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Bereich nach unten verschieben !!!





Frage

Ich grüsse alle Excelfans !!! ich habe folgenden Gedanken: Ich erstelle mit Excel Rechnungen. Der untere Bereich als Beispiel Zeile15 bis Zeile 20 enthält die Summe, Mwst usw. (was so in ein Rechnungsende gehört. Kopfbereich ist bis Zeile 10. Das heißt ich habe die Zeile 11 bis 14 für 4 Artikel. Meine Idee ist daß wenn zB. D14 eine Zahl oder auch Text enthält, müsse automatisch eine Zeile zwischen 14 und 15 eingefügt werden. Ich vermute mal das daß für einen Excelkenner ähnlich eines Kindergeburtstages ist;-) Gruß André

Antwort 1 von fedjo

Hallo André,
in das Codefenster der Tabelle einfügen:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static za1 As Variant
If za1 <> Range("D14").Value Then
za1 = Range("D14").Value
Rows("15:15").Insert Shift:=xlDown
End If
End Sub


Wird in D14 eine Zahl o. Text eingegeben o. verändert, dann fügt sich automatisch eine neue Zeile ein.

Gruß
fedjo

Antwort 2 von Andre007

Hallo fedjo

Vielen Dank für die schnelle Antwort. Ich hoffte ohne VBA auszukommen. Wie beschrieben funktioniert die Sache. Für meine Zwecke muss diese Programmierung noch dahingehend optimiert werden:
-Ein Eintrag in D14 fügt eine neue Zeile 15 ein.
-Ein Eintrag in D15 (die neue Zeile) fügt wiederum eine Zeile (16)ein.
-usw.
-Das löschen eines Eintrages aus D?? darf keine Zeile einfügen.
-Optimal wäre wenn D?? leer ist, dass die aktuelle Zeile gelöscht werden würde

Wäre prima wenn Du dazu auch einen Einfall hättest.
Da Die beschriebenen Zellen ja nur ein Muster darstellen, wäre es toll wenn Du ganz kurz beschreiben könntest welcher Code was bewirkt.(Um die Programmierung auf unterschiedliche Mappen zu optimieren)

Vielen Dank im Vorraus
André

Antwort 3 von Andre007

Da muß ich dann wohl doch auf die billige Variante (strg und +) zurückgreifen.

Antwort 4 von rainberg

Hallo André,

probier mal das:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column <> 4 Then Exit Sub
   If Target.Value <> "" Then
      Selection.EntireRow.Insert
   ElseIf Target.Value = "" Then
      Selection.EntireRow.Delete
   End If
End Sub


Gruss
Rainer

Antwort 5 von fedjo

Hallo Andre,
in das Codefenster der Tabelle einfügen:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim RaBereich As Range, RaZelle As Range
Set RaBereich = Range(" D14:D1000")
Application.EnableEvents = False
For Each RaZelle In Range(Target.Address)
If RaZelle = "" Then
Selection.EntireRow.Delete
Else
If Not Intersect(RaZelle, RaBereich) Is Nothing Then RaZelle.Offset(0, 1).Insert
End If
Next RaZelle
Application.EnableEvents = True
Set RaBereich = Nothing
End Sub

Es wird immer eine Zeile eingefügt, wenn ein Eintrag o. Änderung in den Zellen D14:D1000 erfolgt.
Die aktuelle Zeile (D14:D1000 ) wird gelöscht, wenn der Eintrag entfernt wurde.

Gruß
fedjo

Antwort 6 von rainberg

Hallo Andrè,

sorry, ich hatte nicht beachtet, dass das Makro erst ab Zeile 14 wirken soll.
Hier die Änderung.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column <> 4 Or Target.Row < 14 Then Exit Sub
   If Target.Value <> "" Then
      Selection.EntireRow.Insert
   ElseIf Target.Value = "" Then
      Selection.EntireRow.Delete
   End If
End Sub


Gruss
Rainer

Antwort 7 von Andre007

Hallo

mit Deinem Code werden jetzt leider nur Zeilen in die Spalten >D eingefügt.
Das schiebt mir natürlich jetzt meine Datensätze auseinander. Trotzdem vielen Dank für Deine Bemühungen.

Die Lösung von Rainer passt eher.
Eine kleine Anmerkung habe ich jedoch auch hier noch.
Wenn ich zur Bestätigung der Eingabe in der Zelle D??? anstelle der Eingabe- die Tab- oder Pfeil-Rechts Taste nutze, wird mir meine neue Zeile anstelle unterhalb oberhalb der aktuellen Zeile eingefügt. Ich bin dann an der falschen Position und Formeln in folgenden Spalten werden beim Einfügen oberhalb nicht eingebaut.
Sicherlich hast Du hierfür auch noch eine Lösung.

Vielen Dank nochmal an alle Beteiligten für die Lösungsvorschläge

Gruß André

Antwort 8 von rainberg

Hallo Andre,

dann probier mal das:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column <> 4 Or Target.Row < 14 Then Exit Sub
   If Target.Value <> "" Then
      Target.Offset(1, 0).EntireRow.Insert
   ElseIf Target.Value = "" Then
      Selection.EntireRow.Delete
   End If
End Sub


Gruss
Rainer

Antwort 9 von Andre007

Hallo Rainer

Das funktioniert jetzt recht gut (für meine Zwecke optimal).
Allerdings habe ich noch zwei kleine "Würmer" gefunden. Vieleicht hast Du ja dazu auch noch eine Idee.

-Das löschen der Zeile klappt nicht, wenn ich eine Bereich markieren (z.B. B20:E24).
-Wenn ich in "D" mit Autoausfüllen arbeite wird auch keine Zeile eingefügt. Das ist jedoch nicht schlimm denn ich kann ja eine Spalte nutzen, wo kein Autoausfüllen möglich ist (z.B.Artikelbeschreibung). Es würde die Sache jedoch perfektionieren.

Vielen Dank
André

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: