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

Forumthread: Array(String)

Array(String)
29.03.2015 10:41:22
Eric
Hallo Excel Kenner,
ich möchte Zahlen eines Arrays sortieren. Die Funktion dazu und der Aufruf stehen an sich. Aber was mich fertig macht, ist folgendes.
Die Sortierung von varArray = Array(34, 21, 9, 8, 17, 321, 76) funktioniert. Problem: Bei mir kommt der Teil in Klammern von einem String (InputBox). Demnach steht alles in "". Und diese Hochkommas stören den Ablauf.
Den String über Split zu zerlegen und nach dem Sortieren mit Join wieder zusammen zu setzen ergibt zwar keine Fehlermeldung, aber es findet dabei kein Sortieren statt. Das Ergebnis in diesem Fall ist exakt der Inhalt vom String, nur ohne Hochkommas.
Könnt ihr mir bitte dabei helfen? Ich komme einfach nicht auf die Lösung...
Danke im Voraus! Ich gebe direkte Rückmeldung, ob es funktioniert hat.
Gruß Eric

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array(String)
29.03.2015 11:33:44
Nepumuk
Hallo,
die Split-Funktion erzeugt immer ein String-Array. Du kannst also entweder deine Sortierroutine anpassen indem sie die Strings in Zahlen konvertiert oder du schaufelst das Array in ein anderes um.
Gruß
Nepumuk

AW: Array(String)
29.03.2015 11:38:19
Eric
Hallo Nepumuk,
vielen Dank. Kann man nicht einfach die beiden Hochkommas an Anfang und Ende des String entfernen, dann die 'nackte' Zahelenkolonne in Array(...) schreiben und los geht's?
So fit bin ich leider nicht mit VBA.
Danke nochmal für Deine Unterstützung.
Gruß Eric

Anzeige
AW: Array(String)
29.03.2015 11:46:05
Nepumuk
Hallo,
die sind da, weil die Zahlen Strings sind. Die kannst du im selben Array nicht umwandeln, dazu benötigst du ein zweites Array.
Gruß
Nepumuk

AW: Array(String)
29.03.2015 11:53:24
Eric
Hallo Nepumuk,
hier Funktion und Aufruf.
Function BubbleSort(SortArray As Variant)
Dim Temp As Variant
Dim b As Integer
Dim blnNoExch As Boolean
'Wiederholen bis alles aufsteigend durchsortiert wurde
Do
blnNoExch = True
'Jedes Element des Arrays durchlaufen
For b = 1 To UBound(SortArray) - 1
'Wenn das aktuelle Element größer als sein Nachfolger ist, werden beide getauscht
If SortArray(b) > SortArray(b + 1) Then
blnNoExch = False
Temp = SortArray(b)
SortArray(b) = SortArray(b + 1)
SortArray(b + 1) = Temp
End If
Next b
Loop While Not blnNoExch = True
End Function

Sub BubbleSortMyArray()
Dim b As Byte
Dim varStrToArr As Variant, varTest As Variant
Dim strSkip As String
strSkip = "45-2-21-1-24-56-5-8"
'Array einlesen und übergeben
varStrToArr = Split(strSkip, "-")
'Array sortieren (Aufruf)
BubbleSort varStrToArr
'Array zusammensetzen
strSkip = Join(varStrToArr, ", ")
Debug.Print strSkip
End Sub
Ich hatte versucht, Deinen Ratschlag 'String in Zahlen umwandeln' umzusetzen, indem ich innerhalb der Funktion Änderungen in der Form 'SortArray(b)' => 'CInt(SortArray(b))' vorgenommen habe - mit dem Ergebnis, dass das die Zahlenkolonne vom String 1:1 angezeigt wird.
Ich hoffe sehr auf Deine Hilfe. Das Problem hat mich gestern schon Stunden auf Trab gehalten.
Vielen Dank!!
Gruß Eric

Anzeige
AW: Array(String)
29.03.2015 12:02:41
Nepumuk
Hallo,
teste jetzt mal:
Option Explicit

Function BubbleSort(SortArray As Variant)
    
    Dim Temp As Variant
    Dim b As Integer
    Dim blnNoExch As Boolean
    
    'Wiederholen bis alles aufsteigend durchsortiert wurde
    Do
        blnNoExch = True
        'Jedes Element des Arrays durchlaufen
        For b = 0 To UBound(SortArray) - 1
            'Wenn das aktuelle Element größer als sein Nachfolger ist, werden beide getauscht
            If Val(SortArray(b)) > Val(SortArray(b + 1)) Then
                blnNoExch = False
                Temp = SortArray(b)
                SortArray(b) = SortArray(b + 1)
                SortArray(b + 1) = Temp
            End If
        Next b
    Loop While Not blnNoExch = True
    
End Function

Sub BubbleSortMyArray()
    
    Dim b As Byte
    Dim varStrToArr As Variant, varTest As Variant
    Dim strSkip As String
    
    strSkip = "45-2-21-1-24-56-5-8"
    
    'Array einlesen und übergeben
    varStrToArr = Split(strSkip, "-")
    
    'Array sortieren (Aufruf)
    BubbleSort varStrToArr
    
    'Array zusammensetzen
    strSkip = Join(varStrToArr, ", ")
    
    Debug.Print strSkip
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Array(String)
29.03.2015 12:11:56
Eric
Hallo Nepumuk,
JAAAAAAAAAAAAA!!!!!!!!!!! Mit Val() läuft's!!!!!! Ich heule gleich... :-))
Warte, kurz ein Bier aus dem Kühlschrank... Prost...
Aber wieso Val()? Warum nicht CInt() oder CLng()?
Vielen, vielen Dank!!
Gruß Eric

AW: Array(String)
29.03.2015 12:14:53
Nepumuk
Hallo,
Val würde keinen Fehler auslösen wenn du zwischen deinen Zahlen Buchstaben hättest. Schau in die Hilfe zu der Funktion.
Gruß
Nepumuk

Anzeige
AW: Array(String)
29.03.2015 12:23:53
Eric
Hallo Nepumuk,
Val() kenne ich persönlich nur im Beispiel des Auslesens der Excel Version. Ansonsten nie gebraucht und dementsprechend keine Übung. Hilfe sagt "Gibt die in einer Zeichenfolge enthaltenen Zahlen als numerischen Wert eines geeigneten Typs zurück.". Hüstel... Aha.
Eine persönliche Frage an Dich: Kann man Dich eventuell auch per Email erreichen?
Gruß und nochmals vielen Dank!!
Eric

Anzeige
AW: Array(String)
29.03.2015 12:27:40
Nepumuk
Hallo,
ja kann man. Aber da ich keine Lust habe mit Spam zugemüllt zu werden, werde ich meine Adresse nicht öffentlich machen. Wenn du ein Problem mit Excel hast, dann stell deine Frage hier im Forum.
Gruß
Nepumuk

So fit bin ich leider nicht mit VBA.Level VBA gut?
29.03.2015 12:36:12
Helmut
oT

AW: So fit bin ich leider nicht mit VBA.Level VBA gut?
29.03.2015 12:42:41
Eric
Hallo Helmut,
besser ist der Feind des Guten.
Gruß Eric

Anzeige
Wie oft, RECHERCHE! Im Archiv sind etliche ...
29.03.2015 14:01:08
Luc:-?
…Trenn-UDFs auf der Basis der vbFkt Split enthalten, Eric,
u.a. auch VSplit, die bei entsprd gesetztem 3.Argument numerische Split-Ergebnisse des erzeugten Arrays als echte Zahl zurückgibt, was du hier ja nun auch mit Val erreicht hast.
Übrigens ist ein An-/AusführungsZeichen kein „Hochkomma“ (höchstens ein doppeltes), weil diese Bezeichnung im dt Pgmierer-Jargon gern für Apostroph verwendet wird.
Gruß, Luc :-?

Anzeige
AW: Wie oft, RECHERCHE! Im Archiv sind etliche ...
29.03.2015 14:03:22
Eric
Hallo Luc,
vielen Dank für Deine Hilfe.
Gruß Eric
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Array in String umwandeln: Excel VBA Tipps und Tricks


Schritt-für-Schritt-Anleitung

  1. Definiere dein Array: Zuerst musst du dein Array definieren. Wenn du beispielsweise eine Eingabe von einer InputBox hast, kannst du die Split-Funktion verwenden, um den String in ein Array zu zerlegen.

    Dim varStrToArr As Variant
    varStrToArr = Split("45-2-21-1-24-56-5-8", "-")
  2. Sortiere das Array: Du kannst eine Sortierfunktion wie BubbleSort verwenden, um die Zahlen im Array zu sortieren. Hier ist ein einfaches Beispiel:

    Function BubbleSort(SortArray As Variant)
       Dim Temp As Variant
       Dim b As Integer
       Dim blnNoExch As Boolean
       Do
           blnNoExch = True
           For b = 0 To UBound(SortArray) - 1
               If Val(SortArray(b)) > Val(SortArray(b + 1)) Then
                   blnNoExch = False
                   Temp = SortArray(b)
                   SortArray(b) = SortArray(b + 1)
                   SortArray(b + 1) = Temp
               End If
           Next b
       Loop While Not blnNoExch
    End Function
  3. Zusammenführen des Arrays: Nach dem Sortieren kannst du das Array mit Join wieder in einen String umwandeln:

    Dim sortedString As String
    sortedString = Join(varStrToArr, ", ")
  4. Ausgabe: Zum Schluss kannst du das Ergebnis beispielsweise mit Debug.Print ausgeben.


Häufige Fehler und Lösungen

  • Fehler: Das Array ist ein String-Array, und die Sortierung funktioniert nicht.

    • Lösung: Verwende die Val-Funktion, um die Strings in Zahlen umzuwandeln, bevor du die Sortierung durchführst.
  • Fehler: Das Ergebnis der Join-Funktion ist nicht wie erwartet.

    • Lösung: Stelle sicher, dass das Array korrekt sortiert wurde, bevor du Join aufrufst.

Alternative Methoden

  • Array mit Strings: Verwende die CInt- oder CLng-Funktionen, um Strings in Ganzzahlen zu konvertieren. Diese Methoden sind jedoch weniger fehlerresistent als Val, wenn das Array unerwartete Werte enthält.

  • Excel-Funktionen nutzen: Du kannst auch Excel-Funktionen wie SORT und TEXTJOIN in einer Arbeitsmappe verwenden, um Arrays zu sortieren und zu verketten, anstatt VBA zu verwenden.


Praktische Beispiele

Hier ist ein komplettes Beispiel, wie du ein Array von Strings in Excel VBA sortieren und umwandeln kannst:

Sub BubbleSortMyArray()
    Dim varStrToArr As Variant
    varStrToArr = Split("45-2-21-1-24-56-5-8", "-")
    BubbleSort varStrToArr
    Dim sortedString As String
    sortedString = Join(varStrToArr, ", ")
    Debug.Print sortedString ' Ausgabe: 1, 2, 5, 8, 21, 24, 45, 56
End Sub

Tipps für Profis

  • Wenn du mit großen Arrays arbeitest, erwäge die Verwendung von Collections oder Dictionaries, um die Leistung zu verbessern und die Verwaltung der Daten zu erleichtern.

  • Nutze die Option Explicit Direktive am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert werden, was Fehler reduziert.


FAQ: Häufige Fragen

1. Warum sollte ich Val() anstelle von CInt() verwenden?
Val() konvertiert Strings in Zahlen und ignoriert alles, was keine Zahl ist. Dies macht es robuster, wenn dein Input möglicherweise unerwartete Zeichen enthält.

2. Wie kann ich ein Array von Strings in ein Array von Zahlen umwandeln?
Du kannst eine Schleife verwenden, um jedes Element des String-Arrays in ein Zahlen-Array zu konvertieren, indem du Val() oder CInt() in der Schleife verwendest.

3. Was ist der Unterschied zwischen Join und Split?
Split zerlegt einen String in ein Array, während Join ein Array in einen String zusammenfügt. Diese Funktionen sind sehr nützlich für die Arbeit mit Arrays in Excel VBA.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige