Clever-Excel-Forum

Normale Version: Anzahl in MsgBox ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Ich will in einer MsgBox eine Anzahl ausgeben, mit bestimmten Bedingungen.
Es darf nur gezählt werden, wenn die Werte in der Spalte G größer als 0 sind. Heißt in meinem Beispiel (habe ich mit angehängt), dass die Zahl 4 ausgegeben werden soll. Zusätzlich möchte ich noch, dass wenn es mehr als 8 sind, dass max. die Anzahl 8 ausgegeben wird. Berücksichtigt werden muss aber zusätzlich, dass die Werte erst ab der 3. Zeile zählen.

Ich hoffe, dass ihr mir helfen könnte.

LG
Thomas

26865

Als Formel:
Code:
=MIN(8;ZÄHLENWENN(G3:G18;">0"))
Umsetzen in VBA-Code beherrscht du ja offenbar. 

Bitte noch beheben:
- Im With-Block fehlt der Punkt bei den Bereichsangaben.
- Die Variablendeklaration ist (wieder mal) unvollständig.
- Bei der Zuweisung von RNG ist ein Berechnungsfehler
- Entfernen des unnötigen Codes
Hallo!

Danke für die Formel. Leider beherrsche ich eben VBA nicht, ich hätte es nicht gerne mit einer Formel gelöst, sondern mittels VBA.
Ich hoffe, dass du mir helfen kannst.
Dann fang mal erst an mit den Grundlagen.
Code:
Sub JahresstatistikRanking()

With ThisWorkbook.Worksheets("Tabelle1")
   
    Dim i, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
    Dim Z1 As Integer, LR As Integer, RNG As Range, TMP As String
       
    Z1 = 3 'Erste Datenzeile
    Sp = 7 'Werte in G
       
    LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
    Set RNG = Cells(Z1, Sp).Resize(LR + Z1 + 1, 1)
    Anz = Application.WorksheetFunction.Min(8, Application.WorksheetFunction.CountIf(RNG, ">0"))
       
    For i = 1 To 8
        WWert = WorksheetFunction.Large(RNG, i)
        Zeile = WorksheetFunction.Match(WWert, RNG, 0) + Z1 - 1
        TMP = IIf(Jahr = Year(Date), "  (aktuelles Jahr)", "")
        TText = TText & " € " & Format(WWert, "#,##0.00") & TMP & vbLf
    Next
   
    MsgBox Anz & vbLf & vbLf & TText
     
End With

End Sub
Moin,

(15.11.2022, 11:01)dertommy schrieb: [ -> ]Leider beherrsche ich eben VBA nicht.
Na, das ist doch der ideale Einstieg! Eine millionenfach erprobte Lösung, wie das Arbeiten mit Excel-Formeln in einer grafischen Benutzeroberfläche wie einem Arbeitsblatt lehnst du ab und bist gleichzeitig noch nicht in der Lage, eine alternative Lösung zu entwickeln. Darüber hinaus hast du ein konkretes und überschaubares Problem,für das du eine Wunschlösung suchst.
Ich bin der Meinung, einen besseren Einstieg in die wunderbare Welt der Programmierung gibt es fast nicht.

Als erstes würde ich dir empfehlen, das Kernproblem zu lösen und dich nicht durch die Ausgabe in einer bestimmten Form (hier eine Messagebox) ablenken zu lassen.
Du suchst dir also einen Algorithmus, der die benötigten Informationen sammelt und nicht benötigte Informationen ausschließt. Für den zusätzlichen Lerneffekt, könntest du auch noch eine zweite oder dritte Lösungsstrategie entwickeln (Schleife, Filter, Formellösung). Das Ergebnis kannst du dir hilfsweise vorerst in Zellen ausgeben lassen.

Wenn du zu einem akzeptablen Ergebnis gekommen bist, kümmerst du dich um die gewünschte Ausgabe und die damit verbundenen zusätzlichen Ansprüche. Bei einer Messagebox geht es dabei prinzipiell nur darum, die gesammelten Inhalte in eine Zeichenkette zu überführen. Wie das grundsätzlich funktioniert, lässt sich im Vorgängerthread hervorragend rauslesen.

Bei konkreten Fragen helfe ich natürlich gern.

Viele Grüße
derHöpp
Vom Handy gesendet

26865

(15.11.2022, 11:01)dertommy schrieb: [ -> ]Danke für die Formel. Leider beherrsche ich eben VBA nicht, ich hätte es nicht gerne mit einer Formel gelöst, sondern mittels VBA.
DEIN Code tut doch das gleiche: Anwenden von Excelformeln in VBA. Warum schaffst du es, das in diesen Fällen umzusetzen, in dem Fall hier aber nicht? Das ist nicht glaubwürdig. Oder ist das überhaupt nicht dein Code? Warum präsentierst du ihn dann als deinen? Das gehört sich nicht!

Ich habe dir einfachste Fragen gestellt. Wenn du VBA lernen und verstehen wolltest, würdest du diese beantworten oder interessiert nachfragen. Dein Agieren erweckt allerdings den Eindruck, dass du nur kostenlosen Programmierservice wünscht. Denkst du ernsthaft, das wäre der Zweck eines Forums, kostenlos Dienstleistungen zu erschleichen?