Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1100to1104
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

Summierung von Datensätze

Summierung von Datensätze
Datensätze
Guten Morgen an Alle
Mittels eines Makros werden die Daten aus einer Excel-Tabelle in ein csv-File umgewandelt. Jetzt ist es so, dass die Personen aus dem Stamm unter dem Tabellenblatt mehrere Datensätze haben. Diese sollten im Export alle aufsummiert werden.
Anbei sende ich Euch mal den Code für die Aufbereitung der Daten.
Für Eure Hilfe bedanke ich mich im Voraus.
Gruss
NXM
' Daten für Schnittstellendatei aufbereiten
Worksheets("Import").Range("A2").Select
z = 2 ' Zeilennummer für Schnittstellenprotokoll
Do Until IsEmpty(ActiveCell.Value)
h = ActiveCell.Row
pName = Mid(Cells(h, 1).Value, InStrRev(Cells(h, 1).Value, " ") + 1)
pBetrag = Str(Round(Cells(h, 2).Value * 100, 0))
Worksheets("Stamm").Activate
mEndZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
With Worksheets("Stamm").Range("A2:A" & mEndZeile)
Set c = .Find(pName, LookIn:=xlValues, SearchOrder:=xlByColumns)
If Not c Is Nothing Then
firstAddress = c.Address
Do
a = c.Row
mName = Cells(a, 1).Value
mPersNr = Cells(a, 3).Value
mAnstNr = Cells(a, 4).Value
mKlinik = Cells(a, 5).Value
' Datensatz für Schnittstellenfile aufbereiten
t1 = String(8 - Len(Trim(mPersNr)), "0") + Trim(mPersNr)
t2 = String(2 - Len(Trim(mAnstNr)), "0") + Trim(mAnstNr)
t3 = "1886"
't4 Betrag auf Negativwert prüfen
If InStr(1, pBetrag, "-") = 0 Then
t4 = String(13 - Len(Trim(pBetrag)), "0") + Trim(pBetrag)
Else: t4 = "-" + String(13 - Len(Trim(pBetrag)), "0") _
+ Mid(Trim(pBetrag), 2, Len(Trim(pBetrag)) - 1)
End If
t5 = "CHF"
t6 = Trim(Str(pBegDatum))
t7 = "1100"
t8 = "5130"
t9 = " HOGE " & Trim(mKlinik)
t10 = Trim(mName)
t11 = """"
t12 = "Total"
't13 Totalbetrag auf Negativwert prüfen
If InStr(1, pSumBetrag, "-") = 0 Then
t13 = String(13 - Len(Trim(pSumBetrag)), "0") + Trim(pSumBetrag)
Else: t13 = "-" + String(13 - Len(Trim(pSumBetrag)), "0") _
+ Mid(Trim(pSumBetrag), 2, Len(Trim(pSumBetrag)) - 1)
End If
t14 = Trim(Str(mAnzRecords))
' Datensatz in Schnittstellenfile schreiben
Write #1, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14
' Datensatz in Schnittstellenprotokoll schreiben
Worksheets("PULS-Protokoll").Activate
Cells(z, 1).Value = "'" + t1
Cells(z, 2).Value = "'" + t2
Cells(z, 3).Value = "'" + t3
Cells(z, 4).Value = "'" + t4
Cells(z, 5).Value = t5
Cells(z, 6).Value = "'" + t6
Cells(z, 7).Value = "'" + t7
Cells(z, 8).Value = "'" + t8
Cells(z, 9).Value = t9
Cells(z, 10).Value = t10
Cells(z, 11).Value = ""
Cells(z, 12).Value = t12
Cells(z, 13).Value = "'" + t13
Cells(z, 14).Value = "'" + t14
z = z + 1 ' Zeilennummer in Protokoll erhöhen
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address firstAddress
End If
End With

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Summierung von Datensätze
03.09.2009 11:05:51
Datensätze
Hallo NMX,
leider sehr unklare Fragestellung.
Was soll denn addiert werden? Welche Spalte?
Soll nur einmal im Blatt Stamm nach dem Namen gesucht werden (Die Do-Loop-Schleife dann entfallen)?
Und wenn gefunden dann ermittelt werden, wie oft der Name vorkommt und wie groß die Summe der zugehörigen Werte in einer Spalte sind?
Leider ist dein Code durch die mehrfache Verwendung von Sheet("xyz").Activate nicht sehr lesefreundlich und relativ mühselig nachzuvollziehen.
Gruß
Franz
AW: Summierung von Datensätze
03.09.2009 11:26:21
Datensätze
Hallo
Vielen Dank für Deine Antwort.
Ich versuche es wie folgt zu erklären, damit es klarer wird. Wäre ansonsten eine Beispielstabelle besser? Oder wie sollte der Code zum besseren Verständnis kopiert werden.
Sheet "Stamm"
enthält die Namen und die dazugehörige Nummer (Jeder Name ist eindeutig)
Sheet "Import"
enthält den Namen mit dem dazugehörigen Betrag. Der Name kann im Importfeld mehrmals vorkommen muss aber nicht.
Der Betrag (kommt aus dem Sheet Import Spalte 2) soll für die Spalte t4 pr Name aufsummiert werden.
Nochmals Danke, dass Du Dir die Zeit nimmst.
Gib mir Bescheid, was für das nächste Mal noch wichtig wäre in den Beitrag einzutragen, damit es besser verständlich ist.
Gruss
NXM
Anzeige
AW: Summierung von Datensätze
03.09.2009 16:17:56
Datensätze
Hallo NMX,
eine Beispieldatei ist immer besser wenn etwas komplexere Probleme abgearbeitet werden soll.
Mir ist insbesondere noch nicht klar, wie die Namen in der Import-Datei stehen, da du zum Suchen des Namens in den Stammdaten in der Importdatei den Teil eines Zellinhalts als Namen ausschneidest. Damit Scheiden Funktionen wie ZählenWenn (CountIfA) oder auch SummeWenn(SumIf) zur Auswertung aus, da der Nameseintrag nicht so richtig eindeutig in der Importdatei ist.
Ich nehme auch an, dass für jeden Namen nur einmal eine Summe der Beträge ermittelt werden soll. D.h.
In der Importdatei müssen Zeilen, deren Namen bereits ausgewertet wurden, bei der weiteren Auswertung ignoriert werden.
Die Beispiel-Datei (Bitte alle persönlichen Daten anonymisieren!!) sollte alle 3 Blätter enthalten(Stamm mit einpaar Zeilen, Import mit ein paar typischen Zeilen, und PULS-Protokoll mit den aus Import+Stamm generierten Ergebnissen. Auch die für den Export benutzte Prozedur(Code) sollte komplett dabei sein.
Gruß
Franz
Anzeige
AW: Summierung von Datensätze
08.09.2009 14:09:34
Datensätze
Hallo Franz
So, ich habe nun eine Beispielsdatei erstellt, die Du hier herunterladen kannst:
https://www.herber.de/bbs/user/64278.xls
Eine kurze Erläuterung zu den Tabellenblättern:
- HOGE-Files:
Gibt die verschieden Pfade zu den Tabellen her, von welchen die Dateien für das Tabellenblatt HOGE-Import herausgezogen werden (ist leer, da es für das Problem nicht relevant ist).
- Arztstamm:
Enthält die Stammdaten (u.a. Name, Nr, Bereich).
- HOGE-Import:
Enthält Name und Betrag
Mit der rechten Maustaste kommt man zum Kontextmenü und kann durch die Auswahl von Erstellen PULS-Schnittstellendatei die csv. Datei erstellen.
Die Schnittstellendatei führt aber die Namen nacheinander auf. Im Beispielsfall wird Müller4 zweimal aufgeführt. Das Ziel wäre es, dass Herr Müller4 nur einmal auftaucht und der Betrag von den zwei Datensätzen aufsummiert wird. Wie kann das gemacht werden?
Ich hoffe, nun kannst Du das Problem besser nachvollziehen und ich habe nichts vergessen.
Wünsche Dir einen schönen Nachmittag und schon vorab vielen Dank.
Gruss
NXM
Anzeige
AW: Summierung von Datensätze
08.09.2009 17:48:53
Datensätze
Hallo NXM,
damit die Erstellung des Exports "relativ" einfach zu handeln wird, bin ich jetzt den Weg über einen temporären Pivot-Tabellen-Bericht gegangen. In diesem werden die Beträge pro Name zusammengefasst und die Anzahl der Datensätze gezählt. Damit erspart man sich eine Prozedur zu schreiben, die diese Summierung durchführt.
Diesen Bericht kannst du auch unabhäng per Makro "PivotImport" erstellen.
Unklar ist nur noch welche Anzahl Records in der Letzten Spalte der exportierten Datei ausgewiesen werden soll. Die Gesamtzahl aller Records die aus HOGE-Import erfolgreich exportiert wurden oder die Anzahl der Records in der Exportdatei? Hier Code noch entsprechend anpassen. Im Moment werden alle HOGE-Records gezählt, die andere Variante ist als Kommentar drin.
Generell hab ich in der Prozedur die Activate- und Select-Anweisungen auf das Minimum reduziert und mit Objektvariablen für die involvierten Tabellen und With-Methode gearbeitet.
Ein generelles Problem bleibt jedoch. Bei gleichem Nachnamen zweier Ärzte gibt es ein Problem, da Excel diese nicht unterscheiden kann und alle Werte für die 1. Fundstelle in den Arztstammdaten summiert.
Gruß
Franz
https://www.herber.de/bbs/user/64283.xls
Anzeige
AW: Summierung von Datensätze
09.09.2009 13:47:54
Datensätze
Hallo Franz
Die Datei funktioniert einwandfrei. Die Schnittstellendatei soll nur die enthaltenen Datensätze zählen. Ich habe dafür die andere Lösung von Dir genommen. In Bezug auf den Namen hast Du vollkommen recht: Falls es zwei Ärzte mit dem gleichen Namen geben würde, würde der erste alles erhalten. Für den Gebrauch der Datei ist es bisher nicht der Fall gewesen, sollte aber tatsächlich geändert werden, falls mal tatsächlich zwei Ärzte mit dem gleichen Namen da wären.
Für Deine schnelle Hilfe möchte ich mich recht herzlich bedanken.
Wünsche Dir noch einen schönen Tag.
NXM
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige