PDA

Vollständige Version anzeigen : Häufigsten Namen einer Range ermitteln?


Yim
19.06.2007, 18:16
Hallo,

ich hab zum testen grad ein Makro geschrieben, das mir später täglich 10 Namen in einer Rangfolge nebeneinander, in eine art Datenbank eintragen soll.

Eine Datenbank macht aber nur sinn, wenn man sie auch auswerten kann.

Jetzt möchte ich wissen, welcher Name jeweils am häufigsten in einer Range von 5 untereinander liegenden Zellen der 10 Spalten genannt wird und den jeweils häufigsten Namen einige Zeilen über die Range schreiben lassen.

Die Schleife und die Range definieren, würde ich ja selbst hinbekommen, aber wie finde ich den häufigsten Namen einer Range?

Bitte keine Formellösungen, weil ich es später in den bestehenden VBA Code einbauen möchte.

jinx
19.06.2007, 18:25
<font size="2" face="Century Gothic">Moin, Yim,

ich würde eine Lösung per Pivottabelle einsetzen. Ansonsten: Per Spezialfilter eine eindeutige Liste erzeugen, Zählenwenn in VBA als CountIf einsetzen, eine Collection erzeugen, eine Matrix...</font>

chris-kaiser
20.06.2007, 01:56
hiho

Dim the_big_one
Sub n()
Dim objDict, c, za, Str_aus
Dim rng As Range
Dim unos() As String
Set rng = Range("A1:C100") 'anpassen
Set objDict = CreateObject("Scripting.Dictionary")
For Each c In rng
If Not objDict.exists(c.Value) Then
Call objDict.Add(c.Value, Empty)
If c <> "" Then
ReDim Preserve unos(za)
unos(za) = c
the_big_one = schau_nach(rng, c.Value)
za = za + 1
End If
End If
Next
Set objDict = Nothing
For i = 0 To UBound(unos())
Str_aus = Str_aus & unos(i) & " kommt " & WorksheetFunction.CountIf(rng, unos(i)) & " vor" & Chr(10)
Next
MsgBox Str_aus
MsgBox "dieser Text war am häufigsten vorhanden: " & the_big_one
End Sub

Function schau_nach(bereich As Range, Uebergabe As String) As String
Static last
temp = WorksheetFunction.CountIf(bereich, Uebergabe)
If temp >= last Then
last = temp
schau_nach = Uebergabe
Else
schau_nach = the_big_one
End If
End Function


ein wenig überladen aber um diese Uhrzeit...
hoffe es hilft

Yim
20.06.2007, 20:32
Wow!

Vielen Dank Chris!

Das ist genau das wonach ich gesucht hatte.
Der Code läuft sehr schnell.

Ich hatte vorher schon viel gegoogelt, ein gefundener Code hat die Ergebnisse scheinbar per Würfeln ermittelt und der nächste legte gleich den PC lahm.
Selbst habe ich bisher noch nicht mehr als zwei einfache Counter mit Filter zustande gebracht.

Gruss

Hans