Herbi, dem Bremser
30.09.2004, 11:48 |
OT @Uwe The MakroKing Of M$-Excel, Bienenproblem Thread gesperrt |
-->Moin Uwe,
ich habe noch eine Excel-Makro-Unkenntnis!
Im angeführten Beispiel sollen 5 Zellen einer Spalte oberhalb des Summenergebnisses namens"SummSumm" summiert werden
und die Konstante"-5" soll eine Variable werden.
Wie bekomme ich einen dynamisch generierten Summenraum hin?
Hast du eine Idee?
Beispiel:
Range("SummSumm").FormulaR1C1 ="=SUM(R[-5]C:R[-1]C)"
Dank im Voraus
Herbi
|
Uwe
30.09.2004, 15:49
@ Herbi, dem Bremser
|
Re: OT @Herbi: zum Bienenproblem |
-->Hallo, Herbi,
ob Du mit der Lösung glücklich werden wirst, weiß ich nicht zu sagen, denn vermutlich werden sich daraus neue Fragen ergeben, die wir aber gerne an der konkreten Problemstellung erörtern können (ggf. kann Elli so freundlich sein und Dir meine Email-Adresse übermitteln, wenn Du sie abfragst).
Wenn Du einen dynamisch begrenzten Suchraum einsetzten möchtest, so ist die Festlegung der Grenzen auf vile Art möglich. Mindestens bräuchtest Du für das geschilderte Problem eine Speicherzelle (Tabellenblatt oder Programmvariable) die den Grenzwert aufnehmen kann. In meinem Löungsansatz habe ich angenommen, dass dieser Wert aus der Zelle A2 zu entnehmen ist. Dann lautet die Lösung:
ActiveCell.FormulaR1C1 ="=SUM(R[-<font color=red>" & Range("A2") &"</font>]C:R[-1]C)"
Die Formel-Zeichenkette wird also an der betreffenden Stelle zerschnitten, und es wird der Name des Speicherplatzes eingefügt. Als Kitt dient das &-Zeichen (5 wird zu: <font color=red>" & Range("A2") &"</font>).
Jedoch kann es möglich sein, dass eine VBA-Erweiterung, die eine Schleife enthält, das übersichtlichere Programm liefert, denn mit diesem o.g. Makro wird immer in die aktive Zelle die Zellenformel =SUM(...) geschrieben, wobei jeweils das Summenergebnis, gebildet aus den Werten in den sich darüber befindenen Zellen der Spalte, angeschrieben wird.
Viel Erfolg beim Umsetzen und Gruß,
Uwe |
Herbi, dem Bremser
30.09.2004, 20:38
@ Uwe
|
Re: OT @Uwe: zum Bienenproblem ** alles paletti im Bienenstock |
-->>ob Du mit der Lösung glücklich werden wirst, weiß ich nicht zu sagen
>ActiveCell.FormulaR1C1 ="=SUM(R[-" & Range("A2") &" C:R[-1]C)"
>Die Formel-Zeichenkette wird also an der betreffenden Stelle zerschnitten..
Moin Uwe, , habe ich gerade mit der Integer-Variablen"Biene" verändert von
Range("SummSumm").FormulaR1C1 ="=SUM(R[-5]C:R[-1]C)"
Range("SummSumm").FormulaR1C1 ="=SUM(R[-" & Biene &"]C:R[-1]C)"
und siehe da: die Biene summiert.
Danke für den Dreh des"Häckchenoben - Ampersand - Ampersand - Häckchenoben".
Wo lernt man denn sowas?
An diesem Forum weiß man eben, was man hat - auch wenn der POG in € manchmal nur geringfügig variiert ;-)
Gruß
Herbi
|
Uwe
01.10.2004, 23:47
@ Herbi, dem Bremser
|
Re: OT @Herbi: zum Bienenproblem ** schön, dass es geklappt hat... |
-->>Herbi:[i] Wo lernt man denn sowas?[/i]
Eigentlich sollte ich jetzt auf meine EXCEL-Lehrbriefe verweisen, die man günstig beziehen kann; doch es gibt sie nicht. [img][/img]
Zu der von Dir vorgestellten Makro-/VBA-Zeile ist zu bemerken, dass die Eigenschaft .FormulaR1C1 als Rechtswert ein String erwartet. Für diesen String gelten die entsprechenden Verkettungsvorschriften.
Hier nun noch als Beispiel die Berechnung des gleitenden Durchschnittes einer Zahlenreihe. Die Berechnung läßt sich zwar mit dem Zellenbefehl MITTELWERT(BEREICH.VERSCHIEBEN(RefZelle, ZeilenOffs, SpaltenOffs, AnzZeilen, AnzSpalten)) ebenso umsetzen, doch soll hier die"dynamische" Bereichbeschreibung in einer Zellen-Summenformel dargestellt werden:
<html><head><title>Excel Jeanie HTML</title></head><body><table><tr style="vertical-align:top; text-align:center;"><tr><td>Gleitender Durchschnitt</td></tr><tr><td><table border=1 cellspacing=0 cellpadding=0 style="font-family:Arial,Arial; font-size:10pt; padding-left:2pt; padding-right:2pt;"> <style type ="text/css"> th {font-weight:normal} </style> <colgroup><col width=30 style="font-weight:bold;"><col width=40.999998975 ><col width=53.99999865 ><col width=64.999998375 ><col width=57.99999855 ></colgroup><tr style="background-color:#cacaca; text-align:center; font-weight:bold; font-size:8pt;"><td>Â </td><td>A</td><td>B</td><td>C</td><td>D</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >2</td><td style="text-align:center;">Â </td><td style="text-align:center;">Â </td><td style="text-align:center;">Â </td><td style="background-color:#ffff00; text-align:center;">5</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >3</td><td style="text-align:center;">Â </td><td style="text-align:center;">Â </td><td style="text-align:center;">Wert</td><td style="text-align:center;">GD(5)</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >4</td><td style="text-align:center;">1</td><td style="text-align:center;">Tag 1</td><td style="text-align:center;">100,00</td><td style="text-align:center;">Â </td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >5</td><td style="text-align:center;">2</td><td style="text-align:center;">Tag 2</td><td style="text-align:center;">102,01</td><td style="text-align:center;">Â </td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >6</td><td style="text-align:center;">3</td><td style="text-align:center;">Tag 3</td><td style="text-align:center;">99,58</td><td style="text-align:center;">Â </td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >7</td><td style="text-align:center;">4</td><td style="text-align:center;">Tag 4</td><td style="text-align:center;">99,69</td><td style="text-align:center;">Â </td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >8</td><td style="text-align:center;">5</td><td style="text-align:center;">Tag 5</td><td style="text-align:center;">102,57</td><td style="text-align:center;">100,77</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >9</td><td style="text-align:center;">6</td><td style="text-align:center;">Tag 6</td><td style="text-align:center;">102,47</td><td style="text-align:center;">101,26</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >10</td><td style="text-align:center;">7</td><td style="text-align:center;">Tag 7</td><td style="text-align:center;">102,25</td><td style="text-align:center;">101,31</td></tr><tr height=17 ><td style="font-size:8pt; background-color:#cacaca; text-align:center;" >11</td><td style="text-align:center;">8</td><td style="text-align:center;">Tag 8</td><td style="text-align:center;">103,11</td><td style="text-align:center;">102,02</td></tr></table><table style="font-family:Arial; font-size:10pt; border-style: groove ;border-color:#00ff00;background-color:#FFFCF9;"><tr><td>Formeln der Tabelle</td></tr><tr><td><table style="font-family:Arial; font-size:10pt;">D3: =VERKETTEN("GD("&D2&")")
D4: =WENN(A4<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A4+3&":C"&A4+4-$D$2)</span>)</span>/$D$2)
A5: =A4+1
C5: =C4+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D5: =WENN(A5<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A5+3&":C"&A5+4-$D$2)</span>)</span>/$D$2)
A6: =A5+1
C6: =C5+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D6: =WENN(A6<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A6+3&":C"&A6+4-$D$2)</span>)</span>/$D$2)
A7: =A6+1
C7: =C6+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D7: =WENN(A7<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A7+3&":C"&A7+4-$D$2)</span>)</span>/$D$2)
A8: =A7+1
C8: =C7+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D8: =WENN(A8<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A8+3&":C"&A8+4-$D$2)</span>)</span>/$D$2)
A9: =A8+1
C9: =C8+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D9: =WENN(A9<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A9+3&":C"&A9+4-$D$2)</span>)</span>/$D$2)
A10: =A9+1
C10: =C9+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D10: =WENN(A10<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A10+3&":C"&A10+4-$D$2)</span>)</span>/$D$2)
A11: =A10+1
C11: =C10+VORZEICHEN(0,5-ZUFALLSZAHL<span style=' color:008000; '>()</span>)*3*ZUFALLSZAHL()
D11: =WENN(A11<$D$2;"";SUMME<span style=' color:008000; '>(INDIREKT<span style=' color:#0000ff; '>("C"&A11+3&":C"&A11+4-$D$2)</span>)</span>/$D$2)
</table></td></tr></table></td></tr><tr><td>Â </td></tr></tr></table>
Nun kann in der Zelle D2 der Wert eingetragen werden, der für die GD-Berechnung zugrunde gelegt werden soll und - bei eingeschalteter Option Extra -> Optionen -> Berechnung: Automatisch - es werden die Werte der Spalte D ab der Zeile 4 sofort berechnet (ohne Makro!).
Der Befehl Indirekt bewirkt, dass zuerst die Bereichsbeschreibung ausgewertet wird, bevor sie an die Summenfunktion übergeben wird.
Gruß,
Uwe
P.S.
Werkzeug zur EXCEL-Tabellenauszug mit Zellenformeldarstellung:
<span style="font-family:'Arial'; font-size:9pt;font-weight:bold;">Diagramm - Grafik - Excel Tabellen einfach im Web darstellen  <a style ="font-family:'Arial'; font-size:9pt; color:#FCF507; background-color:#1506F7; font-weight:bold;" href='http://www.haserodt.de/ejh_do/ex_jean_info.htm' target='blank'>  Excel Jeanie HTML  3.0    Download  </a></span> |