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

Forumthread: Offset Bereich festlegen

Offset Bereich festlegen
18.08.2014 13:24:23
Burghard
Hallo,
ich möchte einen Range-Bereich variabel gestalten.
Die Zeile "With Range("I3:J9")" möchte ich sinngemäß so verändern:
" With ActiveCell(Offset 0,5):ActiveCell(Offset 0,6) " (Code ist so ja falsch)
Hilfe wäre nett.
Grüße Burghard

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Offset Bereich festlegen
18.08.2014 13:30:02
Daniel
Hi
With Range(ActiveCell.Offset(0, 5), ActiveCell.Offset(0, 6))
oder:
With ActiveCell.Offset(0, 5).Resize(, 2)
Gruß Daniel

AW: Doch noch Probleme
18.08.2014 15:02:50
Burghard
Hallo Daniel,
vielen Dank für die Info. Hab ich wieder was dazugelernt. Im Prinzip funktioniert die Sache so.
Leider aber nicht ganz so in meiner Arbeitsmappe. Ich habe diese mal hochgeladen.
https://www.herber.de/bbs/user/92173.xls
In der Spalte "F" stehen eigentlich Namen (hier A bis F). Ich will mir durch das Makro das Tippen der Namen ersparen. Diese Datei brauche ich immer wieder.
Funktionsweise:
Wenn ich beispielsweise in B3 die Zahl 2 eingebe, dann wird in B3 der Buchstabe "B" (also eigentlich ein Name) geschrieben.
Der Rangebereich im Makro ist "F3:G9".
Wenn ich nun in B11 bis B16 Zahlen (1-6) eingebe, dann müsste sich der Rangebereich von "F3:G9" auf "F11:G16" anpassen. Das ist das Problem. Dies müsste sich im Makro anpassen. Für die anderen Tabellen darunter gilt das ähnlich.
Kannst Du mir weiterhelfen?
Grüße Burghard

Anzeige
AW: Doch noch Probleme
18.08.2014 15:20:33
Daniel
HI
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varRow, rngBereich As Range
Dim rngF As Range
Dim rngG As Range
Set rngBereich = Intersect(Range("B3:B73"), Target)
If rngBereich Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rngBereich In rngBereich.Cells
Set rngF = Range(Target.Offset(0, 4).End(xlUp).Offset(1, 0), Target.Offset(0, 4).End(xlUp). _
End(xlDown))
Set rngG = rngF.Offset(0, 1)
varRow = Application.Match(rngBereich.Value, rngG, 0)
If IsNumeric(varRow) Then
rngBereich.Value = rngF.Cells(varRow, 1).Value
Else
rngBereich.Value = Empty
End If
Next rngBereich
Application.EnableEvents = True
End Sub
Gruß Daniel

Anzeige
AW: Super! Lösung!
18.08.2014 15:34:40
Burghard
Danke Daniel!
Funktioniert wie gewünscht!
;
Anzeige
Anzeige

Infobox / Tutorial

Offset-Bereich in Excel VBA festlegen


Schritt-für-Schritt-Anleitung

Um einen variablen Range-Bereich in Excel mit VBA festzulegen, kannst Du die Offset-Methode verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor:

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

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsm)“ und wähle „Einfügen“ > „Modul“.
  3. Code einfügen:

    • Kopiere den folgenden Code in das Modul:
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim varRow As Variant
       Dim rngBereich As Range
       Dim rngF As Range
       Dim rngG As Range
    
       Set rngBereich = Intersect(Range("B3:B73"), Target)
       If rngBereich Is Nothing Then Exit Sub
    
       Application.EnableEvents = False
    
       For Each rngBereich In rngBereich.Cells
           Set rngF = Range(Target.Offset(0, 4).End(xlUp).Offset(1, 0), Target.Offset(0, 4).End(xlUp).End(xlDown))
           Set rngG = rngF.Offset(0, 1)
           varRow = Application.Match(rngBereich.Value, rngG, 0)
           If IsNumeric(varRow) Then
               rngBereich.Value = rngF.Cells(varRow, 1).Value
           Else
               rngBereich.Value = Empty
           End If
       Next rngBereich
    
       Application.EnableEvents = True
    End Sub
  4. Anpassungen vornehmen:

    • Ändere die Range-Angaben je nach Bedarf, z. B. Range("B3:B73") oder die Offset-Werte.
  5. Speichern und Testen:

    • Speichere den Code und teste ihn, indem Du Werte in die Zellen eingibst.

Häufige Fehler und Lösungen

  • Fehler: „Typen nicht übereinstimmend“
    Lösung: Überprüfe, ob die Zellen, die Du ansteuerst, den richtigen Datentyp haben (z. B. Zahl vs. Text).

  • Fehler: „Kein Ergebnis gefunden“ bei Application.Match
    Lösung: Stelle sicher, dass der gesuchte Wert tatsächlich in der Zielrange vorhanden ist.

  • Problem mit EnableEvents
    Lösung: Achte darauf, dass Application.EnableEvents immer wieder auf True gesetzt wird, um Schleifen zu vermeiden.


Alternative Methoden

Es gibt mehrere Möglichkeiten, mit Offset in Excel VBA zu arbeiten:

  1. Verwendung von Cells:

    Cells(ActiveCell.Row, ActiveCell.Column).Offset(1, 0).Value = "Neuer Wert"
  2. Direkte Nutzung von Range:

    Range("A1").Offset(1, 0).Value = "Neuer Wert"
  3. Kombination mit Resize:

    With ActiveCell.Offset(0, 5).Resize(, 2)
       ' Weitere Operationen hier
    End With

Praktische Beispiele

Beispiel 1: Dynamische Bereichsanpassung
Wenn Du in Zelle B3 eine Zahl eingibst, wird der Bereich F3:G9 automatisch auf F11:G16 angepasst, wenn die Zahl 2 eingegeben wird.

If Target.Address = "$B$3" Then
   Set rngBereich = Range("F" & Target.Value + 10 & ":G" & Target.Value + 10 + 5)
   ' Weitere Operationen hier
End If

Beispiel 2: Werte aus einer benachbarten Spalte übernehmen
Wenn Du in Spalte B einen Namen eingibst, wird der entsprechende Wert aus Spalte F übernommen.

rngBereich.Value = ActiveCell.Offset(0, 4).Value

Tipps für Profis

  • Verwende With-Anweisungen: Diese reduzieren den Code und verbessern die Lesbarkeit. Beispiel:

    With ActiveCell.Offset(0, 5)
       .Value = "Wert"
    End With
  • Fehlerbehandlung einfügen: Nutze On Error Resume Next, um Laufzeitfehler zu vermeiden.

  • Verwende Resize für dynamische Bereiche: Damit kannst Du die Größe des Bereichs basierend auf den Eingaben anpassen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Offset und Resize?
Offset verschiebt einen Bereich um die angegebenen Zeilen und Spalten, während Resize die Größe eines Bereichs ändert.

2. Wie kann ich mehrere Zellen gleichzeitig ansprechen?
Du kannst Selection.Offset oder Range.Offset in Verbindung mit Resize verwenden, um mehrere Zellen zu bearbeiten.

3. Warum funktioniert mein Code nicht?
Überprüfe, ob Du die richtigen Zellreferenzen und Offset-Werte verwendest. Auch der Datentyp kann eine Rolle spielen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige