Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Manngebirge strecken / stauchen - suche Algoritmus

Forumthread: Manngebirge strecken / stauchen - suche Algoritmus

Manngebirge strecken / stauchen - suche Algoritmus
09.05.2016 21:18:30
raspi
Ich habe folgende Aufgabenstellung, wo mir kein gescheiter Algoritmus einfällt. Möglicherweise durfte schon mal jemand so etwas erstellen.
Es geht um die Verteilung von Arbeitsaufwand über der Zeit ( auch bekannt unter dem Begriff "Manngebirge").
Beispiel:
Ein Projekt dauert 1 Jahr und nun soll geplant werden, wann wieviele Arbeit anfällt.
Diese Zahlen sind normiert, so dass die Verteilung in % angegeben wird. Abhängig von der gesamtanzahl der voraussichtlichen Stunden werden diese dann über das Jahr entsprechend berechnet. (Dies nur zur info).
Die Aufgabe besteht nun darin, dass die Verteilung der Aufwände in etwa gleich bleibt, selsbt wenn sich die Projektzeit ändert. D.h. die Verteilung soll "gestreckt" oder "gestaucht" werden.
Am Ende soll (zumindest optisch) das "Gebirge" ähnlich aussehen wie zuvor.
Beispiel:
Statt ein Jahr soll ein ähnliches Projekt eben nur 9 Monate dauern. D.h. die prozentuale Verteilung muss gestaucht werden, also in jedem Monat fallen prozentual etwas mehr Stunden an.
So kann es sein, dass bei dieser Tätigkeit zu Beginn des Projektes recht viel Arbeit inverstiert werden muss, dann ist einige Zeit eher wenig (da auf anderes gewartet wird), aber am Ende nimmt der Aufwand wieder zu.
Dies soll sichtbar sein auch bei verkürzter Laufzeit.
Kann man das Problem soweit verstehen?
Ich habe eine iteration, aber diese stimmt nicht, da bei manchen Änderungen die Anzahl der Ergebnismonate nicht korrekt befüllt wird.
Hat jemand eine Idee?
Oder auch nur eine Anregung wie ich nach sowas suchen könnte.
Ich kann gerne auch mal eine Beispieldatei erstellen, damit man das problem erkennt.
Danke

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ist doch ganz einfach
10.05.2016 07:44:05
lupo1
so wie Du es beschreibst - und so viel, wie Du dabei nicht spezifizierst - bedeutet das:
Vorher:
Datum Mannstunden
01.01. 50
02.01. 70
:
31.12. 10
Nachher:
Datum Mannstunden
01.01. 66
02.01. 93
:
30.09. 13
Du multiplizierst also alle Stunden mit 4/3 und hörst 1/4 vorher auf.

Anzeige
Denkfehler Gleichverteilung
10.05.2016 08:10:53
lupo1
Für meine Annahme gab es im wegfallenden letzten Quartal auch genau 1/4 der Arbeit des Projekts. Das ist aber ja nicht so.
Außerdem soll ja das Gebirge als ganzes um ein Viertel gestaucht werden, nicht die bisherigen Werte skaliert.
Das ist nicht so trivial ... ich versuche mal zu basteln.

Anzeige
Korrektur 1
10.05.2016 09:29:46
lupo1
richtig ist:
C2: =(E$2>=A2)*
(SUMME(BEREICH.VERSCHIEBEN(B$2;;;KÜRZEN(ZEILE(A1)*$F$2)))+
REST(ZEILE(A1)*$F$2;1)*INDEX(B:B;ZEILE(A1)*$F$2+2)-SUMME(C$1:C1))
[statt falsch
C2: =(E$2>=A2)*
(SUMME(BEREICH.VERSCHIEBEN(B$2;;;KÜRZEN(ZEILE(A1)*$F$2)))+
REST($F$2;1)*INDEX(B:B;ZEILE(A1)*$F$2+2)-SUMME(C$1:C1))
mit dem vergessenen ZEILE(A1)*]
bitte runterkopieren

Anzeige
AW: Korrektur 1
10.05.2016 15:35:14
raspi
Super, das sieht ja klasse aus.
Zumindest optisch sieht das genauso aus wie benötigt.
Das muss ich mir noch genauer analysieren und dann nach VBA transformieren.
Wenn ich deine Formel ansehe, muss ich feststellen, dass ich viele Funktionen in Excel weder kenne, noch sinnvoll anwenden kann :-( Danke für solche Hilfe.
Es sieht aber so aus, als hätte ich meine Iteration hierzu in VBA ähnlich aufgebaut, aber in die unterschiedlichen Fälle (mit dem Rest) noch nicht sauber verarbeitet.
Hast du eine mögliche VBA Lösung ebenfalls parat?

Anzeige
AW: Korrektur 1
10.05.2016 19:15:41
raspi
Nochmals vielen Dank für den prompten Vorschlag.
Allerdings gibt es noch 2 Fragestellungen, die hier noch nicht enthalten sind und die ich mir mit der Vorlage leider noch nicht beantworten kann.
- wie muss geändert werden, wenn die neue Zeitspanne länger ist, also gestreckt statt gestaucht werden soll ?
- und das größere Problem. Der Beginn des "kürzeren" Zeitraums liegt nicht zu Beginn, sondern irgendwo dazwischen. Also in deinem Beispiel soll der Zeitraum auf 5 Monahte gestaucht werden, aber ab April beginnen.
Ich denke, dass es dann mit einer Tabellen-Lösung, wie du sie hier toll erstellt hast, eng werden dürfte, und man doch auf Schleifen in VBA angewiesen ist.
Noch eine Idee dafür?
Vielen Dank

Anzeige
Deine Wünsche noch mal gelistet
11.05.2016 07:29:31
lupo1
1. Streckung
2. Stauchung zum Ende hin (ergibt ja auch mehr Praxis-Sinn, da oft Deadlines einzuhalten sind)
3. Erklärung der Formel
Nr. 3 ziehe ich mal vor:
=(E$2>=A2)
*(
SUMME(BEREICH.VERSCHIEBEN(B$2;;;KÜRZEN(ZEILE(A1)*$F$2)))+
REST(ZEILE(A1)*$F$2;1)*INDEX(B:B;ZEILE(A1)*$F$2+2)
-SUMME(C$1:C1)
)
(E$2>=A2) sorgt dafür, dass nach dem (stauchenden) eingestellten Datum auf jeden Fall nur 0 gerechnet wird
BEREICH.VERSCHIEBEN(B$2;;;KÜRZEN(ZEILE(A1)*$F$2)) spannt die Tage von Beginn her so weit auf, wie es der Stauchungsfaktor verlangt - und lässt "angebrochene Enden" noch liegen. Die Leistungen darin werden mit SUMME addiert.
+REST(ZEILE(A1)*$F$2;1)*INDEX(B:B;ZEILE(A1)*$F$2+2) packt dann die angebrochene Leistung multipliziert mit der Stauchung dazu
-SUMME(C$1:C1) macht es mir einfach: Ich ziehe die Summe alles vorherigen einfach ab und spare mir dafür die Behandlung angebrochener Anfänge. Persönlich hasse ich -SUMME(C$1:C1), weil man das eigentlich mit einer Hilfsspalte erledigt, damit Excel bei großen Volumina weniger rechnet. Aber ich habe hier mal die Augen zugemacht.

Anzeige
2. Stauchung zum Ende hin
11.05.2016 07:44:48
lupo1
Das ist einfach zu beantworten:
Vorgeschichte: Die Datümer stehen da - eigentlich eher zu verstehen - als lfd. Tage. Denn oft wird ja an WE und FT nicht gearbeitet.
Also kommst Du für Punkt 2. wie folgt zum Ziel:
a) Betrachtet wird nach wie vor das Kalenderjahr
b) Statt nun bis zum 30.9. fertig werden zu müssen, lautet die Aufgabe, erst am 1.4. beginnen zu können
c) Feinjustierung: Vor dem 1.4.16 liegen 91 Tage, nach dem 30.9.16 liegen 92. Daher musst Du nun einen Tag dazugeben: 1.10.2016
d) Das Ergebnis (gezeigt ab 1.1.16) verschiebst Du nun einfach um 91 Tage (auf den 1.4.16)
Also brauche ich nicht unnötig eine zweite Formel für die Zum-Ende-Hin-Stauchung.

Anzeige
2. Stauchung allgemein (nicht Ende/Anfang)
11.05.2016 07:59:23
lupo1
Allgemein stauchst Du somit so:
a) Du hast ungestaucht 366 Tage in 2016
b) Vom 15.3. bis 3.11.2016 sind 233 Tage Differenz (also 234 betroffene Tage).
c) Rechne nun 1.1.2016 + 233. Das ergibt 21.8.2016
d) Diese 21.8.2016 gibst Du als Enddatum ein.
e) Die resultierenden Zahlen shiftest Du (gedanklich) vom 1.1.2016 auf den 15.3.2016.
Ein bisschen wie mit dem Rechenschieber. Eine neue Formel braucht es dafür nicht.

Anzeige
1. Streckung
11.05.2016 08:21:20
lupo1
Die Streckung ergibt sich wie folgt:
a) Lasse Deine Datümer in A nur so weit laufen, wie die Ausgangsdaten bestehen. ENTF sie dahinter,
auch die dazughörigen Leistungen in B.
Beispiel: Lasse 9.1.2016 als letzten Tag stehen
c) Trage das gestreckte Enddatum (gelb) ein
Beispiel: 11.1. 2016
d) In C siehst Du den Fehler #BEZUG!
e) Entferne in C2 mit ENTF die Formel. Falls dahinter noch #BEZUG! bestehen bleibt, dann auch in C3 usw.
f) Kontrolliere immer G2 und H2 (Sum Wert und Sum Stauch). Sie müssen gleich sein.
Auch hier musste ich die Formel also nicht anpassen.

Anzeige
Erläuterung super, aber...
11.05.2016 22:02:53
raspi
Tja,
was soll ich sagen. Zuerst einmal Danke für bisher.
Ich lese deine Erläuterungen, verstehe sie im Wesentlichen (vom Ansatz her), strauchle aber beim Adaptieren auf mein konkretes Problem. Allein schon das Transformieren von Spalten- in Reihenanordnung bereitet mir Probleme, da ich die Syntax noch immer nicht komplett verstehe von diesen Funktionen. D.h. hier muss ich doch noch sehr viel lernen.
Und vor allem werde ich nicht darum herum kommen, dies als Schleifen in VBA zu schreiben, da die hier angefragte Stauchung nur ein Teil des Gesamtpaketes ist und vor allem für x "Manngebirge" durchzuführen ist, die auch veränderlicher Anzahl sind.
Von daher, werde ich
a) solche Funktionen verstehen lernen müssen
b) versuchen, das zu übersetzen
Aber falls es hier jemanden gibt, der die oben erwähnte Formel ebenso schnell in ein Script verwandeln kann, wäre dies super.

Anzeige
AW: 1. Streckung
14.05.2016 19:05:45
Michael
Hi zusammen,
ich schleiche schon ein paar Tage um den Thread herum, habe mir aber erst heute die Beispieldatei angesehen.
Es hat etwas gedauert, bis ich 1. Streckung begriffen habe, sie hat denn doch funktioniert, enthält aber zwei unschöne Sachen:
a) der Graph der Stauchung beginnt erst ab dem 2. Tag und
b) der Graph wird nur bis zum 9.1. angezeigt, da die weiteren Werte ja gelöscht wurden: d.h. man sieht nicht, wie es bis zum 11.1. weitergeht.
Bei a) bin ich mir nicht schlüssig, was mathematisch dahintersteckt und b) würde eine Änderung der Formel bedeuten: die Abfrage auf (E$2>=A3) ist dann so nicht einsetzbar.
Gerade beim vorhandenen Beispiel touchiert die Stauchung am 6.1. die x-Achse, was rechnerisch zwar stimmen mag, aber beide Graphen unterscheiden sich doch deutlich; eventuell ist das Ganze mit reinen Diagramm-Mitteln gar nicht machbar oder erfordert eine "andere" Interpolation.
Das grundlegende Problem ist, daß man jedes Polynom beliebig stauchen und strecken kann, aber die Daten liegen halt tageweise vor. Man bräuchte quasi eine zweite X-Achse für die korrekte Darstellung der Punkte "zwischen" den Tagen.
Geht das?
Schöne Grüße,
Michael

