Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: relativer Zellbezug

relativer Zellbezug
21.01.2005 09:50:41
Thomas
Hallo da draußen,
ich erbitte Hilfe, die ich in der Hilfeeinrichtung von Excel und VBA nicht finden konnte.
Mein Ziel: Kopieren eines Tabellenbereichs aus jeweils mehreren Dateien in eine Ergebnisdatei .
Dieser Tabellenbereich ist zwar gleich groß, aber in jeder der Quelldateien an einer anderen Stelle (Zeile).
Ein gleiches Merkmal in der vorangehenden Zeile habe ich gefunden, so daß ich per Makro in diese Zelle springen kann - soweit ist es noch ok.
Mein Problem: Ich möchte (per Makro) in die nächste Zelle (Zeile) springen und dann den gesuchten Tabellenbereich markieren. Theoretisch soll das ja kein Problem sein, da es ja relative Zellbezüge im Sinne von R1C1-Angaben gibt.
Aber wie formuliere ich das im Makro? Meine Versuche wie Range("R2C1").Select oder ähnlich werden nicht akzeptiert.
Per Makrorekorder bekomme ich einen absoluten Zellbezug - der nützt mir jedoch nichts.
Ich hoffe auf eine Idee und bedanke mich schon jetzt für Eure Mühe.
Thomas
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: relativer Zellbezug
21.01.2005 10:00:04
Alexander
Ich weiß nicht mehr genau wie's ging, aber da gab's ne Möglichkeit, die in etwa so geht:
Range("A1").Select
ActiveCell.Offset(rows, columns) = value
ActiveCell.Offset(0, 0) ist die aktivierte Zelle (hier A1), der Rest ist dann einfach.
Ich hoff, das hilft dir weiter
AW: relativer Zellbezug
21.01.2005 10:22:54
Thomas
Hallo Alexander, vielen Dank für die Idee.
Leider macht mein Makro nicht mit. Ich vermute, daß das wiederum an der Range-Anforderung liegt. In Deinem Beispiel ist das ein absoluter Bezug, in meinem ist es etwas Gesuchtes mit der (über MakroRecorder erstellten) Anweisung:
Windows("Test.xls").Activate
Cells.Find(What:="(SUM)", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
Ich vermute weiter, daß hieraus irgendwie etwas Festes wie eine absolute Adresse oder ein Range-Objekt werden muß, bevor es weitergehen kann.
Gibt es dazu noch Ideen?
Danke schon einmal
Thomas
Anzeige
AW: relativer Zellbezug
Kurt
Set gefunden = Cells.Find(What:="(SUM)", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False)
reihe = gefunden.Row
spalte = gefunden.Column
adresse = gefunden.Address
...und man muss auch beim Kopieren nichts selektieren (zumindest bei vba=gut)
...und Tschüss Kurt
Anzeige
AW: relativer Zellbezug
Thomas
Hallo Kurt und Alexander,
die von Kurt vorgeschlagene Methode hat bei mir nicht gewirkt.
Dafür habe ich im Sinne von Alexander noch weiter in der Hilfe gesucht und ganz versteckt bei "Range-Objekt" unter der"Offset-Eigenschaft" eine Zeile gefunden:
Selection.Offset(3, 1).Range("A1").Select
Die an meine Suchfunktion gekoppelt und es gab einen Zellen- bzw. Zeilensprung!
Mit der Range-Anweisung läßt sich dann auch statt "A1" ein Bereich wie "A1:D20" eingeben, der markiert wird. Damit läßt sich dann weitermachen.
Danke für die Hilfe und die Denkanstöße! Geteilte Ideen sind halt doppelt wertvoll - oder so ähnlich ... ;-)
Thomas
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Relativer Zellbezug in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools:

    • Stelle sicher, dass die Entwicklertools in Excel sichtbar sind. Gehe zu Datei > Optionen > Menüband anpassen und aktiviere das Kontrollkästchen Entwicklertools.
  2. Starte den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Rechtsklicke im Projektfenster auf dein Projekt, wähle Einfügen > Modul.
  4. Code für den relativen Zellbezug:

    • Verwende den folgenden Beispielcode, um einen relativen Zellbezug zu erstellen. Dies wird dir helfen, einen Bereich basierend auf einem gefundenen Wert zu markieren:
    Sub RelativerZellbezug()
       Dim gefunden As Range
       Dim zeile As Long
       Dim spalte As Long
    
       ' Suche nach einem bestimmten Wert
       Set gefunden = Cells.Find(What:="(SUM)", LookIn:=xlFormulas)
    
       ' Überprüfe, ob der Wert gefunden wurde
       If Not gefunden Is Nothing Then
           zeile = gefunden.Row
           spalte = gefunden.Column
    
           ' Verwende Offset für den relativen Zellbezug
           Range(Cells(zeile + 1, spalte), Cells(zeile + 20, spalte + 3)).Select
       End If
    End Sub
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle dein Makro aus und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden":

    • Stelle sicher, dass der gesuchte Wert tatsächlich in der Tabelle vorhanden ist. Verwende die Debug.Print-Anweisung, um die Werte zu überprüfen.
  • Problem mit absoluten Bezügen:

    • Wenn du einen Range-Bezug hast, der nicht funktioniert, stelle sicher, dass du die Offset-Eigenschaft korrekt verwendest. Anstelle von Range("R2C1") kannst du ActiveCell.Offset(1, 0) verwenden.
  • Auswahl von Zellen funktioniert nicht:

    • Wenn beim Auswählen von Zellen ein Fehler auftritt, überprüfe, ob die Zellen in der aktiven Tabelle liegen. Versuche, die Auswahl ohne Select durchzuführen, um den Code effizienter zu gestalten.

Alternative Methoden

  • Verwendung von ActiveCell:

    • Anstelle von festen Zellbezügen kannst du ActiveCell.Offset verwenden, um relativ zu der gerade aktiven Zelle zu arbeiten. Beispiel:
    ActiveCell.Offset(1, 0).Value = "Neuer Wert"
  • Diagonal geteilte Zelle:

    • Wenn du mit diagonalen geteilten Zellen arbeiten musst, kann es hilfreich sein, die Merge-Eigenschaft zu nutzen, um die Zellen zusammenzuführen, bevor du Werte zuweist.

Praktische Beispiele

  • Kopieren eines Bereichs:

    • Um einen Bereich zu kopieren und in eine andere Arbeitsmappe einzufügen, kannst du folgendes Beispiel verwenden:
    Sub KopiereBereich()
      Dim ws As Worksheet
      Set ws = ThisWorkbook.Sheets("Daten")
      ws.Range("A1:D20").Copy Destination:=Workbooks("Ziel.xls").Sheets("Tabelle1").Range("A1")
    End Sub
  • Zeilensprung:

    • Um einen Zeilensprung zu machen, verwende ActiveCell.Offset(1, 0).Select nach der Suche eines Wertes, um zur nächsten Zeile zu springen.

Tipps für Profis

  • Verwendung von With-Anweisungen:

    • Verwende With-Anweisungen, um deinen Code lesbarer und effizienter zu machen:
    With Cells.Find(What:="(SUM)")
      If Not .Is Nothing Then
          ' Weiterverarbeitung
      End If
    End With
  • Optimierung der Suchfunktion:

    • Nutze die MatchCase- und LookAt-Eigenschaften, um die Suche spezifischer zu gestalten und unnötige Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen relativem und absolutem Zellbezug? Der relative Zellbezug ändert sich, wenn du das Makro auf eine andere Zelle anwendest, während der absolute Zellbezug immer auf eine feste Adresse verweist.

2. Wie kann ich einen relativen Zellbezug im VBA verwenden? Du kannst die Offset-Eigenschaft verwenden, um relativ zu einer Zelle zu arbeiten, z.B. ActiveCell.Offset(1, 0) für die Zelle direkt darunter.

3. Was sind die Vorteile von relativen Zellbezügen in VBA? Relative Zellbezüge ermöglichen es dir, flexibler zu arbeiten, da du deinen Code nicht anpassen musst, wenn sich die Daten oder die Position der Zellen ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige