11.05.2020, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2020, 12:12 von gadgetsz.
Bearbeitungsgrund: (versehentlich Bild hochgeladen)
)
Danke dafür! Das gibt es nicht, daher ist es eine super Lösung.
Nun noch ein anderes kleines Problem: Das Arbeitsblatt "Kostenstellen Summary" hat nicht, wie von mir im Basis-Beispiel angegeben nur Zahlen, sondern darüber hinaus auch Text. Eine Kostenstelle sieht z.B. so aus:
1001 - Vorstand - Vorstandssitzung
Falls dies eine wichtige Information ist: Die Zelle holt sich die Information wie sie heisst wiederrum über ein Kostenstellenübersichtsblatt.
Aus Datenschutzgründen darf ich leider nicht das komplette Arbeitsblatt teilen. Aus diesem Grund habe ich das tatsächliche (mit ca. 100 Kostenstellen) verkürzt und hier angehängt.
Ich hab mich schon an ein paar "If-Formeln" versucht, allerdings bisher erfolglos. Welche "If-Formel" wäre für den Code die Richtige?
11.05.2020, 13:44 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2020, 13:47 von Steffl.)
Hallo,
PHP-Code:
Sub prcEinlesen() Dim objDic As Object Dim lngC As Long, lngLastRow As Long, lngA As Long Dim strNächsteMappe As String Dim vntSpalten As Variant, vntItem As Variant
'die Spalten in denen die Kostenstellen stehen (hier Spalte B u. H) vntSpalten = Array(2, 8) Set objDic = CreateObject("scripting.dictionary") 'gesucht wird in dem Verzeichnis in der die Masterdatei steht, nach Dateien, die mit dmu beginnen strNächsteMappe = Dir(ThisWorkbook.Path & "\dmu*.*xls*") Do While strNächsteMappe <> "" 'die entsprechenden Dateien werden ge?ffnet Workbooks.Open ThisWorkbook.Path & "\" & strNächsteMappe With ActiveWorkbook With .Worksheets("Kostenstellen Summary") For lngA = 0 To UBound(vntSpalten) For lngC = 3 To .Cells(.Rows.Count, vntSpalten(lngA)).End(xlUp).Row 'wird die Kostenstelle und der Betrag eingelesen objDic(.Cells(lngC, vntSpalten(lngA)).Value) = objDic(.Cells(lngC, vntSpalten(lngA)).Value) + WorksheetFunction.Sum(.Cells(lngC, vntSpalten(lngA) + 3).Resize(, 2).Value) Next lngC Next lngA End With .Close False End With strNächsteMappe = Dir() Loop
lngC = 1 'Ausgabe des Dictionary For Each vntItem In objDic.keys Cells(lngC, 1).Value = vntItem Cells(lngC, 2).Value = objDic(vntItem) lngC = lngC + 1 Next vntItem End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28 • gadgetsz
Nun glaube ich wirklich die letzte Frage zu haben: Wie kann ich diesen Code schnippsel so umschreiben, dass z.B. auch Excel-Dateien mit anderen Prefix wie z.B. "dmu", "dkv" oder "dde" eingelesen werden können?
(12.05.2020, 08:37)gadgetsz schrieb: Wie kann ich diesen Code schnippsel so umschreiben, dass z.B. auch Excel-Dateien mit anderen Prefix wie z.B. "dmu", "dkv" oder "dde" eingelesen werden können?
es kommt halt darauf an, welche Dateien in deinem Verzeichnis sind. Wenn es nur Rapporte sind und die die Endung .xlsx haben, könntest Du es so versuchen
ich habe nun ein neues "Kostenstellenblatt" bei welchem die Arbeitsstunden bei Spalte E und der Lohn bei Spalte H ist. Kostenstelle ist immernoch bei Spalte B. Wie kann man das in dem Code von damals anpassen?
ich habe gerade mal das neue Kostenstellenblatt mit einigen Daten und Pseudo-Namen gefüllt. Im Anhang findest du dieses. Wäre es dir vlt. möglich, mir kurz zu erklären, wie ich den Code für dieses Blatt abändern kann welches sich nur strukturell etwas geändert hat?
16.07.2020, 11:06 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2020, 11:06 von gadgetsz.
Bearbeitungsgrund: detailierter
)
Das ist richtig. Was vorher eine Verkettung von verschiedenen Zellen war, habe ich jetzt einfach auf 3 Spalten aufgeteilt. Es würde aber genügen, wenn bei dem Summary die erste Zelle mit den Kostenstellennummern abgefragt und die Summe bei zusammengefasst würde. Sprich so: