[VBA/Excel] Array mit jeweils erstem Element jeder Zeile füllen?

... komplette Frage anzeigen

5 Antworten

Public Sub Run()
Dim members As Object
Set members = CreateObject("Scripting.Dictionary")

Dim row As Long
Dim maxRow As Long
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Worksheets(1)

maxRow = sheet.Cells(sheet.Rows.Count, "A").End(xlUp).row

Dim curName As String
Dim curHour As String

For row = 1 To maxRow
curName = sheet.Cells(row, 1)
curHour = sheet.Cells(row, 7)

If Not MemberExist(members, curName) Then
Call members.Add(curName, curHour)
Else
members.Item(curName) = Val(members.Item(curName)) + Val(curHour)
End If
Next row

For Each x In members
MsgBox (x & " => " & members.Item(x))
Next x

End Sub
Private Function MemberExist(list As Object, name As String) As Boolean
For Each x In list
If x = name Then
MemberExist = True
Exit Function
End If
Next
MemberExist = False
End Function

Bitteschön :)

MFG xGlumi

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von ChrisFragtGern
06.07.2017, 13:06

Das funktioniert schonmal super dankeschön :)

Eine andere Schwierigkeit vor der ich jetzt stehe ist, dass ich zu den einzelnen Einträgen meines neu erzeugten Arrays jetzt noch Werte hinzufügen will, wie z.B. eine Adresse.

Diese befinden sich aber in einem anderen Excel Dokument.

Ich habe überlegt eine if abfrage zu schreiben, die in Pseudocode ungefähr so aussieht:

if (members.Item(curname) == Name in anderer Excel Tabelle)

Dann add adresse aus anderere excel tabelle zum Arrayeintrag

Am Ende soll der Eintrag z.B. wie folgt aussehen:

Hans, 20 Stunden, Musterstraße 1, 11111 Musterdorf

0

Habe mal einen Ansatz. Leider erzeugt der Code ein leeres Element vorne weg in den Arrays. Das kriegst du bestimmt noch selber raus, wie man das beseitigt. ;)

Sub optimierer()
  Dim iZeile
  Dim aNamen() As Variant
  Dim aSummen() As Variant
  ReDim Preserve aNamen(0)
  ReDim Preserve aSummen(0)

iZeile = 1 While Cells(iZeile, 1) <> "" Call AddValue(aNamen, aSummen, Cells(iZeile, 1).Value, Cells(iZeile, 7).Value) iZeile = iZeile + 1 Wend Debug.Print "Fertig" End Sub
Sub AddValue(aNamen() As Variant, aSummen() As Variant, sName As String, iWert As Integer) Dim i As Integer Dim iName iName = -1 For i = 0 To UBound(aNamen) If aNamen(i) = sName Then _ iName = i Next If iName = -1 Then ReDim Preserve aNamen(UBound(aNamen) + 1) ReDim Preserve aSummen(UBound(aNamen) + 1) iName = UBound(aNamen) aNamen(iName) = sName End If aSummen(iName) = aSummen(iName) + iWert End Sub
Antwort bewerten Vielen Dank für Deine Bewertung

Hallo,

Die Lösung ohne VBA würde ja über eine Summewenn-Funktion erfolgen. Die meisten gängigen Formel sind auch über VBA abzubilden.

In dem Falle sollte Summewenn abfragbar sein mit worksheetfuncion.sumif()

Einen fertigen Code habe ich hier leider nicht verfügbar.

LG, Chris

Antwort bewerten Vielen Dank für Deine Bewertung

Als allgemeinen Tipp kann ich hier nur geben, dass ich persönlich für diese Aufgabenstellung, statt eines Arrays, eine Collection, oder noch besser ein Recordset benutzen würde.


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
06.07.2017, 12:37

Geht das inzwischen mit VBA? Collections kommen doch von .NET, richtig?

0

Geh dazu lieber in ein Fach Forum, such mal nach Herber VBA

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Funfroc
06.07.2017, 12:20

Mit einer Excel-Frage soll man ins Excel-Fach-Forum? ...dann müsste man mit einer Auto-Frage ins Auto-Fach-Forum, mit einer Politik-Frage ins Politik-Fach-Forum usw.

Wozu gibt es dann diese Seite hier, bei der man als Helfer ja sogar sein Fachgebiet selektieren kann?

1

Was möchtest Du wissen?