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

Forumthread: Range-Objekt: Zellwerte auslesen

Range-Objekt: Zellwerte auslesen
05.12.2016 08:33:02
ChristianWeiss
Hallo,
kurze Neuling-Frage: per InputBox lasse ich vom User mehrere Zellen auf einem Worksheet markieren, deren Zellwerte ich brauche:
Public Function InputBoxRange(aPrompt As String) As Range
'lässt ein oder mehrere Zellen auswählen und liefert diese Range zurück
Set InputBoxRange = Application.InputBox(aPrompt, Type:=8)
End Function
...
Dim rng as Range
Set rng = InputRange("Wähle Zellen:")
..
Per CMD-Button (Mac) bzw. CTRL-Button (Windows) kann man ja eine Mehrfachselektion machen.
Ergebnis ist ein Range-Objekt der Art $B$44;$B$17;$B$50 o.Ä.
Nun möchte ich an die Zellwerte dieser Zellbezüge ran und diese durchiterieren (for i = 1 to rng.Count).
Ich weiß aber nicht, wie ich da ran komme.
rng(i) liefert nur beim Index 1 einen richtigen Wert
rng(i).value dasselbe
rng.address liefert die markierten Zellen, aber mit Komma statt Semikolon.
Am liebsten wäre mir, wenn ich aus dem Range-Objekt eine Liste machen könnte, in der die Zellwerte aufsteigend sortiert sind.
Ist vermutlich ein No-Brainer, aber ich beiße mir die Zähne daran aus. Weiß jemand Rat?
Christian
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Range-Objekt: Zellwerte auslesen
05.12.2016 10:43:44
Rudi
Hallo,
Ist vermutlich ein No-Brainer
in der Tat!
Sub aaa()
Dim rng As Range, rngC As Range
Set rng = InputBoxRange("test")
For Each rngC In rng.Cells
MsgBox rngC.Value
Next
End Sub

Gruß
Rudi
AW: Range-Objekt: Zellwerte auslesen
05.12.2016 19:03:25
ChristianWeiss
Ha! Funktioniert. Danke Rudi!
Kannst Du auch sagen, wie ich diese Values nun sortiere?
Wohlgemerkt: die Vaues. Ich brauche diese aufsteigend sortiert BEVOR ich durchiteriere, also kleinster Value soll der erste Wert sein, den ich beim Iterieren zu fassen kriege.
Das wäre super!
BG
Christian
Anzeige
AW: Range-Objekt: Zellwerte auslesen
06.12.2016 13:25:56
Rudi
Hallo,
Sub aaa()
Dim rng As Range, rngC As Range, vArr(), i, j, tmp
Set rng = InputBoxRange("Test")
ReDim vArr(1 To rng.Cells.Count)
For Each rngC In rng.Cells
i = i + 1
vArr(i) = rngC.Value
Next rngC
For i = 1 To UBound(vArr) - 1
For j = i + 1 To UBound(vArr)
If vArr(i) > vArr(j) Then
tmp = vArr(i)
vArr(i) = vArr(j)
vArr(j) = tmp
End If
Next j
Next i
'mehr Code
End Sub

Anzeige
AW: Range-Objekt: Zellwerte auslesen
06.12.2016 19:57:16
ChristianWeiss
Oha, okay.
Also doch nicht einfach rng.AsSortedArry ;-)
Ist eingebaut und funzt wunderbar!
DANKE!!
dann doch zu. owT
06.12.2016 23:01:45
Rudi
AW: dann doch zu. owT
07.12.2016 06:58:09
Christian
Öh, oh. Wollte ich getan haben.
Deswegen hatte ich extra brav den Haken gesetzt.
Aber nun sehe ich: da steht NICHT.
Sorry.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zellwerte im Excel VBA Range-Objekt auslesen und sortieren


Schritt-für-Schritt-Anleitung

Um Zellwerte aus einer Auswahl im Excel VBA zu lesen und diese aufsteigend zu sortieren, kannst du folgende Schritte befolgen:

  1. InputBox zur Zellselektion erstellen: Zunächst erstellst du eine Funktion, die es dem Benutzer ermöglicht, mehrere Zellen auszuwählen. Hierzu verwendest du Application.InputBox mit dem Typ 8, der es ermöglicht, Bereiche auszuwählen.

    Public Function InputBoxRange(aPrompt As String) As Range
       Set InputBoxRange = Application.InputBox(aPrompt, Type:=8)
    End Function
  2. Zellwerte in ein Array speichern: Nutze eine Schleife, um die Werte der ausgewählten Zellen in ein Array zu speichern. Hierbei ist es wichtig, dass du den Range-Typ korrekt definierst.

    Sub AuslesenUndSortieren()
       Dim rng As Range, rngC As Range
       Dim vArr() As Variant
       Dim i As Integer, j As Integer, tmp As Variant
    
       Set rng = InputBoxRange("Wähle Zellen:")
       ReDim vArr(1 To rng.Cells.Count)
    
       For Each rngC In rng.Cells
           i = i + 1
           vArr(i) = rngC.Value
       Next rngC
  3. Array sortieren: Verwende eine einfache Sortiermethode, um die Werte im Array aufsteigend zu sortieren.

       For i = 1 To UBound(vArr) - 1
           For j = i + 1 To UBound(vArr)
               If vArr(i) > vArr(j) Then
                   tmp = vArr(i)
                   vArr(i) = vArr(j)
                   vArr(j) = tmp
               End If
           Next j
       Next i
  4. Verwendung der sortierten Werte: Jetzt kannst du die sortierten Werte im Array verwenden, um beispielsweise sie in einer Nachricht anzuzeigen oder weiterzuverarbeiten.


Häufige Fehler und Lösungen

  • Problem: rng(i) liefert nur beim Index 1 einen richtigen Wert
    Lösung: Stelle sicher, dass du mit einer For Each-Schleife über rng.Cells iterierst, anstatt mit einem numerischen Index.

  • Problem: Unbekannte Fehler beim Auslesen der Werte
    Lösung: Überprüfe, ob die Auswahl wirklich Zellen enthält und keine leeren Bereiche oder ungültigen Eingaben.


Alternative Methoden

Eine alternative Methode, um Zellwerte auszulesen, ist die Verwendung von Excel-Funktionen in Kombination mit VBA. Du könntest auch Application.Transpose verwenden, um die Werte in eine Spalte zu transponieren, bevor du sie sortierst.


Praktische Beispiele

Hier ist ein komplettes Beispiel, das die oben genannten Schritte zusammenfasst:

Sub AuslesenUndSortieren()
    Dim rng As Range, rngC As Range
    Dim vArr() As Variant
    Dim i As Integer, j As Integer, tmp As Variant

    Set rng = InputBoxRange("Wähle Zellen:")
    ReDim vArr(1 To rng.Cells.Count)

    For Each rngC In rng.Cells
        i = i + 1
        vArr(i) = rngC.Value
    Next rngC

    For i = 1 To UBound(vArr) - 1
        For j = i + 1 To UBound(vArr)
            If vArr(i) > vArr(j) Then
                tmp = vArr(i)
                vArr(i) = vArr(j)
                vArr(j) = tmp
            End If
        Next j
    Next i

    ' Ausgabe der sortierten Werte
    For i = 1 To UBound(vArr)
        MsgBox vArr(i)
    Next i
End Sub

Tipps für Profis

  • Nutze das Dictionary-Objekt, um die Zellwerte effizienter zu speichern und zu sortieren.
  • Überlege, ob du die Sort-Methode von Excel verwenden kannst, um die Werte direkt im Arbeitsblatt zu sortieren, anstatt im Code.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zellwerte in einer einzigen Zeile ausgeben?
Du kannst die Zellwerte in einer String-Variable speichern und diese dann in einer Nachricht ausgeben.

2. Ist es möglich, die Sortierung in absteigender Reihenfolge durchzuführen?
Ja, ändere einfach die Vergleichsoperation in der Sortierschleife von > zu <.

3. Welche Excel-Version benötige ich für diese VBA-Skripte?
Diese VBA-Skripte sind mit den meisten modernen Excel-Versionen kompatibel, die VBA unterstützen, wie Excel 2010 und neuer.

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