Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

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

Anzeige
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

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

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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige