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

Forumthread: Range-Variable selektiv Bereiche zuweisen

Range-Variable selektiv Bereiche zuweisen
26.04.2017 19:31:59
Herms
Hallo zusammen!
Ich würde gerne einer als Range deklarierten Variable selektiv verschiedene Zellen einer Zeile zuweisen. Es sollen nämlich nur die Zellen "markiert" bzw. zugewiesen werden, die eine bestimmte Bedingung erfüllen.
Konkret geht es um die Spalten G bis M in Zeile 4. Jede Zelle in dem Bereich G4:M4 soll der Range-Variable zugewiesen werden, wenn der Wert eines Array "soll_werte(1,i_spalte)" für die entsprechende Spalte 1 beträgt.
Hat das Array beispielsweise folgende Werte "soll_werte(1, 1 bis 7) = (1, 0, 0, 1, 0, 1, 1)", soll die Range-Variable folgendermaßen aussehen:
Dim rg as Range
Set range = ActiveSheet.Range("G4","J4","L4","M4")
Könnt ihr mir auf die Sprünge helfen, wie ich dieses Konzept dynamisieren kann?
Danke im voraus & beste Grüße!
Herms
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range-Variable selektiv Bereiche zuweisen
26.04.2017 20:37:23
AlterDresdner
Hallo Herms,
so sollte es gehen:

Sub nn()

Dim soll_werte(1 To 1, 1 To 7) As Integer
soll_werte(1, 1) = 1
soll_werte(1, 4) = 1
soll_werte(1, 6) = 1
soll_werte(1, 7) = 1
'= (1, 0, 0, 1, 0, 1, 1) ' 
Dim rg As Range
Dim i, j As Integer, a As String
  i = 71 '="G" 
  For j = Lbound(soll_werte, 2) To Ubound(soll_werte, 2)
    If soll_werte(1, j) = 1 Then
      a = IIf(a = "", "", a & ",")
      a = a & Chr(i) & "4"
    End If
    i = i + 1
  Next j
  Set rg = ActiveSheet.Range(a)
  rg.Select
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0


Gruß der AlteDresdner
Anzeige
AW: Range-Variable selektiv Bereiche zuweisen
26.04.2017 21:12:17
Herms
Hallo AlterDresdner!
Danke für die schnelle und kompetente Hilfe!
Nachdem ich ein paar Minuten gebraucht habe, um zu verstehen, warum 71 = G ist, habe ich "Chr()" nun begriffen und den Code erfolgreich implementiert!
Vielen Dank & einen schönen Abend noch!
Herms
AW: Range-Variable selektiv Bereiche zuweisen
26.04.2017 20:43:45
Fennek
Hallo,
teste mal diesen Code:

Sub Fen()
Dim rng As Range
Z = 4
Tx = Array(1, 0, 0, 1, 0, 1, 1)
For i = 0 To UBound(Tx)
If Tx(i) Then Ra = Ra & Chr(71 + i)
Next i
Debug.Print Ra
For i = 1 To Len(Ra)
R = Mid(Ra, i, 1) & Z
If rng Is Nothing Then
Set rng = Range(R)
Else
Set rng = Union(rng, Range(R))
End If
Next i
Debug.Print rng.Address
End Sub
mfg
Anzeige
AW: Range-Variable selektiv Bereiche zuweisen
26.04.2017 21:16:41
Herms
Hallo Fennek!
Vielen Dank für deine schnelle Hilfe, habe deinen Code als Alternative zur Lösung von AlterDresdner in meine Sammlung aufgenommen. Im Grunde war ja die mir bisher unbekannte Chr()-Funktion der Schlüssel zum Erfolg, die ihr beide verwendet habt :-)
Beste Grüße!
Herms
AW: Range-Variable selektiv Bereiche zuweisen
27.04.2017 09:46:24
Daniel
Hi
ggf so:
Dim SollWerte
dim i as Long
dim rng As Range
SollWerte = Array(1, 0, 0, 1, 0, 1, 1)
with Range("G4").Offset(0, -Ubound(SollWerte))
for i = Lbound(SollWerte) to ubound(SollWerte)
if SollWert(i) = 1 Then
if rng is Nothing then
Set rng = .Offset(0, i)
else
Set rng = Union(rng, .Offset(0, i))
end if
end if
next
der Code ist jetzt so geschrieben, dass er mit 0 und 1-basierten Arrays gleichermaßen funktioniert
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Zuweisen von Range-Variablen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Deklaration der Variablen: Zuerst musst Du die Range-Variable deklarieren. Verwende dazu Dim rng As Range.

    Dim rng As Range
  2. Array erstellen: Erstelle ein Array, welches die Werte für Deine Bedingung enthält. In diesem Beispiel verwenden wir ein Array mit Werten von 0 und 1.

    Dim soll_werte(1 To 1, 1 To 7) As Integer
    soll_werte(1, 1) = 1
    soll_werte(1, 4) = 1
    soll_werte(1, 6) = 1
    soll_werte(1, 7) = 1
  3. Schleife zur Zuweisung: Nutze eine Schleife, um die Zellen in Deinem gewünschten Bereich zu überprüfen. Bei Erfüllung der Bedingung wird die Zelle der Range-Variable hinzugefügt.

    Dim i As Integer
    Dim a As String
    For j = LBound(soll_werte, 2) To UBound(soll_werte, 2)
       If soll_werte(1, j) = 1 Then
           a = a & Chr(71 + j - 1) & "4,"
       End If
    Next j
    Set rng = ActiveSheet.Range(Left(a, Len(a) - 1)) ' Letztes Komma entfernen
  4. Range auswählen: Du kannst die Range nun auswählen oder weiterverarbeiten.

    rng.Select

Häufige Fehler und Lösungen

  • Fehler: „Typ-Mismatch“

    • Lösung: Überprüfe, ob Du die Variablen korrekt deklariert hast. Achte auf die Datentypen, besonders bei Arrays.
  • Fehler: „Objektvariable nicht festgelegt“

    • Lösung: Stelle sicher, dass Deine Range-Variable richtig initialisiert wurde, bevor Du sie verwendest.
  • Fehler: „Ungültiger Zellbereich“

    • Lösung: Achte darauf, dass die Zellen, die Du in der Range zuweisen möchtest, tatsächlich existieren.

Alternative Methoden

Eine andere Methode, um eine Range-Variable in Excel VBA zu setzen, beinhaltet die Verwendung der Union-Funktion. Dies ist besonders nützlich, wenn Du mehrere nicht zusammenhängende Zellen kombinieren möchtest.

Dim rng As Range
Dim R As String
Dim Ra As String
For i = 0 To UBound(Tx)
    If Tx(i) = 1 Then
        R = Chr(71 + i) & "4"
        If rng Is Nothing Then
            Set rng = Range(R)
        Else
            Set rng = Union(rng, Range(R))
        End If
    End If
Next i

Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du eine dynamische Range-Variable basierend auf einem Array von Sollwerten erstellst:

Sub Beispiel()
    Dim rng As Range
    Dim Tx As Variant
    Dim i As Long
    Tx = Array(1, 0, 0, 1, 0, 1, 1)

    For i = 0 To UBound(Tx)
        If Tx(i) = 1 Then
            If rng Is Nothing Then
                Set rng = Range(Chr(71 + i) & "4") ' "G4", "H4" usw.
            Else
                Set rng = Union(rng, Range(Chr(71 + i) & "4"))
            End If
        End If
    Next i
    rng.Select
End Sub

Tipps für Profis

  • Nutze die Debug.Print-Funktion, um den Inhalt der Range-Variable zu überprüfen. Dies hilft, Fehler schneller zu erkennen.

  • Wenn Du mit großen Datenmengen arbeitest, kann es sinnvoll sein, das ScreenUpdating vor und nach der Ausführung Deines Codes auszuschalten, um die Geschwindigkeit zu erhöhen.

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Verwende Excel VBA Set Range Variable, um die Lesbarkeit Deines Codes zu erhöhen.


FAQ: Häufige Fragen

1. Was ist eine Range-Variable in Excel VBA?
Eine Range-Variable ist eine spezielle Variable, die auf einen bestimmten Zellbereich in einem Excel-Arbeitsblatt verweist und Dir ermöglicht, diesen Bereich zu manipulieren.

2. Wie kann ich mehrere Bereiche in einer Range-Variable kombinieren?
Du kannst die Union-Funktion verwenden, um mehrere nicht zusammenhängende Zellbereiche in einer Range-Variable zu kombinieren.

3. Was ist der Unterschied zwischen Dim und Set in VBA?
Dim wird verwendet, um eine Variable zu deklarieren, während Set verwendet wird, um einer Objektvariablen (wie einer Range) einen Wert zuzuweisen.

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