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

Forumthread: Range in Schleife ändern

Range in Schleife ändern
11.12.2019 11:54:09
TomatenAugen
Hallo, vllt kann mir ja jemand weiterhelfen. Ich habe meinen Code mal vereinfacht dargestellt:
Sub Test()
Dim i As Long
Dim rng As Range
Dim A As String
Dim B As String
Dim C As String
For i = 1 To 5
rng = "Cells(i,9),Cells(i,12),Cells(i,15)"
Set A = CDate(WorksheetFunction.Small(Range(rng), 1))
Set B = CDate(WorksheetFunction.Small(Range(rng), 2))
Set C = CDate(WorksheetFunction.Small(Range(rng), 3))
Next
End Sub
Leider funktioniert das nicht, weil er das Range nicht richtig anerkennt. Ich will aber trotzdem, dass er für die Spalten 1-5 die jeweiligen As ausgibt (ich weiß hier wird der Wert immer überschrieben, passiert in meinem richtigen Code nicht). Vllt hat jemand eine Lösung?
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range in Schleife ändern
11.12.2019 12:14:46
ede
Hallo,
anbei mal ein vereinfachter Ansatz, welchen du auf deinen Code ableitenmusst:

Sub Test()
Dim i As Long
Dim rng As Variant
For i = 1 To 3
rng = Array(Tabelle1.Cells(i, 9), Tabelle1.Cells(i, 12), Tabelle1.Cells(i, 15))
MsgBox WorksheetFunction.Small(rng, 1)
Next
End Sub

gruss
ede
Anzeige
AW: Range in Schleife ändern
11.12.2019 12:27:36
Matthias
Moin!
Hier dein Code mal geändert zurück. Gab da ein paar Fehler. A , B und C snd nicht strings sondern Dates. Du hast ja untem imCode dort auch Cdate. Da kann du den Wert dort nur übergeben also ohne set. Set nur für Objekte wie bspw. Range. Deine Ranges kannst du mit UNion verbinden. Dort muss dann vor da rng ein set. Damit kannst du dann weiterarbeiten und brauchst kein extra Range(rng) - ist ja schon eine Range. Sieht dann wie folgt aus:
Sub Test()
Dim i As Long
Dim rng As Range
Dim A As Date
Dim B As Date
Dim C As Date
For i = 1 To 5
Set rng = Union(Cells(i, 9), Cells(i, 12), Cells(i, 15))
A = CDate(WorksheetFunction.Small(rng, 1))
B = CDate(WorksheetFunction.Small(rng, 2))
C = CDate(WorksheetFunction.Small(rng, 3))
Next
End Sub

VG
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Range in Schleife ändern


Schritt-für-Schritt-Anleitung

Um einen Range in einer Schleife korrekt zu ändern, kannst du folgenden Ansatz nutzen:

  1. Deklariere die Variablen: Stelle sicher, dass du die richtigen Datentypen verwendest. In diesem Fall ist es wichtig, dass A, B und C als Date deklariert werden.
  2. Verwende Union für den Range: Anstatt die Zellen in einem Array zu speichern, kannst du die Zellen mit Union kombinieren.

Hier ist ein Beispielcode:

Sub Test()
    Dim i As Long
    Dim rng As Range
    Dim A As Date
    Dim B As Date
    Dim C As Date

    For i = 1 To 5
        Set rng = Union(Cells(i, 9), Cells(i, 12), Cells(i, 15))
        A = CDate(WorksheetFunction.Small(rng, 1))
        B = CDate(WorksheetFunction.Small(rng, 2))
        C = CDate(WorksheetFunction.Small(rng, 3))
    Next
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Typenkonflikt" beim Zuweisen von Werten.

    • Lösung: Stelle sicher, dass die Variablen den richtigen Datentyp haben. Bei Datum sollte Date verwendet werden.
  • Fehler: Range wird nicht erkannt.

    • Lösung: Verwende Set für den Range und kombiniere die Zellen mit Union.

Alternative Methoden

Falls du die Zellen nicht mit Union kombinieren möchtest, kannst du die Werte auch in einem Array speichern. Hier ein Beispiel dafür:

Sub Test()
    Dim i As Long
    Dim rng As Variant

    For i = 1 To 5
        rng = Array(Cells(i, 9).Value, Cells(i, 12).Value, Cells(i, 15).Value)
        MsgBox WorksheetFunction.Small(rng, 1)
    Next
End Sub

Diese Methode ist besonders nützlich, wenn du mit dynamischen Daten arbeitest.


Praktische Beispiele

Hier sind ein paar praktische Beispiele, die dir helfen können, den Umgang mit Range in Schleifen zu verstehen:

  1. Werte sortieren: Du kannst die Werte in den Zellen sortieren, bevor du sie weiterverarbeitest.
  2. Daten in ein Array speichern: Wenn du eine große Anzahl von Daten hast, kann das Speichern in einem Array die Effizienz erhöhen.
Sub SortiereUndVerarbeite()
    Dim i As Long
    Dim rng As Range
    Dim Werte() As Variant

    ReDim Werte(1 To 5)

    For i = 1 To 5
        Set rng = Union(Cells(i, 9), Cells(i, 12), Cells(i, 15))
        Werte(i) = WorksheetFunction.Small(rng, 1)
    Next
End Sub

Tipps für Profis

  • Vermeide unnötige Berechnungen: Wenn du in einer Schleife arbeitest, versuche, die Berechnungen zu minimieren, um die Leistung zu steigern.
  • Nutze Application.ScreenUpdating = False: Dies kann die Ausführungsgeschwindigkeit deiner Makros erheblich verbessern, wenn viele Daten verarbeitet werden.

FAQ: Häufige Fragen

1. Wie kann ich den Zugriff auf einen bestimmten Bereich in einer Schleife optimieren?
Du kannst Union verwenden, um mehrere Zellen zusammenzufassen und die Arbeit mit einem Range-Objekt zu erleichtern.

2. Was ist der Unterschied zwischen Dim und Set in VBA?
Dim wird verwendet, um Variablen zu deklarieren, während Set verwendet wird, um Objektvariablen einem bestimmten Objekt zuzuweisen, wie z.B. einem Range.

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