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

Forumthread: Range aus String erzeugen

Range aus String erzeugen
13.09.2018 10:33:27
Hannes
Hallo zusammen,
mit folgendem Code lese gehe ich viele Zellen und Zeilen durch und schreibe in Array die Zeilennummer falls in einer Zeile keine mit Farbe versehenen Zellen anzutreffen sind.
For i = start_zeile + 10 To end_zeile Step 2
flag_zeile_farbe = 0
For k = spalte_hinten_start To spalte_hinten_ende
If Cells(i, k).Interior.ColorIndex  xlNone Then
flag_zeile_farbe = 1
Exit For
End If
Next k
If flag_zeile_farbe = 0 Then
array_farbe(l) = i
End If
l = l + 1
Next i

Mit diesem Code-Schnipsel lese ich aus dem Array die Zeilennummern wieder aus und erzeuge daraus einen String um in einem nachfolgenden Schritt die Range markieren zu können und dann die Zeilen zu löschen.

zeilenzahl = UBound(array_farbe)
For i = 0 To zeilenzahl
If array_farbe(i)  0 Then
string_range = string_range & array_farbe(i) & ":" & array_farbe(i) & ", "
End If
Next i
Dies ist aber halt ein String und diesen kann ich dann hier nicht wie von mir dargestellt verwenden.

Range(string_range).Select
Selection.Delete
Wie kann ich aus diesem String eine Range erzeugen? Ich komme hier einfach nicht weiter.
Besten Dank für eure Hilfe.
Gruß
Hannes
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: split?
13.09.2018 10:43:34
Fennek
Hallo,
ein Beispiel ("freihändig")

dim Tx as string
Tx = "abc def"
TxA = split(Tx) 'ein 1-D-Array
Range("A1").rezise(ubound(TxA)+1) = application.transpose(TxA)
mfg
AW: Range aus String erzeugen
13.09.2018 10:49:32
Robert
Hallo Hannes,
in Deiner Variablen string_array hast Du am Schluss noch das Komma und ein Leerzeichen. Das muss zuerst noch entfernt werden:
string_range = Left(string_range, Len(string_range) - 2)

Dann kann mit
Range(string_range).Delete

der entsprechende Bereich gelöscht werden.
Gruß
Robert
Anzeige
AW: Range aus String erzeugen
13.09.2018 10:50:41
Rob
Versuch es mal damit:

Dim ConvertString As range
Set ConvertString= range(string_range)

falsche Methode, das geht besser
13.09.2018 11:06:15
Daniel
Hi
wenn du Zellbereiche zusammenbringen willst, um sie gemeinsam bearbeiten zu können, ist der Adressstring ein möglicher Weg, aber kein besonders guter.
Die Hauptnachteile wären
- umständlich
- der Adressstring der Range-Funktion darf maximal 256 Zeichen lang sein, das schränkt die Anzahl der möglichen Zellbereiche stark ein.
besser ist es, die Zellbereiche direkt in einer Range-Variablen mit Union zusammen zu führen.
auch braucht man keine zusätzliche Variable, um zu prüfen ob eine Schleife vollständig durchlaufen wurde, dann dies kann man überprüfen, in dem man nach der Schleife den Schleifenzähler (i) mit dem Schleifenendwert (spalte_hinten_ende) vergleicht. Ist der Schleifenzähler größer als der Schleifendendwert, so wurde die Schleife vollständig durchlaufen, ist er kleiner oder gleich, wurde vorzeitig abgebrochen (bei neg. Step natürlich andersrum)
hier der Code:
Dim rngBereich As Range
For i = start_zeile + 10 To end_zeile Step 2
For k = spalte_hinten_start To spalte_hinten_ende
If Cells(i, k).Interior.ColorIndex  xlNone Then Exit For
Next k
If k > spalte_hinten_ende Then
If rngBereich Is Nothing Then
Set rngBereich = Rows(i)
Else
Set rngBereich = Union(rngBereich, Rows(i))
End If
End If
Next i
if not rngBereich is Nothing then rngBereich.Delete
Gruß Daniel
Anzeige
AW: falsche Methode, das geht besser
13.09.2018 13:29:48
Hannes
Hallo Daniel und alle anderen,
vielen Dank für die sehr schnelle Hilfe. Daniel, dein Code funktioniert perfekt. Er macht genau das, was er soll.
Was ich nicht ganz verstehe: Im Code wähle ich eine Zeile (z.B. 23) aus und in der anschließenden Range steht dann beispielsweise Zeile 23 und 24. Das ist genau das was ich will. Aber warum?
Vielen Dank nochmal.
Gruß
Hannes
Anzeige
AW: falsche Methode, das geht besser
13.09.2018 13:50:56
Daniel
Hi
sorry ,versteh ich nicht.
Gruß Daniel
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Range aus String erzeugen


Schritt-für-Schritt-Anleitung

Um eine Range aus einem String in Excel VBA zu erzeugen, kannst du die folgenden Schritte befolgen:

  1. Zellen durchlaufen und Array erstellen: Verwende eine Schleife, um die relevanten Zellen zu überprüfen und die Zeilennummern in einem Array zu speichern, falls die Zellen keine Farbe haben.

    For i = start_zeile + 10 To end_zeile Step 2
       flag_zeile_farbe = 0
       For k = spalte_hinten_start To spalte_hinten_ende
           If Cells(i, k).Interior.ColorIndex <> xlNone Then
               flag_zeile_farbe = 1
               Exit For
           End If
       Next k
       If flag_zeile_farbe = 0 Then
           array_farbe(l) = i
           l = l + 1
       End If
    Next i
  2. String für die Range erstellen: Erzeuge einen String, der die gesammelten Zeilennummern darstellt, um ihn später als Range zu verwenden.

    zeilenzahl = UBound(array_farbe)
    For i = 0 To zeilenzahl
       If array_farbe(i) <> 0 Then
           string_range = string_range & array_farbe(i) & ":" & array_farbe(i) & ", "
       End If
    Next i
  3. String bereinigen: Entferne das letzte Komma und Leerzeichen, um einen gültigen Range-String zu erhalten.

    string_range = Left(string_range, Len(string_range) - 2)
  4. Range verwenden: Mit dem bereinigten String kannst du jetzt die Range ansprechen und sie z.B. löschen.

    Range(string_range).Select
    Selection.Delete

Häufige Fehler und Lösungen

  • Problem: Der String enthält ein überflüssiges Komma oder Leerzeichen.

    • Lösung: Stelle sicher, dass du das letzte Komma und das Leerzeichen mit Left(string_range, Len(string_range) - 2) entfernst.
  • Problem: Die Range wird nicht korrekt erkannt.

    • Lösung: Überprüfe den Inhalt des string_range, um sicherzustellen, dass es ein gültiger Bereich ist.
  • Problem: „Typen inkompatibel“ oder ähnliche Fehler.

    • Lösung: Achte darauf, dass du die richtige Syntax verwendest, insbesondere beim Umgang mit Range.

Alternative Methoden

Anstelle von einem String kannst du auch direkt eine Range-Variable verwenden, um Zellbereiche zu kombinieren. Hier ein Beispiel:

Dim rngBereich As Range
For i = start_zeile + 10 To end_zeile Step 2
    For k = spalte_hinten_start To spalte_hinten_ende
        If Cells(i, k).Interior.ColorIndex <> xlNone Then Exit For
    Next k
    If k > spalte_hinten_ende Then
        If rngBereich Is Nothing Then
            Set rngBereich = Rows(i)
        Else
            Set rngBereich = Union(rngBereich, Rows(i))
        End If
    End If
Next i
If Not rngBereich Is Nothing Then rngBereich.Delete

Diese Methode ist effizienter, da du direkt mit Range-Objekten arbeitest und keine Zeichenfolgenkonversion benötigst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie man einen String in eine Range umwandelt und dann eine Aktion darauf durchführt:

Dim string_range As String
string_range = "1:5, 10:15" ' Beispielhafter String
Range(string_range).Interior.ColorIndex = 6 ' Färbt die Zellen gelb

Mit dieser Methode kannst du gezielt mehrere Bereiche formatieren oder bearbeiten.


Tipps für Profis

  • Nutze Union, um mehrere Bereiche in einer Range-Variable zu kombinieren, anstatt einen String zu verwenden. Dies ist nicht nur effizienter, sondern auch weniger fehleranfällig.

  • Halte deinen VBA-Code übersichtlich und gut dokumentiert, besonders wenn du mit Strings und Ranges arbeitest.

  • Verwende Debug.Print oder MsgBox, um den Inhalt von Variablen zu überprüfen. So kannst du Fehler schneller erkennen.


FAQ: Häufige Fragen

1. Wie kann ich einen String in eine Range umwandeln?
Du kannst den String direkt in der Range-Funktion verwenden, nachdem du ihn entsprechend bereinigt hast.

2. Gibt es eine maximale Länge für einen Range-String?
Ja, der Adressstring darf maximal 256 Zeichen lang sein. Bei längeren Bereichen solltest du die Union-Methode verwenden.

3. Wie gehe ich mit mehrdimensionalen Arrays um?
Für mehrdimensionale Arrays musst du die Indizes entsprechend anpassen und sicherstellen, dass die Zeilen und Spalten korrekt angesprochen werden.

4. Was ist der Vorteil von VBA-Objekten gegenüber Strings?
VBA-Objekte bieten mehr Flexibilität und Möglichkeiten, da sie direkt auf die Excel-Objekte zugreifen, ohne Umwandlungen vornehmen zu müssen.

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