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

Forumthread: Range verschieben

Range verschieben
09.11.2005 10:50:34
Peter
Guten Tag
Ich habe der Variablen p den Wert Range("B6").Value ( p = Range("B6").Value )
zugewiesen. Wie kann ich in einer Schleife diesen Wert auf "C6" (also Spalte + 1) ändern? Ähnlich wird es wohl mit der Änderung von "B6" auf "B7" gehen?
Danke für Feedback.
Peter
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range verschieben
09.11.2005 11:00:01
MSchilcher
Hi Peter,
ActiveCell.offset(0,1)
Gruß,
Martin
AW: Range verschieben
09.11.2005 11:31:28
Peter
Hallo Martin
Danke für das rasche Feedback.
Mein Problem ist, dass B6 nicht die aktive Zelle ist. Gibt es trotzdem eine Lösung?
Gruss, Peter
AW: Range verschieben
09.11.2005 11:46:19
MartinS
Hi Peter,
wenn ich dich richtig verstanden habe, ist "B6" in einer Variablen "p", also kannst du auch schreiben "p.offset(0,1)".
"p.value" ist nun die Zelle "C6"
Wenn du "B7" willst, dann schreib "p.offset(1,0)".
Gruß,
Martin
Anzeige
AW: Range verschieben
09.11.2005 11:54:21
Peter
Hallo
Es ist tatsächlich so, dass "B6" in der Variablen "p" steckt.
Wenn ich allerdings
p.offset(0, 1) schreibe kommt folgende Meldung:
Fehler beim Kompilieren: Erwartet =
Was muss ich noch ändern?
Gruss, Peter
AW: Range verschieben
09.11.2005 11:56:18
MartinS
Hi Peter,
zeig mir doch mal deinen Code und was du damit machen willst, damit ich dir richtig helfen kann.
Gruß,
Martin
Anzeige
AW: Range verschieben
09.11.2005 12:07:21
Peter
Ich habe den heutigen unbeantworteten Eintrag "zerstückelt". Vgl. Ende des Subs (vor der private function) - ich will die Variable "r", die den Wert "E4" hat auf "E5" ändern. Irgend einmal muss noch eine Schleife entstehen, damit ich die ganzen Daten abarbeiten kann.
Gruss, Peter
Sub DatenEintragen()
Dim p as String 'Pfad
Dim f as string 'File
Dim s as string 'Sheet
Dim r as string 'zelle
ThisWorkbook.Activate
Range("E6").Select 'E6 ist immer Startposition der Einträge
p = Range ("B6").Value 'Pfad im aktiven Sheet in Spalte B, ab Zeile 6
f = Range ("C6").Value 'Dateiname im aktiven Sheet in Sp C, ab Zeile 6
s = Range = "Tabelle1" 'Sheet in Quelldateien heisst immer "Tabelle1"
r = Range ("E4").Value 'Zelle im aktiven Sheet in Zeile 4, ab Spalte E
ActiveCell.Value = getvalue(p, f, s, r)
ActiveCell.Offset(0,1).Select 'Feld für nächsten Eintrag wird ausgewählt
r.Offset(0,1) -- FEHLERMELDUNG
End Sub

Private Function getvalue(path, file, sheet, ref)
'holt einen Wert aus geschlossener Datei
Dim arg as String
'sicherstellen, dass das File existiert
If Right(path, 1) <> "\" then path = path & "\"
If Dir(path & file) = "" Then
getvalue = "File not found"
Exit Function
End if
'Wert holen und arg zuweisen
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
getvalue = ExecuteExcel4Macro(arg)
End Function

Anzeige
AW: Range verschieben
09.11.2005 13:43:32
MartinS
Hallo Peter,

Sub Test()
Dim r As Variant
Set r = Range("E4")
r.Offset(1, 0).Select
Set r = ActiveCell
'r.value ist nun der Inhalt aus E5
End Sub

Gruß,
Martin
AW: Range verschieben
09.11.2005 14:09:49
Peter
Hallo Martin
Ich bin noch nicht ganz glücklich mit der Lösung. Eigentlich möchte ich die ActivCell nicht verändern, da bei der aktuellen Zelle der nächste Eintrag erfolgen soll. Sonst müsste ich vor dem "Wegspringen" die aktuelle Adresse der aktiven Zelle speichern und diese dann wieder anspringen - weiss nicht, ob das nichtzu kompliziert ist.
Ich muss nur die Variable R von "E4" zu "E5" machen, damit das Makro dann den richtigen Wert aus der geschlossenen Datei abholt und in der aktiven Zelle einträgt. Wenn die Variable nur eine Zahl wäre, könnte ich ja jeweils um 1 erhöhen (r = r + 1), das geht natürlich bei Zellreferenzen nicht. Aber vielleicht gibt es eine andere elegante Lösung, damit ich letztlich den ganzen Pfad der gesuchten Datei zusammensetzen kann (Pfad, Dateiname, Sheet müssen jeweils zusammengesetzt werden), woraus ich letztlich einen bestimmten Zellwert hole.
Gruss, Peter
Anzeige
AW: Range verschieben
09.11.2005 14:31:53
MartinS
Hi Peter,
selbstverständlich kannst du die Zellrefernz hochzählen, indem du z.b. sagst:

Sub Test()
Dim row As Integer
For row = 1 To 10
Cells(row, 1).Select
Next
End Sub

Hier werden die Zellen a1 bis a10 einzeln durchgegangen!
Für e würde es in diesem Beispiel "Cells(row,5).select"
Leider ist mir der gesamtzusammenhang bei deinem Problem nicht klar, deswegen erfolgt meine antwort nur als hilfestellung! Richtig einbauen musst du es leider selber.
MfG
Martin
Anzeige
AW: Range verschieben
09.11.2005 14:47:54
Peter
Hallo Martin
Das hilft mir durchausweiter. Wie muss ich nachfolgende Zeile umschreiben, wenn ich nicht will, dass diese Zelle angewählt wird, sondern in die Variable r geschrieben wird?
Gruss, Peter
Cells(row, 1).Select
AW: Range verschieben
09.11.2005 15:14:04
MartinS
Hi,
ein kleines beispiel:

Sub test()
Dim row As Integer
Dim r As String
For row = 1 To 10
Cells(row, 1).Select
r = ActiveCell.Value 'Übergabe an r
Cells(row, 2).Value = r 'Wert in r wird ausgegeben
Next
End Sub

Gruß,
Martin
Anzeige
AW: Range verschieben
10.11.2005 14:19:27
Peter
Hallo Martin
Ich habe wieder etwas Hilfreiches gelernt.
Vielen Dank.
Peter
AW: Range verschieben
09.11.2005 11:48:06
atikar
Hallo Peter,
ich kenne mich leider nicht super mit makros aus, aber ich sehe 2 lösungsansätze.
1. statt range den befehl cells(reihe,spalte)
( hier kannst du dann die variablen reihe oder spalte verändern)
2. du wandelst deine spaltennummer in einen buchstaben um (a = 1, b = 2 usw.)
mit z.b.
for x = 1 to 10
spalte = Application.Substitute(Cells(x, 1).Address(0, 0), 1, "")
range(spalte & "1").value
next x
Anzeige
AW: Range verschieben
09.11.2005 11:48:24
atikar
Hallo Peter,
ich kenne mich leider nicht super mit makros aus, aber ich sehe 2 lösungsansätze.
1. statt range den befehl cells(reihe,spalte)
( hier kannst du dann die variablen reihe oder spalte verändern)
2. du wandelst deine spaltennummer in einen buchstaben um (a = 1, b = 2 usw.)
mit z.b.
for x = 1 to 10
spalte = Application.Substitute(Cells(x, 1).Address(0, 0), 1, "")
range(spalte & "1").value
next x
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bereich in Excel mit VBA verschieben


Schritt-für-Schritt-Anleitung

Um einen Bereich in Excel mit VBA zu verschieben, kannst du die Offset-Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (deinDateiname)", wähle "Einfügen" und dann "Modul".

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub BereichVerschieben()
       Dim p As Range
       Set p = Range("B6") ' Setze die Zelle B6 als Ausgangspunkt
       p.Offset(0, 1).Select ' Verschiebe zu C6
       ' Um weiter zu verschieben, kannst du Offset entsprechend anpassen
       ' Beispiel: p.Offset(1, 0) für B7
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um den Bereich zu verschieben.


Häufige Fehler und Lösungen

  • Fehler: "Erwartet ="

    • Lösung: Stelle sicher, dass du die Set-Anweisung korrekt verwendest, wenn du eine Range-Variable zuweist. Beispiel: Set p = Range("B6").
  • Fehler bei der Verwendung von ActiveCell

    • Lösung: Wenn du nicht möchtest, dass die ActiveCell geändert wird, verwende direkt die Range-Referenz anstelle von ActiveCell.Offset(...).

Alternative Methoden

  1. Verwendung von Cells: Du kannst auch die Cells-Methode verwenden, um Zellen zu referenzieren, was besonders nützlich ist, wenn du mit Schleifen arbeitest.

    For i = 1 To 10
       Cells(i, 2).Value = "Wert " & i ' Setzt Werte in Spalte B
    Next i
  2. Excel-Dateinamen aus Zellen zusammensetzen: Wenn du den Excel-Dateinamen aus mehreren Zellen zusammensetzen möchtest, kannst du dies so tun:

    Dim dateiname As String
    dateiname = Range("B6").Value & "_" & Range("C6").Value

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du den Offset-Befehl und die Range-Methoden verwenden kannst:

  1. Verschieben des Wertes von E4 nach E5:

    Sub Beispiel()
       Dim r As Range
       Set r = Range("E4")
       r.Offset(1, 0).Value = r.Value ' Überträgt den Wert von E4 nach E5
    End Sub
  2. Schleife zur Bearbeitung mehrerer Zeilen:

    Sub MehrereEinträge()
       Dim i As Integer
       For i = 0 To 10
           Range("E6").Offset(i, 0).Value = "Eintrag " & i
       Next i
    End Sub

Tipps für Profis

  • Nutze die With-Anweisung, um den Code lesbarer zu machen:

    With Range("B6")
       .Offset(0, 1).Value = "Neuer Wert"
       .Offset(1, 0).Select
    End With
  • Überlege, ob du Application.ScreenUpdating = False verwenden möchtest, um die Leistung deines Makros zu verbessern, insbesondere bei großen Datenmengen.


FAQ: Häufige Fragen

1. Wie kann ich einen Wert in einer Zelle erhöhen? Um einen Wert in einer Zelle zu erhöhen, kannst du einfach den aktuellen Wert auslesen und eins hinzufügen:

Dim wert As Integer
wert = Range("A1").Value
Range("A1").Value = wert + 1

2. Was mache ich, wenn ich die aktive Zelle nicht verändern möchte? Verwende stattdessen die Referenz der Zelle, die du bearbeiten möchtest, ohne die ActiveCell zu verwenden. Beispielsweise:

Dim r As Range
Set r = Range("E4")
r.Offset(1, 0).Value = "Neuer Wert"

3. Wie kann ich einen Bereich in einer Schleife verschieben? Verwende die Offset-Methode in einer Schleife, um den Bereich dynamisch zu verschieben:

Dim i As Integer
For i = 0 To 10
    Range("B6").Offset(i, 0).Value = "Eintrag " & i
Next i

Mit diesen Informationen solltest du in der Lage sein, Bereiche in Excel effizient zu verschieben und deine VBA-Kenntnisse zu erweitern!

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