Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ZÄHLENWENN oder Makro?

ZÄHLENWENN oder Makro?
17.01.2008 16:47:38
Thomas
hallo,
eine kurze frage, ob man eine bestimmte sache mit ZÄHLENWENN machen kann oder doch ein VBA programmieren muss.
ich habe in einer liste verschiedene länder aufgeführt und möchte wissen, wie oft welches land prozentual genannt wird. geht ja relativ einfach mit zählenwenn, das dann teilen durch die gesamtanzahl. nun muss man ja bei zählenwenn ein suchkriterium eingeben, z.b. deutschland, frankreich etc, ich würde es aber gerne flexibel gestalten, sprich excel soll in dem von mir angegebenen bereich schauen, welche länder überhaupt vorkommen und das dann berücksichtigen.
angenommen, die länder stehen in B2:B10, hatte ich es mit ZÄHLENWENN($B$2:$B$10;B2) probiert, aber das funktioniert nicht, weil dann mehrfachgenannte länder auch mehrfach mitgezählt werden.
hat jmd einen tip, wie man das auf VBA-basis vernünftig programmieren könnte? das beste wäre, daß ich den bereich markiere und man ausgespuckt bekommt: deutschland 43%, frankreich 18% etc.
wäre das sehr kompliziert zu gestalten?
besten dank!
gruß, thomas

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kl.Korrektur
17.01.2008 20:46:00
Wolli
Die Formel zum zählen muss natürlich so heißen
=WENN(E2"";ZÄHLENWENN($B$2:$B$110;E2)/ANZAHL2($B$2:$B$110);"")
(mit ausreichend $-Zeichen!)
oder ganz ohne $ als Matrixformel wie hier:
https://www.herber.de/bbs/user/49125.xls
:-)) Gruß, Wolli

AW: ZÄHLENWENN oder Makro?
17.01.2008 21:10:00
MichaV
Hallo,
so könnte eine Makrolösung aussehen:


Option Explicit
Sub Makro1()
    Dim rngAuswahl As Range
    Dim rngZelle As Range
    Dim strGefunden As String
    Dim lngAnzahl As Long
    If Not TypeName(Selection) = "Range" Then Exit Sub
    Set rngAuswahl = Selection
    lngAnzahl = rngAuswahl.Cells.Count
    strGefunden = vbCrLf
    For Each rngZelle In rngAuswahl
        If InStr(strGefunden, vbCrLf & rngZelle) = 0 Then
            strGefunden = strGefunden _
                & rngZelle _
                & ":" _
                & Round(Application.WorksheetFunction.CountIf(rngAuswahl, rngZelle) / lngAnzahl * 100, 2) _
                & "%" _
                & vbCrLf
        End If
    Next
    MsgBox Mid(strGefunden, 2)
Ende:
End Sub


Gruß- Micha
PS: Rückmeldung wäre nett.

Anzeige
AW: ZÄHLENWENN oder Makro?
18.01.2008 09:23:09
Thomas
@ wolli: besten dank, das ergebnis stimmt schon mal, jetzt muss ich mich nur noch in die formel reindenken :)
@ michaV: das makro probier ich auch mal aus und gebe dir bescheid!
danke nochmal an beide!
thomas

Alternativ-Makro?
18.01.2008 11:20:21
Thomas
@ Micha: tuts tadellos! super!
wenn du mir noch einen gefallen tun könntest: das makro hab ich leider nicht 100% verstanden. wie müßte ich das umschreiben, damit die übersicht anstatt in einer msgbox in der exceltabelle ausgespuckt wird?
wäre super, wenn du mir alternative 2 auch kurz posten könntest, ich sollte dann in der lage sein, durch vergleich der beiden codes beide versionen zu verstehen.
dank dir!
gruß, thomas

Anzeige
Alternativ-Makro?
18.01.2008 11:21:00
Thomas
(sorry, grad an der falschen stelle gepostet)
@ Micha: tuts tadellos! super!
wenn du mir noch einen gefallen tun könntest: das makro hab ich leider nicht 100% verstanden. wie müßte ich das umschreiben, damit die übersicht anstatt in einer msgbox in der exceltabelle ausgespuckt wird?
wäre super, wenn du mir alternative 2 auch kurz posten könntest, ich sollte dann in der lage sein, durch vergleich der beiden codes beide versionen zu verstehen.
dank dir!
gruß, thomas

AW: ZÄHLENWENN oder Makro?
18.01.2008 14:22:00
Thomas
hallo micha,
hab mal ein wenig rumprobiert und habe hier nochmal die for each-schleife bearbeitet. (anm.: davor wird eine zelle angewählt, in der die zusammenfassung startet)...
For Each rngZelle In rngAuswahl
Percentage = Round(Application.WorksheetFunction.CountIf(rngAuswahl, rngZelle) / lngAnzahl * 100, 2)
'If Not ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
ActiveCell.Value = rngZelle
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Percentage
ActiveCell.Offset(1, -1).Select
'End If
Next
Wenn ich es so lasse, spuckt er immer aber auch mehrfachnennungen mehrfach aus, und nicht nur 1x. deswegen dachte ich an die IF-funktion, die ich jetzt als kommentar drinstehen habe. Ist If aktiviert, schreibt er dann aber nix, sondern bleibt in der vor der for each-schleife definierten zelle.
kannst du mir sagen, was ich falsch mache?
thx, thomas

Anzeige
AW: ZÄHLENWENN oder Makro?
18.01.2008 21:05:29
MichaV
Hallo Thomas,
was Du falsch machst? Deine Schleife prüft nicht auf Mehrfachnennungen, darum werden die ja auch ausgespuckt :o)
Prinzip: Prüfe, ob das Land in einem Text mit allen bereits gefundenen Ländern enthalten ist. Wenn nicht, füge an den Text das neue Land an. Wenn ja, mache nix, denn es ist eine Mehrfachnennung.


Option Explicit
Sub Makro1()
    Dim rngAuswahl As Range
    Dim rngZelle As Range
    Dim strGefunden As String
    Dim lngAnzahl As Long
    Dim lngProzent As Long
    If Not TypeName(Selection) = "Range" Then Exit Sub
    Set rngAuswahl = Selection
    lngAnzahl = rngAuswahl.Cells.Count
    strGefunden = vbCrLf
    For Each rngZelle In rngAuswahl
        'Jede Zelle des markierten Bereiches
        If InStr(strGefunden, vbCrLf & rngZelle) = 0 Then
            'Wenn Wert noch nicht in Liste der gefundenen Werte enthalten
            '..Prozentsatz ermitteln
            lngProzent = Round(Application.WorksheetFunction.CountIf(rngAuswahl, rngZelle) / lngAnzahl * 100, 2)
            '..in Zelle daneben schreiben
            rngZelle.Offset(0, 1) = lngProzent & "%"
            '...und Wert mit einem eindeutigen Trennzeichen an den Text mit
            'den gefundenen Werten anfügen
            'Trennzeichen ist hier vbcrlf, weil das
            'in Excel- Zellen normalerweise nicht vorkommt, und weil man das so
            'schön in einer MsgBox ausgeben kann.
            strGefunden = strGefunden & rngZelle & vbCrLf
        End If
    Next
End Sub


Gruß- Micha
PS: Rückmeldung wäre nett

Anzeige
AW: ZÄHLENWENN oder Makro?
21.01.2008 09:10:13
Thomas
super micha, jetzt funktioniert es wie gewünscht!
das nicht auf mehrfachnennung geprüft wurde, wußte ich, aber nicht, wie ich es bewerkstellige.
dank dir nochmal!
gruß, thomas

AW: ZÄHLENWENN oder Makro?
21.01.2008 14:12:00
Thomas
@micha:
wenn ich den prozentsatz als long deklariere, bekomme ich keine nachkommastellen und wenn ich z.b. currency nehme, nur 2 stück, so wie es in der round funktion festgelegt ist.
ich möchte aber grundsätzlich die komplette zahl für weitere berechnungen verwenden und nicht runden, das würde ich für die ansicht mit numberformat machen. wenn ich nun die round funktion weglasse, bekomm ich aber auch keine nachkommastellen.
hast du einen (letzten, versprochen!) tip? :)
danke, thomas

Anzeige
eine letzte sache
21.01.2008 14:12:00
Thomas
@micha:
wenn ich den prozentsatz als long deklariere, bekomme ich keine nachkommastellen und wenn ich z.b. currency nehme, nur 2 stück, so wie es in der round funktion festgelegt ist.
ich möchte aber grundsätzlich die komplette zahl für weitere berechnungen verwenden und nicht runden, das würde ich für die ansicht mit numberformat machen. wenn ich nun die round funktion weglasse, bekomm ich aber auch keine nachkommastellen.
hast du einen (letzten, versprochen!) tip? :)
danke, thomas

AW: eine letzte sache
21.01.2008 22:08:17
MichaV
Hallo,
Fehler von mir, das Ergebnis als Long zu deklarieren. Da kann ja nur eine Ganzzahl bei rauskommen...
Schreibe
Dim lngProzent As Single
und lass das Runden weg.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige