Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
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
Inhaltsverzeichnis

2 Arrays gegen einander durchsuchen

2 Arrays gegen einander durchsuchen
Maximilian
Hallo,
ich habe mir ein Userform gebastelt mit dessen hilfe ich ein tabellenblatte mit daten fülle.
Spalte A =Datum Spalte B = Kostenstelle Spalte C = Aufgabe Spalte D =verbrauchte zeit und E = Kommentar.
In dem Formular möchte ich nun ein anfang und endatum eingeben und über ein button sollen mir in tabellenblatt 3 die daten zusammengefasst werden. also wieviel zeit auf welche Kostenstelle gebucht werden muss
Meine Idee war es 2 Arrays zu erzeugen. Ein Datenarray das die ganze tabelle erfasst und eines mit den kostenstellen (ohne doppelte) Dann wollte ich das kostenstellen array als suchwerte benutzen und gegen das datenarray laufen lassen.
Soweit die Theorie :)
Folgende Probleme habe ich:
1. Die bestimmung des unteren und oberen grenzwertes aus dem Datum funktioniert nicht richtig, weil die daten mehrfach vorkommen
2. Mir fehlt ein konzept um die Arrays gegeneinander zu durchsuchen. außerdem habe ich schon diverse sachen probiert um die daten aus einem array herauszuschreiben und bekomme es nicht in tabellenblatt 3
3. Vllt ist die Idee mit 2 Arrays auch nicht praktikabel und man sollte das eher mit einer anderen methode machen?
Danke für eure Hilfe
Hier mein code für die Auswertung
Private Sub btn_auswertung_Click()
Dim i As Integer, j As Long
Dim spnr As Long, ogr As Long, ugr As Long
Dim znr As Integer, znrz As Integer, znrt As Integer, z As Integer
Dim pruefwert As String
Dim getrennt() As String
Dim doppelt As Boolean
Dim startdatum As String, Enddatum As String
Dim x As Integer
Dim Daten()
Dim Kostenstelle()
startdatum = txt_anfangsdatum
Enddatum = txt_enddatum
Datenarray = Sheets(1).Cells(1, 1).CurrentRegion
i = 0
x = 0
znr = 1
znrz = 1
z = 1
'untere Grenze Array ermitteln
Do
znr = znr + 1
ugr = znr
Loop While Worksheets("Tabelle1").Cells(znr, 1).Value  startdatum
' obere Grenze Array ermitteln
Do
znrz = znrz + 1
ogr = znrz
Loop While Worksheets("Tabelle1").Cells(znrz, 1).Value  Enddatum
znrt = 0
'Kostenstellen in zeitraum bestimmen
Do While znrt + ugr  ogr + 1
ReDim Preserve Kostenstelle(i)
Kostenstelle(i) = Worksheets("Tabelle3").Range("B" & i + 1)
pruefwert = Range("B" & znrt + ugr)
doppelt = False
For j = 0 To UBound(Kostenstelle)
If Kostenstelle(j) = pruefwert Then
doppelt = True
Exit For
End If
Next
If doppelt = False Then
Kostenstelle(UBound(Kostenstelle)) = pruefwert
i = i + 1
End If
j = j + 1
znrt = znrt + 1
Loop
Dim i1 As Long
Dim i2 As Long
For i2 = LBound(Kostenstelle) To UBound(Kostenstelle)
For i1 = LBound(Datenarray) To UBound(Datenarray)
If (Kostenstelle(i2) = Datenarray(i1, 2)) Then
Datenarray(i1, 2) = Worksheets("Tabelle3").Cells(2, i1 + 1)
End If
Next i1
Next i2
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 2 Arrays gegen einander durchsuchen
MK
Beitrag bitte löschen
AW: 2 Arrays gegen einander durchsuchen
26.05.2018 12:32:24
Daniel
Hi
Such mal in den Weiten des www nach dem Dictionary-Objekt
Ein Dictionary ist im Prinzip ein Eindimensionales Array, bei dem du als Index keine feste Zahlenfolge (1-x), sondern einen Freitext (z.b. deine Kostenstellenbezeichnungen) verwenden kannst.
Das wäre die geeignete Methode, wenn du die Aufgabe mit VBA lösen willst.
Allerdings kannst du das auch so lösen, wie es ein Unbedarfer Excelanwender mit soliden Basiskenntnissen lösen würde:
- Kostenstellen in die neue Tabelle kopieren
- Duplikate entfernen auf die Kostenstellen anwenden
- in die Spalte daneben die entsprechende SummeWenn(s) Funktion eintragen um die Auswertung zu machen.
Auch dieses Vorgehen lässt sich mit wenigen Zeilen programmieren.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige