Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

zellen löschen, formeln behalten
#1
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
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
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
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • Enclave
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste