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

Forumthread: VBA ohne Select

VBA ohne Select
10.01.2007 16:25:47
FritzF
Hallo Excel Forum
Ich habe mir mit dem Makrorecorder, den folgenden Code aufgezeichnet:

Sub Makro6()
Range("A6").Select
Selection.ClearContents
Range("A27").Select
Selection.ClearContents
Range("A40").Select
Selection.ClearContents
Columns("A:A").Select
Selection.Copy
Columns("P:P").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("P1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A6").Select
ActiveCell.FormulaR1C1 = "Modell"
Range("A27").Select
ActiveCell.FormulaR1C1 = "Modell"
Range("A40").Select
ActiveCell.FormulaR1C1 = "Modell"
Range("A1").Select
End Sub

Das ganze funktioniert auch, doch möchte ich den Code ohne das Selektieren.
Wie müsste ich so was machen?
Besten Dank zum voraus und die besten Grüsse
Fritz
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
dreifach oT
10.01.2007 16:28:51
dreifach
o
AW: VBA ohne Select
10.01.2007 16:54:25
Jürgen
Ungeprüft ungefähr so:

Sub Makro6()
Application.screenupdating = false
Range("A6").Value = empty
Range("A27").Value = empty
Range("A40").Value = empty
Columns("A:A").Select
Selection.Copy
Columns("P:P").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("P1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A6").Value = "Modell"
Range("A27").Value = "Modell"
Range("A40").Value = "Modell"
Range("A1").Select
Application.screenupdating = true
End Sub

Gruß, Jürgen
Anzeige
AW: VBA ohne Select
10.01.2007 16:57:02
Jürgen
Ungeprüft ungefähr so:
...Die ersten und die letzten drei Zellen sind ja gleich, habe ich nicht drauf geachtet... also geht's noch etwas kürzer.

Sub Makro6()
Application.screenupdating = false
Range("A6").Value = "Modell"
Range("A27").Value = "Modell"
Range("A40").Value = "Modell"
Columns("A:A").Select
Selection.Copy
Columns("P:P").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("P1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Application.screenupdating = true
End Sub

Gruß, Jürgen
Anzeige
AW: VBA ohne Select
10.01.2007 17:17:57
FritzF
Hallo Jürgen
Danke für deine Hilfe, wobei Variante 2 für meine Bedürnisse nicht geht (denn ich brauche die Daten ohne "Modell" in der Spalte P, darum werden die erst gelöscht und dann wieder reingeschrieben.
PS: Die Spalte A sollte doch auch in die Spalte P kopiert werden können ohnd Select, oder sehe ich das falsch?
Danke und Gruss
Fritz
Anzeige
AW: VBA ohne Select
10.01.2007 17:18:02
FritzF
Hallo Jürgen
Danke für deine Hilfe, wobei Variante 2 für meine Bedürnisse nicht geht (denn ich brauche die Daten ohne "Modell" in der Spalte P, darum werden die erst gelöscht und dann wieder reingeschrieben.
PS: Die Spalte A sollte doch auch in die Spalte P kopiert werden können ohnd Select, oder sehe ich das falsch?
Danke und Gruss
Fritz
Anzeige
AW: VBA ohne Select
10.01.2007 17:21:55
mumpel
Leider geht das nicht, hab's vorher ausprobiert. Entweder geht es wirklich nicht oder ich mache etwas falsch.
Gruss Rene
AW: VBA ohne Select
10.01.2007 17:26:52
K.Rola
Hallo,

Sub Makro6()
Range("A6, A27, A40").ClearContents
Columns("A:A").Copy Columns("P:P")
Application.CutCopyMode = False
Columns("P:P").Sort Key1:=Range("P1"), Order1:=xlAscending, Header:=xlGuess
Range("A6, A27, A40") = "Modell"
End Sub

Gruß K.Rola
Anzeige
AW: VBA ohne Select
10.01.2007 17:31:32
FritzF
Hallo K.Rola
Wow, besten Dank, perfekt wie immer, schön von so einem Excel Spezialisten wie Dir eine Anwort auf so eine VBA Anfängerfrage zu bekommen :-)
Die besten Grüsse
Fritz
;
Anzeige
Anzeige

Infobox / Tutorial

VBA ohne Select optimieren


Schritt-für-Schritt-Anleitung

Um in Excel VBA eine Zelle auszuwählen, ohne die .Select-Methode zu verwenden, kannst Du direkt mit den Objekten arbeiten. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du den Code optimieren kannst:

  1. Verwende direkt die Eigenschaften der Zellen: Statt Range("A6").Select, setze den Wert direkt.
  2. Kopiere den Inhalt ohne .Select: Du kannst Inhalte von einer Spalte in eine andere kopieren, ohne sie vorher auszuwählen.
  3. Nutze die .ClearContents-Methode: Damit kannst Du den Inhalt von Zellen löschen, ohne sie auszuwählen.

Hier ist ein optimierter Code:

Sub MakroOptimiert()
    Application.ScreenUpdating = False

    ' Inhalte löschen
    Range("A6, A27, A40").ClearContents

    ' Spalte A in Spalte P kopieren
    Columns("A:A").Copy Destination:=Columns("P:P")

    ' Kopiermodus deaktivieren
    Application.CutCopyMode = False

    ' Sortierung
    Columns("P:P").Sort Key1:=Range("P1"), Order1:=xlAscending, Header:=xlGuess

    ' Werte festlegen
    Range("A6, A27, A40").Value = "Modell"

    Application.ScreenUpdating = True
End Sub

Häufige Fehler und Lösungen

  • Fehler: Runtime Error 1004 beim Sortieren
    Lösung: Stelle sicher, dass die Daten in der Spalte P korrekt sind und dass die Sortieroptionen richtig gesetzt sind.

  • Fehler: Inhalte erscheinen nicht in der Zielspalte
    Lösung: Überprüfe, ob Du die Zielspalte korrekt referenziert hast. Verwende Destination:=Columns("P:P") beim Kopieren.


Alternative Methoden

Falls Du mehrere Zellen gleichzeitig bearbeiten möchtest, kannst Du auch Arrays verwenden. Hier ist ein Beispiel:

Sub MitArray()
    Dim Daten As Variant
    Daten = Range("A1:A10").Value ' Werte aus Spalte A einlesen
    Range("P1:P10").Value = Daten ' Werte in Spalte P schreiben
End Sub

Diese Methode erlaubt es Dir, Daten effizienter zu verarbeiten, ohne viele Zeilen Code zu benötigen.


Praktische Beispiele

Wenn Du beispielsweise die Werte in Spalte A speichern und später wieder verwenden möchtest, könntest Du folgendes machen:

Sub Beispiel()
    Dim Werte As Variant
    Werte = Range("A1:A10").Value
    ' Irgendwelche Änderungen vornehmen
    Range("P1:P10").Value = Werte
End Sub

Diese Technik ist nützlich, um mehrere Zellen auf einmal zu bearbeiten, ohne sie vorher auszuwählen.


Tipps für Profis

  • Vermeide .Select und .Activate: Diese Methoden verlangsamen Deinen Code. Arbeite direkt mit den Objekten.
  • Nutze With-Anweisungen: Das reduziert den Code und macht ihn lesbarer:
With Range("A1:A10")
    .ClearContents
    .Value = "Neuer Wert"
End With
  • Aktiviere Application.ScreenUpdating nur einmal: Das verbessert die Performance Deines Codes.

FAQ: Häufige Fragen

1. Warum sollte ich .Select vermeiden?
Die Verwendung von .Select verlangsamt Deinen VBA-Code und macht ihn weniger robust. Direktes Arbeiten mit Objekten ist effizienter.

2. Kann ich mehrere Zellen gleichzeitig bearbeiten?
Ja, Du kannst mehrere Zellen gleichzeitig bearbeiten, indem Du sie in einem Array speicherst oder mit Range("A1:A10") arbeitest.

3. Wie kann ich sicherstellen, dass meine Sortierung funktioniert?
Stelle sicher, dass die Daten in der zu sortierenden Spalte korrekt sind und die Sortierparameter richtig gesetzt sind.

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