Anzeige
AW: 1. Streckung
15.05.2016 21:10:24
Michael
Hi,
es hat mir keine Ruhe gelassen; insbesondere wollte ich erst mal begreifen, wie man es evtl. angehen könnte:
Userbild
Der Code sieht dann überschaubar aus:
Option Explicit
Sub stauchen()
Dim aOrig As Variant, aWunsch As Variant, aRech#()
Dim iO&, iW&, iR&, i&, j&, p&
aOrig = Range("L5:L8")
aWunsch = Range("M5:M7")
iO = UBound(aOrig)
iW = UBound(aWunsch)
iR = iO * iW
ReDim aRech(1 To iR, 1 To 1)
p = 1
For i = 1 To iO
For j = 1 To iW
aRech(p, 1) = aOrig(i, 1) / iW
p = p + 1
Next
Next
Range("O5").Resize(iR) = aRech ' nur zum Testen
' Stop
p = 1: j = 0
For i = 1 To iR
aWunsch(p, 1) = aWunsch(p, 1) + aRech(i, 1)
j = j + 1
If j > iW Then p = p + 1: j = 0
Next
Range("M5").Resize(iW) = aWunsch
End Sub
Die Datei: https://www.herber.de/bbs/user/105578.xlsm
Falls die Idee prinzipiell so richtig ist, kann man sich dranmachen, es a) bedienbar zu machen für variable Bereiche bzw. Tage und sich b) überlegen, wie mit "0"en umzugehen ist.
Letzteres sollten ja sicher erhalten bleiben (2 Tage auf Kundenreaktion warten o.ä.), aber das ist etwas tricky.
Schöne Grüße,
Michael

Anzeige
AW: 1. Streckung
15.05.2016 21:47:45
raspi
Sehr interessant, dass dieses Problem hier noch jemanden anspricht.
Bin ich doch noch immer dran, das elegant in den Griff zu kriegen.
- Ich habe den Ansatz von Lupo1 nach etlichen Anläufen für mich umsetzen können, indem ich seine Formel nach VBA transferiert hatte. Allerdings habe ich den Ansatz noch nicht bis ins Detail verstanden (schäme mich) und musste daher teilweise auch auf Blattfunktionen zurückgreifen.
Zudem funktioniert das mit der Streckung ebenfalls noch nicht ohne weiteres.
Deinen Gedanken hatte ich so auch schon durchgespielt, war aber in VBA nicht so firm, als dass ich es hätte umsetzen können. Daher schon mal danke auch für deine Vorlage.
Allerdings konnte ich das mit der Streckung in deinem Beispiel auch noch nicht erfolgreicg nachvollziehen/umsetzen. Wie müßte man das anegehen in deiner Beispieldatei?
Und ja, es sollen natürlich 0-Werte enthalten sein können.
Ich lade hier mal meine Ausgangstabelle rein, um den Aufbau bei meinem Problem (so auch das transformieren von Spalten- auf Zeilenweise umzusetzen).
https://www.herber.de/bbs/user/105579.xlsx
Die Stauchung erfolgte hier nach dem Ansatz von Lupo1
Vielleicht fällt dir noch ein, wie man dein Beispiel vervollständigen kann

Anzeige
AW: 1. Streckung
19.05.2016 11:23:34
Michael
Hi raspi,
leider kann man die Frage nicht mehr im Forum bearbeiten.
Deshalb würde ich vorschlagen, daß Du die Frage erneut stellst, dann können wir da weiterdiskutieren; oder Du schickst mir ne mail an:
https://www.herber.de/cgi-bin/profile/call_profile.pl?user=1857094
So oder so interessiert mich die Problematik.
Schöne Grüße,
Michael

Anzeige
Formel zu hoch für mich
10.05.2016 22:23:02
raspi
Nochmals ich...
Deine Formel ist ja extrem trickreich und daher super kurz, nur....
Ich habe versucht, das Ganze zu verstehen und nachzuvollziehen, bin aber kläglich gescheitert.
Das beginnt schon damit, dass ich die einzelnen Funktionen in diesem Zusammenhang oft gar nicht kenne.
Und das zu adpatieren auch die og. Zusatzfragen, gelingt mir schon gar nicht.
Falls du also Erläuterungen zu deiner Formel oder gar equivalent in VBA hättest... wäre supertoll.
Anzeige
;
Anzeige

Infobox / Tutorial

Manngebirge strecken und stauchen in Excel


Schritt-für-Schritt-Anleitung

Um das "Manngebirge" in Excel zu strecken oder zu stauchen, kannst du folgende Schritte befolgen:

  1. Daten strukturieren: Erstelle eine Tabelle in Excel mit den Spalten für Datum und Mannstunden. Zum Beispiel:

    Datum      | Mannstunden
    ------------------------
    01.01.2023 | 50
    02.01.2023 | 70
    ...
    31.12.2023 | 10
  2. Stauchungsfaktor berechnen: Bestimme den Faktor, mit dem die Mannstunden multipliziert werden sollen. Wenn du z.B. die Laufzeit von einem Jahr auf 9 Monate verkürzt, ist der Stauchungsfaktor 9/12 oder 0.75.

  3. Formel anwenden: Setze die folgende Formel in die Zelle ein, in der die gestauchten Mannstunden angezeigt werden sollen (z.B. in C2):

    =B2 * (9/12)

    Ziehe die Formel nach unten, um sie auf alle Daten anzuwenden.

  4. Diagramm erstellen: Erstelle ein Diagramm, um die Ergebnisse visuell darzustellen. Wähle die Spalten für Datum und die neuen Mannstunden aus und füge ein Liniendiagramm hinzu.


Häufige Fehler und Lösungen

  • Fehler: #BEZUG!: Dies kann auftreten, wenn sich die Daten nicht in der richtigen Reihenfolge befinden oder die Formel nicht korrekt angepasst wurde. Überprüfe, ob die Daten in den richtigen Zellen stehen und die Formeln auf die richtigen Referenzen zeigen.

  • Fehler bei der Stauchung: Wenn die Mannstunden nach der Stauchung nicht sinnvoll erscheinen, überprüfe deine Berechnung des Stauchungsfaktors. Er sollte auf die neue Zeitspanne basieren.


Alternative Methoden

Eine alternative Methode zur Berechnung des "Manngebirges" ist die Verwendung von VBA. Hier ist ein einfacher VBA-Code, um die Mannstunden zu stauchen:

Sub Stauchen()
    Dim i As Integer
    Dim Stauchungsfaktor As Double
    Stauchungsfaktor = 0.75 ' Beispiel für 9 Monate statt 12
    For i = 2 To 13 ' Angenommen, die Daten stehen in den Zeilen 2 bis 13
        Cells(i, 3).Value = Cells(i, 2).Value * Stauchungsfaktor
    Next i
End Sub

Praktische Beispiele

Angenommen, du hast folgende Ausgangsdaten:

Datum Mannstunden
01.01.2023 50
02.01.2023 70
03.01.2023 60

Wenn du die Projektzeit auf 9 Monate stauchst, wird die Berechnung wie folgt aussehen:

Datum Mannstunden Gestauchte Mannstunden
01.01.2023 50 37.5
02.01.2023 70 52.5
03.01.2023 60 45

Tipps für Profis

  • Nutze Excel-Funktionen wie VERKETTEN oder TEXT zur besseren Formatierung der Daten.
  • Experimentiere mit Diagrammtypen, um eine anschauliche Darstellung des "Manngebirges" zu erhalten.
  • Halte deine Daten sauber und gut strukturiert, um Fehler in den Berechnungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Mannstunden für ein längeres Projekt stauchen?
Du kannst denselben Ansatz verwenden, indem du den Stauchungsfaktor entsprechend anpasst. Wenn das Projekt beispielsweise auf 15 Monate gestreckt werden soll, wäre der Faktor 15/12.

2. Gibt es eine Vorlage für die Berechnung von Manngebirgen?
Ja, im Forum wurden einige Vorlagen geteilt, die du als Grundlage verwenden kannst. Achte darauf, die Daten an deine spezifischen Anforderungen anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige