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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
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)
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
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)))
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)