Clever-Excel-Forum

Normale Version: zellen löschen, formeln behalten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammenm
mit .Delete Shift:=xlup

lösche ich eine Zeile und schiebe sie nach oben,

dabei wird aber jedesmal meine Formel verkürzt.

Gibt es eine möglichkeit das meine Formel so bleibt wie ich sie angegeben habe, und ich trotzdem so die Zellen löschen kann?

hab es mit dem Namensmanger versucht, und mit den $ zeichen Formel zu fixeren aber alles ohne erfolg
Hallo Enclave,

hast Du probiert, die Formel vorher zu kopieren (oder in eine Variable zu schreiben) und nach dem Löschen der Zeile wieder einzufügen?

Gruß,
Lutz
da wüsste ich nicht wie ^^

ich greife mit einem Diagram auf die Zellen AW8:BA27 zu.
und immer wenn in der Zelle BA28 Daten stehen lösche ich die Zeile AW8 und schiebe den Inhalt darunter nach oben.

nur verringert sich so auch immer der Bereich für das Diagramm
Hallo,

nachfolgend habe ich dir eine Beispiel-VBA-SUB "Diagramm_Daten()" angefügt.
1) In dieser wird im Namensmanager ein benannter Zellbereich namens "Diagramm_Daten" im Bereich $AW$8:$BA$27 des aktiven Arbeitsblattes angelegt.
2) Mit Hilfe dieses benannten Zellbereiches wird eine VBA-Range-Variable "rngDaten" erzeugt und die Anzahlen der enthaltenen Zeilen und Spalten ermittelt.
3) Es wird dann die Zelle unterhalb der rechten unteren Ecke des Zellbereiches inspiziert 
4) Ist sie nicht leer, so wird die 1.Zeile (also $AW$8:$BA$8) entfernt und der restliche Zellbereich um 1 Zeile nach oben geschoben
5) Falls Pkt.4) zutraf, hat jetzt sowohl die Bereichsvariable als auch der benannte Zellbereich (im Namensmanager) 1 Zeile weniger, weswegen sowohl die Bereichsvariable auf die ursprüngliche Zeilenanzahl vergrößert wird als auch der Bereichsname des Namensmanagers auf den ursprünglichen Bereich.
6) Zum Schluss wird in einer Messagebox noch ein Größenvergleich durchgeführt, wo man sieht, dass beide (Bereichsvariable und Bereichsname) denselben ursprünglichen Zellbereich darstellen.
7) Der Code soll nur als Vorlage dienen - entnimm davon, was du brauchen kannst, insbesondere Pkt.6) wirst du in deinem Code nicht benötigen.
Code:
Option Explicit

Sub Diagramm_Daten()
  Dim Ws As Worksheet, Wb As Workbook
  Dim strNameDaten As String, strZellbereich As String
  Dim rngDaten As Range
  Dim lngZeilen As Long, lngSpalten As Long
 
'---- Ermittle Arbeitsmappenobjekt und Arbeitsblattobjekt ----
  Set Wb = ActiveWorkbook: Set Ws = Wb.ActiveSheet
 
'---- 1) Erzeuge Bereichsnamen für einen einen benannten Zellbereich ----
'---- Kann auch händisch im Namensmanager angelegt werden. --------------
  strNameDaten = "Diagramm_Daten": strZellbereich = "$AW$8:$BA$27"
  Wb.Names.Add Name:=strNameDaten, RefersTo:="=" & Ws.Name & "!" & strZellbereich
 
'---- 2) Erzeuge Bereichsvariable mittels vorgegebenem Bereichsnamen ----
  Set rngDaten = Range(Wb.Names(strNameDaten))
 
'---- Im Bereich der Bereichsvariablen tue Folgendes: ----
  With rngDaten
    '2) Ermittle Zeilen- und Spaltenanzahl des Bereichs
    lngZeilen = .Rows.Count: lngSpalten = .Columns.Count
   
    '3) Wenn die Zelle unterhalb der rechten unteren Ecke des Bereiches nicht leer ist:
    If Not IsEmpty(.Cells(lngZeilen + 1, lngSpalten).Value) Then
   
      '4) dann entferne die Zellen der 1.Zeile des Bereiches
      'und schiebe den restlichen Bereich um diese 1 Zeile hinauf.
      .Rows(1).Delete Shift:=xlUp
      '5) Die Bereichsvariable ist jetzt um 1 Zeile kleiner und auch
      'der benannte Bereioh ist jetzt um 1 Zeile kleiner!
    End If
  End With
 
  '5) Vergrößere die Bereichsvariable wieder auf die ursprüngliche (Zeilen)anzahl.
  Set rngDaten = rngDaten.Resize(lngZeilen)
  '5) Stelle den benannten Zellbereich wieder auf die ursprüngliche (Zeilen)anzahl.
  Wb.Names.Add Name:=strNameDaten, RefersTo:="=" & Ws.Name & "!" & strZellbereich
   
  '6) Zeige den Zellbereichsvergleich der Bereichsvariablen und des Bereichsnamens an:
  MsgBox Prompt:="DatenVariab: " & rngDaten.Address & vbNewLine & _
                 "DatenName: " & Range(Wb.Names(strNameDaten)).Address, _
         Buttons:=vbInformation, Title:="Bereichsvergleich"
  
End Sub