Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
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

Hallo Tino, habe nun die Regeln zusammengestellt

Hallo Tino, habe nun die Regeln zusammengestellt
08.04.2009 21:51:31
Joachim
Hallo Tino,
ich habe nun für mein Programm (Code) für die Funktion mit dem Zusammenfügen der Datensätze die genaue Regeln. Ich habe Dir noch mal eine Beispieldatei. Auf dem ersten Sheet ist die Regel beschrieben und auf dem 2.Sheet sind nochmal Daten mit dem alten Code, damit du weist, wie es vorher funktionierte.
Ich habe Dir die Regeln unten auf das erste Sheet geschrieben und hoffe, man kann es verstehen. Im Prinzip gibt es 6 verschiedene Regeln. (siehe verschiedene Farben) Die erste habe ich mal versucht zu beschreiben. Kannst Du Dir bitte nochmal das Sheet anschauen, wäre echt Super, da ich nicht mehr weiter komme.
Wenn Du willst, und mit diesem Kasten, wo die Regeln drin stehen, nicht klar kommst, melde Dich, ich schreibe Dir dann alles in Klartext hin. Beantworte Dir auch alle Fragen.
Hoffe, Du kannst Dir nochmal Zeit nehmen, damit ich das mal zu ende bringen.
Danke schon mal
Joachim
hier die Beispieldatei mit Regeln:
https://www.herber.de/bbs/user/61093.xls
PS: die Zeilen, die vorne mit NEU beginnen , sind nur Beispiel, wie Datensätze nach der Zusammenführung aussehen sollten.

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hallo Tino, habe nun die Regeln zusammengestellt
08.04.2009 22:17:01
Tino
Hallo,
ich denke ich habe es verstanden, wird aber ein wenig dauern, eventuell morgen.
Werde wohl sehr tief in die Trickkiste greifen müssen.
Gruß Tino
AW: Hallo Tino, habe nun die Regeln zusammengestellt
08.04.2009 22:23:22
Joachim
Hallo Tino,
absolut kein Stess machen, bin ja so froh, wenn Du mir Hilfst.
Wenn Du nochmal Fragen hast wegen den Regeln, bitte lieber nochmal melden, will nicht, dass du wegen meinem Regeln unnötige Arbeit hast. Hast schon mehr als genug geholfen.
Ansonsten recht schönen Dank schon mal :-)
Gruss
Joachim
zu viel
09.04.2009 07:01:16
Tino
Hallo,
ich muss leider passen, es sind zu viele Bedingungen die Du forderst.
Dies kann man nicht mehr mit einer Formel erschlagen.
Dazu müsste man eine aufwendige Schleife Programmieren,
die diese Bedingungen abarbeiten.
Dies ist bestimmt ein ganzer Tag arbeit bis man das zum laufen bekommt und
das ist mir doch etwas zu viel.
Sorry, ich mache vieles mit aber was zu viel ist, ist zu viel. Nicht Böse sein, ok. ;-)
Eventuell kannst Du dich mal hier hin wenden.
https://www.herber.de/develop.html
Gruß Tino
Anzeige
AW: zu viel
09.04.2009 08:15:31
Joachim
Hallo Tino,
Du ist kein Problem, dachte mir, dass es nicht einfach ist. Würde es ja echt wahnsinnig gerne selber machen , wenn ich nur könnte. Aber keine Sorge, bin Dir nicht böse.
Könntest Du mir evt. NUR für die erste Regel anhand eines Beispiels zeigen, wie man sowas machen könnte, vielleicht kann ich ja dann drauf aufbauen. Du musst aber nicht, ist echt kein Problem.
Danke Tino
Gruss
Joachim
AW: zu viel
09.04.2009 08:34:51
Joachim
Tino,
es geht im Prinzip nur um diese eine Spalte, wie muss ich diese Zeile erweitern, damit vorher noch geprüft wird, ob der Inhalt der Spalte G (zB 4500000200/00030) bei allen gefundenen DS bis zum "/" gleich sind und nach "/" ungleich sind > DANN addieren:
' 'Spalte 10 = J
Bereich1.FormulaR1C1 = "=IF(RC2"""",SUMIF(R10C2:R" & lRow & "C2,RC2,R10C10:R" & lRow & " C10),RC10)"
Bereich1.Offset(0, -(Bereich1.Column - 10)) = Bereich1.Value
Gruss
Joachim
Anzeige
AW: zu viel
09.04.2009 08:34:52
Joachim
Tino,
es geht im Prinzip nur um diese eine Spalte, wie muss ich diese Zeile erweitern, damit vorher noch geprüft wird, ob der Inhalt der Spalte G (zB 4500000200/00030) bei allen gefundenen DS bis zum "/" gleich sind und nach "/" ungleich sind > DANN addieren:
' 'Spalte 10 = J
Bereich1.FormulaR1C1 = "=IF(RC2"""",SUMIF(R10C2:R" & lRow & "C2,RC2,R10C10:R" & lRow & " C10),RC10)"
Bereich1.Offset(0, -(Bereich1.Column - 10)) = Bereich1.Value
Gruss
Joachim
AW: zu viel
09.04.2009 09:13:01
Tino
Hallo,
das ist noch.
'     'Spalte 10 = J 
     Bereich1.FormulaR1C1 = "=IF(AND(RC2<>"""",RC7<>""""),SUMPRODUCT((R10C2:R" & lRow & "C2=RC2)*" & _
                            "(LEFT(R10C7:R" & lRow & "C7,FIND(""/"",RC7)-1)=LEFT(RC7,FIND(""/"",RC7)-1))*" & _
                            "(R10C10:R" & lRow & "C10)),SUMIF(R10C2:R" & lRow & "C2,RC2,R10C10:R" & lRow & "C10))"
     Bereich1.Offset(0, -(Bereich1.Column - 10)) = Bereich1.Value


Gruß Tino

Anzeige
besser so
09.04.2009 09:24:07
Tino
Hallo,
Bereich1.FormulaR1C1 = "=IF(AND(RC2<>"""",RC7<>""""),SUMPRODUCT((R10C2:R" & lRow & "C2=RC2)*" & _
                       "(LEFT(R10C7:R" & lRow & "C7,FIND(""/"",RC7)-1)=LEFT(RC7,FIND(""/"",RC7)-1))*" & _
                       "(R10C10:R" & lRow & "C10)),RC10)"
Bereich1.Offset(0, -(Bereich1.Column - 10)) = Bereich1.Value


Gruß Tino

Anzeige
AW: besser so
09.04.2009 09:56:31
Joachim
Hallo Tino,
der Code addiert im Moment die zusammen, die die Gleiche Nummer haben, also zB:
Spalte_B_____________Spalte_G___________________Spalte_J
Haus1_______________45000000/22________________10,-
Haus1_______________45000050/22________________20,-
Haus1_______________45000000/22________________30,.
dann addiert dein aktuelles Beispiel die Zeilen 1 und 3 zusammen, weil sie in Spalte G vor dem "/" die gleiche Zahl haben (45000000) Ergebnis wäre dann 40,-
IM Prinzip reicht es nur zu prüfen, SIND ALLE GLEICH / SIND ALLE GLEICH, dann ALLE addieren.
Tanzt ein DS aus der reihe (vor oder nach dem "/"), dann lassen und KEINEN addieren.
Ist das noch drin ?
Oh Gott, was habe ich da blos angefangen ?
Gruss
Joachim
Anzeige
Stop Tino, habe Deine andere Nachricht gelesen
09.04.2009 09:59:09
Joachim
Erklärung
09.04.2009 09:15:58
Tino
Hallo,
will aber Dir auch erklären warum dies so schwierig ist.
Eine Regel bringt Dir nichts,
Du must alle Regeln auf einmal anwenden um die Ergebnisse reinzuschreiben.
Wendest Du nur eine Regel auf den Bereich an, werden die anderen mit Falschen Daten gefüllt und somit sind nachfolgende Regeln nutzlos.
Also man müsste erst den Bereich mit Haus01 raus filtern, prüfen welche Bedingung zutrifft, diese Bedingung anwenden.
Danach den Bereich mit Baum02 und wieder so vorgehen wie bei Haus01,
usw.… bis alle Daten (Bereiche) Durchgearbeitet sind.
Selbst für mich wäre dies eine enorme Herausforderung, wobei ich noch nicht einmal einen Ansatz habe wie ich anfangen würde, ist echt heftig.
Gruß Tino
Anzeige
AW: Erklärung
09.04.2009 09:37:06
Joachim
Hallo Tino,
Danke. Ich hatte mir das so vorgestellt: Wenn ich den Code so aufbaue, dass die Spalte J, wo diese Preise drin stehn, erst mal auf alle 6 Regeln durchlaufen lasse, also die 6 Regeln einfach untereinander schreibe:
Spalte G_________________________Spalte J
4500163210/00030________________111,40
4500163220/00020 ________________126,40
4500163230/00030 ________________2000,00
4500163210/00010 ________________2237,80
wenn gleich / gleich_________________gleich_______dann J Summe vom ersten DS
wenn gleich / ungleich_______________egal________dann J addieren
wenn gleich / gleich_________________ungleich_____dann J leer lassen
wenn ungleich / egal________________egal________dann J addieren
wenn leer / leer____________________ungleich_____dann J leer lassen
wenn leer / leer____________________gleich_______dann J Summe vom ersten DS
irgend eine Regel muss doch zutreffen. Dann wird doch auch für den neuen DS in J ein neues Ergebnis ausgerechnet. Und dannach kommen wie gehabt die anderen Spalten mit dem alten Code dran.
Dann müsste das doch funktionieren.
Also im Prinzip 6 solche Zeilen (wie du gerade geschrieben hast = für jede Regel)
Oder denke ich da falsch ? Bin halt nicht der Fachmann
Gruss
joachim
Anzeige
AW: Erklärung
09.04.2009 09:55:54
Tino
Hallo,
das ist aber genau dieses Problem.
Wenn ich 3 Bedingungen prüfen muss, müssen diese zusammen in einer Funktion geprüft werden, sonst ist das Ergebnis falsch.
Hier mal ein einfaches Beispiel mit Formeln, einmal mit allen und einmal mit nur einer Bedingung.
 CDEF
4  alle Bedingungennur eine Bedingung
5A100100100
6B200200 
7AB300300 

Formeln der Tabelle
ZelleFormel
E5=WENN(C5="A";D5;WENN(C5="B";D5;WENN(C5="AB";D5;"")))
F5=WENN(C5="A";D5;"")
E6=WENN(C6="A";D6;WENN(C6="B";D6;WENN(C6="AB";D6;"")))
F6=WENN(C6="A";D6;"")
E7=WENN(C7="A";D7;WENN(C7="B";D7;WENN(C7="AB";D7;"")))
F7=WENN(C7="A";D7;"")

Übertrage ich jetzt die Ergebnisse mit der einen Bedingung, kann ich keine weiteren Bedingen darauf anwenden weil der Wert nicht mehr stimmt.
Also muss ich alle Bedingungen auf einmal anwenden.
Also müsstest Du eine Formel erstellen die alle Bedingungen auf einmal erschlagen kann.
Gruß Tino
Anzeige
AW: Erklärung
09.04.2009 11:08:14
Joachim
Hallo Tino,
mir ist da noch eine Idee gekommen. Kann man zB mit einer Variable (X) arbeiten. zB.
Hier nochmal die Daten:
Spalte G_________________________Spalte J
4500163220/00030________________111,40
4500163220/00020 ________________126,40
4500163220/00030 ________________2000,00
4500163220/00010 ________________2237,80
Also, wenn ich mehrfach vorkommende ID's in B finde, dann prüfe ich per VBA (bevor die Zusammenführung der DS kommt) die Spalte G diese doppelten ab :
- wenn G alle leer; wenn J alle gleich; dann X1 = "0"
- wenn G alle leer; wenn J nicht gleich; dann X1 = "1"
- wenn G bis "/" ungleich ; dann X="2"
- wenn G nach "/" ungleich ; dann X="3"
- wenn G bis "/" alle gleich ;wenn nach "/" alle gleich; wenn Spalte J alle gleich; dann X="4"
- wenn G bis "/" alle gleich ;wenn nach "/" alle gleich; wenn Spalte J alle ungleich; dann X="5"
kann man diese abfragen, vielleicht könnte ich daraufhin weiter machen.
(wenns nicht zuviel arbeit ist)
Würds gerne versuchen.
Danke
Joachim
Anzeige
klingt eigentlich einfach an aber ;-)
09.04.2009 11:46:34
Tino
Hallo,
Dein Vorschlag hört sich eigentlich einfach an.
Aber die Umsetzung ist nicht so einfach.
Weil Du musst die Bereiche wieder separat bearbeiten und
in diesem Bereich alle Zellen wieder Prüfen.
Wieder ein Beispiel soll verdeutlichen wie aufwendig Dein vorhaben eigentlich ist und das ist nur ein minibeispiel.
 GH
10A100
11A50
12A100
13B150
14B200
15B200

Jetzt will ich wissen ob in Spalte H alle Werte gleich sind wenn in Spalte G ein B steht.
Also muss ich erst mal den Bereich nach B eingrenzen.
Jetzt muss ich in diesem Bereich schauen ob in H die Werte gleich sind.
Also musst Du jede Zelle mit jeder Zelle vergleichen, weil der andere Wert sonst wo stehen kann oder auch nicht.
Jetzt stell Dir noch vor, die einzelnen Bereiche mit A und B sind unbekannt, ich bzw. dass Programm weis ja nicht wie viele es von diesen Bereichen gibt und wie groß die sind.
Vielleicht kommt jetzt noch ein Bereich wo C oder und X oder und Z drin steht.
Verstehst Du wie komplex doch die Aufgabe ist.
Gruß Tino
AW: klingt eigentlich einfach an aber ;-)
09.04.2009 11:57:08
Joachim
Hallo Tino,
um mir das noch besser vorstellen zu können: wie arbeitete denn seither der Code. Im Code selber sehe ichm das ein BEREICH1 definiert ist. Wenn das Programm nun in B mehrfachvorkommende ID's findet, wie arbeitet der Code dann weiter, schmeist dieser die ersten (zB wie bei unseren letzten Beispielen) in diesen Bereich1 und bearbeitet sie, macht eine zeile daraus und spuckt die eine Zeile wieder aus.
Dann sucht er die nächsten doppelten,liesst sie wieder ein in den Bereich1, wurschtelt und gibt sie aus...usw
Oder werden ALLE doppelten ID eingelesen , da gruppiert, bearbeitet und alle einzelnen wieder raus ins Sheet ?
das ist mir nicht ganz klar.
Danke Joachim
ganz einfach...
09.04.2009 12:46:23
Tino
Hallo,
am Ende werden diese Formeln erstellt.
Beispiel aus der von Dir hier reingestellten Datei
 IUIV
103000
113000
12300 
136000
146000
15600 
166000
176000
18600 
1960000
2060000
216000 
223000
233000
24300 
25100 
26100 
27100 

Formeln der Tabelle
ZelleFormel
IU10=WENN($B10<>"";SUMMEWENN($B$10:$B$27;$B10;$J$10:$27:$27 $J:$J); $J10)
IV10=WENN(UND(ZÄHLENWENN($B10:$B$27;$B10)<>1;$B10<>""); 0;"")
IU11=WENN($B11<>"";SUMMEWENN($B$10:$B$27;$B11;$J$10:$27:$27 $J:$J); $J11)
IV11=WENN(UND(ZÄHLENWENN($B11:$B$27;$B11)<>1;$B11<>""); 0;"")
IU12=WENN($B12<>"";SUMMEWENN($B$10:$B$27;$B12;$J$10:$27:$27 $J:$J); $J12)
IV12=WENN(UND(ZÄHLENWENN($B12:$B$27;$B12)<>1;$B12<>""); 0;"")
IU13=WENN($B13<>"";SUMMEWENN($B$10:$B$27;$B13;$J$10:$27:$27 $J:$J); $J13)
IV13=WENN(UND(ZÄHLENWENN($B13:$B$27;$B13)<>1;$B13<>""); 0;"")
IU14=WENN($B14<>"";SUMMEWENN($B$10:$B$27;$B14;$J$10:$27:$27 $J:$J); $J14)
IV14=WENN(UND(ZÄHLENWENN($B14:$B$27;$B14)<>1;$B14<>""); 0;"")
IU15=WENN($B15<>"";SUMMEWENN($B$10:$B$27;$B15;$J$10:$27:$27 $J:$J); $J15)
IV15=WENN(UND(ZÄHLENWENN($B15:$B$27;$B15)<>1;$B15<>""); 0;"")
IU16=WENN($B16<>"";SUMMEWENN($B$10:$B$27;$B16;$J$10:$27:$27 $J:$J); $J16)
IV16=WENN(UND(ZÄHLENWENN($B16:$B$27;$B16)<>1;$B16<>""); 0;"")
IU17=WENN($B17<>"";SUMMEWENN($B$10:$B$27;$B17;$J$10:$27:$27 $J:$J); $J17)
IV17=WENN(UND(ZÄHLENWENN($B17:$B$27;$B17)<>1;$B17<>""); 0;"")
IU18=WENN($B18<>"";SUMMEWENN($B$10:$B$27;$B18;$J$10:$27:$27 $J:$J); $J18)
IV18=WENN(UND(ZÄHLENWENN($B18:$B$27;$B18)<>1;$B18<>""); 0;"")
IU19=WENN($B19<>"";SUMMEWENN($B$10:$B$27;$B19;$J$10:$27:$27 $J:$J); $J19)
IV19=WENN(UND(ZÄHLENWENN($B19:$B$27;$B19)<>1;$B19<>""); 0;"")
IU20=WENN($B20<>"";SUMMEWENN($B$10:$B$27;$B20;$J$10:$27:$27 $J:$J); $J20)
IV20=WENN(UND(ZÄHLENWENN($B20:$B$27;$B20)<>1;$B20<>""); 0;"")
IU21=WENN($B21<>"";SUMMEWENN($B$10:$B$27;$B21;$J$10:$27:$27 $J:$J); $J21)
IV21=WENN(UND(ZÄHLENWENN($B21:$B$27;$B21)<>1;$B21<>""); 0;"")
IU22=WENN($B22<>"";SUMMEWENN($B$10:$B$27;$B22;$J$10:$27:$27 $J:$J); $J22)
IV22=WENN(UND(ZÄHLENWENN($B22:$B$27;$B22)<>1;$B22<>""); 0;"")
IU23=WENN($B23<>"";SUMMEWENN($B$10:$B$27;$B23;$J$10:$27:$27 $J:$J); $J23)
IV23=WENN(UND(ZÄHLENWENN($B23:$B$27;$B23)<>1;$B23<>""); 0;"")
IU24=WENN($B24<>"";SUMMEWENN($B$10:$B$27;$B24;$J$10:$27:$27 $J:$J); $J24)
IV24=WENN(UND(ZÄHLENWENN($B24:$B$27;$B24)<>1;$B24<>""); 0;"")
IU25=WENN($B25<>"";SUMMEWENN($B$10:$B$27;$B25;$J$10:$27:$27 $J:$J); $J25)
IV25=WENN(UND(ZÄHLENWENN($B25:$B$27;$B25)<>1;$B25<>""); 0;"")
IU26=WENN($B26<>"";SUMMEWENN($B$10:$B$27;$B26;$J$10:$27:$27 $J:$J); $J26)
IV26=WENN(UND(ZÄHLENWENN($B26:$B$27;$B26)<>1;$B26<>""); 0;"")
IU27=WENN($B27<>"";SUMMEWENN($B$10:$B$27;$B27;$J$10:$27:$27 $J:$J); $J27)
IV27=WENN(UND(ZÄHLENWENN($B27:$B$27;$B27)<>1;$B27<>""); 0;"")

Die Werte aus der Spalte IU werden nach Spalte J kopiert und die Zeilen mit dem Wert 0 in IV werden gelöscht.
Gruß Tino
OK.....
09.04.2009 13:11:45
Joachim
Hallo Tino,
alles klar, habe nun kappiert, dass dies sehr aufwendig ist. Auch den Code verstehe ich nun langsam.
Ich müsste dann , wenn ich nun alles 100% vertanden habe, bei meiner Auswahl jede Zelle mit jeder vergleichen, ob ich doppelte habe.
Ist wohl doch eine (oder mehrere) Nummern zu gross für mich. Muss mir von Grund auf irgend was neues einfallen lassen, geht halt nicht.
Trotzdem vielen Dank für Deine ganze Hilfe
Gruss
joachim
AW: OK.....
09.04.2009 13:35:59
Tino
Hallo,
das hast Du richtig verstanden und eine solche Formel zu erstellen die alle Sachen abdeckt und noch das richtige Ergebnis Liefert ist wohl für mich und für Dich eine Nummer zu groß.
Aber auch rein mit VBA mit Schleifen und Prüfungen und Zählen und Summieren usw. wird dies ein sehr aufwendiger Code.
Heute Abend gehe ich einige Bier trinken, vielleicht fällt mir noch was ein wenn ich mal einen Reset durchgeführt habe. ;-)
Gruß Tino
AW: OK.....
09.04.2009 13:40:23
Joachim
Hallo Tino,
trinke soviel Du kannst , ich bezahle sie auch, hauptsache der Reset funktioniert ;-)
Falls Dir noch was vernünftiges (machbares) einfällt , melde dich, ich hirne auch noch mal.
Gruss
Joachim

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige