Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ActiveCell.Offset und Variablen

Forumthread: ActiveCell.Offset und Variablen

ActiveCell.Offset und Variablen
27.09.2003 12:39:00
Marc
Hallöchen zusammen,

vielleicht kann mir einer folgendes erklären:

Ich habe eben einen Code geschrieben, der mit relativen Bezügen arbeitet.

Dabei ist mir aufgefallen, wenn ich schreibe
ActiveCell.Offset(1, 5).Range("A1").Select ist alles in Ordnung.

Wenn ich aber nun mit Variablen arbeiten will:

Dim i As Integer
i = 5
ActiveCell.Offset(1, i).Range("A1").Select
dann gibt das nen Fehler.

So weit so gut, wenn ich anstatt der Variablen nun ne Berechnung reinschreibe:
Dim i As Integer
i = 6
ActiveCell.Offset(1, (i-1)).Range("A1").Select

dann funktioniert das wieder.

Bin ich einfach zu blöd oder woran liegt das ?
Danke schon mal für euer Mühe !

Grüsse,
Marc
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveCell.Offset und Variablen
27.09.2003 12:56:49
PeterW
Hallo Marc,

mal von der Sinnhaftigkeit der Zeile abgesehen,
ActiveCell.Offset(1, i).Range("A1").Select
funktioniert. Was für einen Fehler erhältst du denn?

Gruß
Peter
Seltsam seltsam
27.09.2003 13:34:24
Marc
Hallo Peter,

danke für deine Antwort, aber als ich es nun nach neuerlichem Excelstart noch mal probiert habe, hat es funktioniert.
Komisch, komisch. Eben brach das Makro immer ab, Fehlermeldung kann ich jetzt nicht mehr genau wiedergeben.

Zur Sinnhaftigkeit:
Das Makro sollte eine Zelle auslesen (numerischer Wert und falls nicht Umwandlung in einen solchen), in dieser stand z.B. eine 5.
Davon ausgehend sollte das Makro eine Zeile runter und 5 Spalten nach rechts springen, um dort einen Eintrag vorzunehmen.

Das Procedere sollte unabhängig von der Zellposition laufen, deswegen habe ich mit relativen Bezügen gearbeitet.
Falls das einfacher geht, bin ich für Anregungen immer dankbar !

Grüsse,
Marc
Anzeige
wozundase?
27.09.2003 18:16:25
heinz
es geht darum, dass in
ActiveCell.Offset(1, i).Range("A1").Select
das
Range("A1")
sinnlos (bis störend) ist. kein unterschied ob da a1 oder z4711 drinnen
steht, also wozu?
außerdem ist select fast immer überflüssig
kannst ja sagen
ActiveCell.Offset(1, i).text (oder value, date usw) = deinequelle
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

ActiveCell.Offset und Variablen in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere den VBA-Editor mit ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Schreibe den Code. Ein einfaches Beispiel könnte so aussehen:

    Sub BeispielOffset()
       Dim i As Integer
       i = 5
       ActiveCell.Offset(1, i).Value = "Test" ' Schreibt "Test" in die Zelle, die 1 Zeile tiefer und 5 Spalten weiter rechts ist.
    End Sub
  4. Führe das Makro aus, während eine Zelle in der ersten Zeile aktiv ist. Du solltest sehen, dass der Text in der Zelle 1 Zeile tiefer und 5 Spalten rechts von der aktiven Zelle erscheint.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich": Dies kann passieren, wenn du versuchst, eine nicht numerische Variable in ActiveCell.Offset zu verwenden. Stelle sicher, dass die Variable, die du benutzt, vom Typ Integer ist.

  • Lösung für das Problem mit Variablen: Wenn ActiveCell.Offset(1, i).Range("A1").Select nicht funktioniert, überprüfe, ob i korrekt zugewiesen wurde. Manchmal kann ein Excel-Neustart helfen, um temporäre Probleme zu beheben.

  • Unnötige Verwendung von Select: In vielen Fällen ist es nicht notwendig, eine Zelle zu selektieren, um Werte zu setzen. Stattdessen kannst du direkt auf die Zelle zugreifen, wie im Beispiel oben gezeigt.


Alternative Methoden

Wenn du mit ActiveCell.Offset arbeitest, gibt es auch andere Methoden, um Zellen zu adressieren:

  • Verwendung von Cells: Du kannst auch die Cells-Methode verwenden, um auf Zellen zuzugreifen, z.B.:

    Cells(ActiveCell.Row + 1, ActiveCell.Column + i).Value = "Test"
  • Direkte Adressierung: Anstelle von ActiveCell.Offset kannst du auch direkt auf eine Zelle zugreifen, indem du ihre Adresse angibst:

    Range("B2").Value = "Test" ' Setzt den Wert in B2

Praktische Beispiele

Hier sind einige nützliche Beispiele, die zeigen, wie ActiveCell.Offset in verschiedenen Szenarien verwendet werden kann:

  1. Wert auslesen und modifizieren:

    Sub WertAuslesenUndModifizieren()
       Dim i As Integer
       i = ActiveCell.Value ' Wert aus der aktiven Zelle auslesen
       ActiveCell.Offset(1, 0).Value = i * 2 ' Verdopple den Wert und schreibe ihn eine Zeile tiefer
    End Sub
  2. Daten kopieren:

    Sub DatenKopieren()
       ActiveCell.Offset(0, 1).Value = ActiveCell.Value ' Kopiert den Wert der aktiven Zelle in die Zelle rechts daneben
    End Sub

Tipps für Profis

  • Vermeide Select und Activate: Diese Methoden können deinen Code verlangsamen und zu unerwarteten Fehlern führen. Greife direkt auf Zellen zu, um die Effizienz zu steigern.

  • Nutze With-Anweisungen: Wenn du mehrere Operationen auf derselben Zelle durchführen musst, kann eine With-Anweisung den Code lesbarer und schneller machen:

    With ActiveCell.Offset(1, 0)
       .Value = "Neuer Wert"
       .Interior.Color = RGB(255, 255, 0) ' Setze Hintergrundfarbe
    End With
  • Verwende Fehlerbehandlung: Implementiere einfache Fehlerbehandlungsroutinen, um unerwartete Fehler zu umgehen:

    On Error Resume Next
    ActiveCell.Offset(1, 0).Value = "Fehlerfrei"
    On Error GoTo 0

FAQ: Häufige Fragen

1. Warum funktioniert ActiveCell.Offset nicht manchmal? Manchmal kann es an der falschen Zuweisung der Variablen oder an einem temporären Problem in Excel liegen. Ein Neustart kann helfen.

2. Was ist der Vorteil der Verwendung von ActiveCell.Offset? Es ermöglicht dir, relativ zur aktuellen Position in der Tabelle zu arbeiten, was besonders nützlich ist, wenn du dynamische Daten verarbeiten möchtest.

3. Wie kann ich den Wert einer Zelle mit ActiveCell.Offset festlegen? Du kannst einfach ActiveCell.Offset(1, 0).Value = "Neuer Wert" verwenden, um den Wert in die Zelle eine Zeile tiefer zu schreiben.

4. Was bedeutet ActiveCell.Offset(0, 1).Select? Dies wählt die Zelle direkt rechts von der aktiven Zelle aus. Es ist jedoch oft unnötig, Select zu verwenden, wenn du einfach Werte setzen oder lesen möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige