Guten Morgen Zusammen,
zurzeit probiere ich mich etwas darin aus, ein paar Sachen in VBA zu erstellen.
Mein Problem ist nun, dass ich ein "Programm" erstellen wollte, wo man drei Zahlen eingeben kann und diese dann immer direkt sortiert werden nach Min, Max und Mittelwert.
Dazu habe ich schon in Betracht gezogen es mit If Funktionen zu erstellen, halte dieses aber nicht für sinnvoll da es ansonsten ein ziemlich langer Text werden würde.
Hätte einer von euch dazu eine Idee?
Moin!
Eine Textbox enthält erstaunlicherweise Text.
Auch Ziffern sind erstmal Text.
Die Excel-Funktionen MIN() MAX() und MITTELWERT() ignorieren Text!
Daher musst Du die Textzahlen erst in echte Zahlen umwandeln.
If IsNumeric(Text) Then Text = CDbl(Text)
Gruß Ralf
gelöscht, war zu langsam.
Und noch etwas zum Programmierstil:
Hier bietet es sich an, der Prozedur gleich Übergabeparameter mitzugeben.
Mal als simples Beispiel mit Textzahlen:
Sub Test()
Dim txtA$, txtB$, txtC$
txtA = "15"
txtB = "10"
txtC = "9"
Call Werte(CDbl(txtA), CDbl(txtB), CDbl(txtC))
End Sub
Private Sub Werte(A#, B#, C#)
With WorksheetFunction
Debug.Print .Min(A, B, C)
Debug.Print .Max(A, B, C)
Debug.Print .Average(A, B, C)
End With
End Sub
Ergibt im Direktfenster:
Code:
9
15
11,3333333333333
Vielen Dank schon mal :)
Komme mit der Funktion leider noch nicht wirklich weiter :/
Dass mein
If IsNumeric(Text) Then Text = CDbl(Text)
Pseudo-Code ist, den Du natürlich anpassen musst, sollte logisch sein?
Betrachte mein nachgeschobenes Beispiel.
Müsste selbsterklärend sein.
Code:
Sub M_snb()
sn = Array("12", "34", "07")
For j = 0 To UBound(sn)
sn(j) = --sn(j)
Next
With Application
MsgBox Join(Array(.Min(sn), .Large(sn, 2), .Max(sn)), vbLf)
End With
End Sub
Hallo,
ich habe dir in der beiliegenden Excel-Datei eine UserForm eingefügt, die über den blauen Button "Aufruf des Sortierformulars" im Arbeitsblatt "Tabelle1" aufgerufen werden kann.
Nach Eingabe der 3 numerischen Variablen A,B,C kann man auf den Beschriftungstext "Sortiert" klicken, worauf diese 3 Variablen unterhalb sortiert ausgegeben werden in den 3 Textfeldern "Kleinst", "Mittel" und "Groß".
Das verwendete Sortierverfahren ist der Bubble-Sort - angesichts der Größe des zu sortierenden Arrays ist es das einfachste Verfahren.
Nachfolgend auch nochmals der VBA-Code:
Code:
Option Explicit
'
'Wird ausgeführt nach Klick aufs Formular
'
Private Sub BeimSortierKlick()
Dim A As Double, B As Double, C As Double
Dim AR As Variant
On Error GoTo Err_UF_Click
A = CDbl(Me.txtBoxA.Value)
B = CDbl(txtBoxB.Value)
C = CDbl(Me.txtBoxC.Value)
AR = Array(A, B, C)
Call BubbleSort(AR)
End_UF_Click:
Me.txtBoxKleinst.Value = AR(0)
Me.txtBoxMittel.Value = AR(1)
Me.txtBoxGroß.Value = AR(2)
Exit Sub
Err_UF_Click:
AR = Array("", "", "")
MsgBox Prompt:="Fehler " & Err.Number & vbNewLine & _
"(" & Err.Description & ")", _
Buttons:=vbCritical, _
Title:="Fehler Datenumwandlung"
Resume End_UF_Click
End Sub
'
'Wird ausgeführt nach Klick auf den Label "Sortiert"
'
Private Sub lblSortiert_Click()
BeimSortierKlick
End Sub
'
'Wird ausgeführt nach Klick auf den Button "Schließen"
'
Private Sub cmdBtnSchließen_Click()
Me.Hide
End Sub
'
'Sortierverfahren: Bubble-Sort: Sortiert Array AL() aufsteigend
'
Private Sub BubbleSort(ByRef AL As Variant)
Dim I As Integer, II As Integer
Dim Z As Variant
For I = 0 To UBound(AL) - 1
For II = UBound(AL) To I + 1 Step -1
If AL(II - 1) > AL(II) Then
'Vertausche Inhalte von AL(II-1) und AL(II):
Z = AL(II - 1): AL(II - 1) = AL(II): AL(II) = Z
End If
Next II
Next I
End Sub
Uiuiui!
BubbleSort für so etwas Profanes sind die berühmten Kanonen auf Spatzen.
@JanScholz:
Aufgrund der Tatsache, dass Du Dich ein wenig an VBA probieren willst, habe ich Dir ein paar Snippets angeboten.
Allerdings empfände ich es als viel sinnvoller, dass Du Dich mit einfachen Excel-Funktionen auseinander setzt.
Wenn es wirklich eine sortierte Ausgabe (und nicht der von mir angenommene und von Dir auch genannte Mittelwert) sein soll,
dann gibt es in Deinem Excel 365
=SORTIEREN() (bekannte Anzahl von Zellen) oder
=KKLEINSTE(Spalte;SEQUENZ(ANZAHL(Spalte)))
| A | B | C |
1 | 14 | 1 | 1 |
2 | 19 | 4 | 4 |
3 | 4 | 7 | 7 |
4 | 7 | 13 | 13 |
5 | 1 | 14 | 14 |
6 | 13 | 19 | 19 |
Formeln der Tabelle |
Zelle | Formel | B1 | =SORTIEREN(A1:A6) | C1 | =KKLEINSTE(A:A;SEQUENZ(ANZAHL(A:A))) |
|