Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anzahl unterschiedlicher Werte aus Spalte bestimme

Anzahl unterschiedlicher Werte aus Spalte bestimme
10.06.2016 20:42:25
Sofie
hallo zusammen,
ich bin neu hier und habe kaum VBA kenntnisse. Ich möchte in VBA folgendes programmieren. Es soll durch einen klick auf einem Button eine Excel-Datei geöffnet werden und der Inhalt aus Spalte A in eine Listbox übertragen werden. Zusätzlich soll aus Spalte B die Summe berechnet werden und in einer Textbox ausgegeben werden. Als letztes sollen aus Spalte H die Anzahl Unterschiedlicher Werte bestimmt werden(Typ String).
Beim letzten Punkt komem ich nicht weiter. Irgendwie schaff ich es nicht das Dictionary-Object auf die richtige Mappe zu beziehen. Ich bekomme hier immer den Wert 0 als ergebnis raus.
Habt ihr eine Idee wie man das lösen könnte?
Ich hoffe das war einigermaßen verständlich erklärt.Ich würde mich freuenwenn ihr mir helfen könntet.
Private Sub CommandButton1_Click()
Dim i As Integer
Dim varDatei As Variant
Dim letztezeile As Integer
Dim wb1 As Workbook
Dim wb2 As Workbook
'Listbox leeren falls neue Datei geöffnet wird
ListBox1.Clear
Set wb1 = ThisWorkbook
varDatei = Application.GetOpenFilename("Exceldateien, *xls?, Alle Dateien, *.*", 1, "Bitte   _
_
_
Datei auswählen")
Set wb2 = Workbooks.Open(varDatei, ReadOnly:=True)
'Anzahl der Zellen mit Wert in Spalte1 zählen
If varDatei  False Then
letztezeile = Cells(Rows.Count, 1).End(xlUp).Row
'Listbox füllen
For i = 1 To letztezeile
ListBox1.AddItem (Cells(i + 1, 1).Value)
Next i
'Summe aus Spalte 2 bestimmen
SumPark = WorksheetFunction.Sum(Columns(2))
TextBox1.Value = SumPark
MsgBox AnzahlWerte(Tabelle1.Range("H1:H20"))
wb2.Close (True)
End If
End Sub
Function AnzahlWerte(Bereich As Range) As Long
Dim Zelle As Range, objSD As Object
Set objSD = CreateObject("scripting.dictionary")
'Füllen des Dictionary-Objektes
For Each Zelle In Bereich
If Zelle "" Then objSD(Zelle.Value) = 0
Next
AnzahlWerte = objSD.Count
End Function

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl unterschiedlicher Werte aus Spalte bestimme
10.06.2016 21:10:21
Fennek
Hallo,
ein mögliches Problem ist der Aufruf der Function: m.E. wird über "Msgbox AnzahlWerte" die Function überhaupt nicht aufgerufen.
Auch die Ausgabe der "keys" dürfte so nicht funktionieren.
mfg
Anbei mein Muster für Dictionary

Sub test_2()
lr = Cells(Rows.Count, "A").End(xlUp).Row
With CreateObject("scripting.dictionary")
For i = 2 To lr
'     .Item(Cells(i, "A").Value) = Cells(i, "B")
If Not .exists(Cells(i, "A").Value) Then
.Add (Cells(i, "A").Value), Cells(i, "B")
End If
Next i
Debug.Print Join(.keys, "; ")
Debug.Print Join(.items, "; ")
End With
End Sub

Anzeige
AW: Anzahl unterschiedlicher Werte aus Spalte bestimme
11.06.2016 22:45:06
Sofie
Hallo Fennek vielen Dank für deine schnelle Antwort!!!!!!
so ganz verstehe ich das Dictionary noch nicht. Ich habe den Code nochmals etwas umgeschrieben um es besser nachvollziehen zu können. Wenn ich die Anzahl der (eindeutigen) Werte im Dictionary bestimme kommt der Richtige Wert raus. Nur wie kann ich jetzt die im Dictionary gespeicherten Werte wieder auslesen (in einer MsgBox) hier bekomme ich keine Werte angezeigt.
Ich würde mcih über weitere Hilfe sehr freuen :)
Hier mein Code:
Sub test_2()
Dim myDic As Object
Dim z As Variant
lr = Cells(Rows.Count, "H").End(xlUp).Row
Set myDic = CreateObject("scripting.dictionary")
With myDic
For i = 2 To lr
'     .Item(Cells(i, "H").Value) = Cells(i, "B")
If Not .exists(Cells(i, "H").Value) Then
.Add (Cells(i, "H").Value), Cells(i, "B")
End If
Next i
Debug.Print Join(.keys, "; ")
Debug.Print Join(.items, "; ")
AnzahlWerte = myDic.Count
MsgBox AnzahlWerte
End With
End Sub

Anzeige
AW: Anzahl unterschiedlicher Werte aus Spalte bestimme
11.06.2016 23:06:34
Fennek
Hallo Sofie,
die Ausgabe der .keys und .items ist im "Direktfenster" des vba-Editors. Um es in einer msgbox zu sehen,
hilft

msgbox join(.keys, chr(10)) und
msgbox join(.items, chr(10))
chr(10) macht einen Zeilenumbruch.
mfg

AW: Anzahl unterschiedlicher Werte aus Spalte bestimme
12.06.2016 00:55:10
Sofie
Super vielen Dank, genau das habeich gebraucht !

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige