Dieser Beitrag enthält Links zu zwei Beispiel-xls-Dateien, die sowohl VBA - als auch Formel-basierte Berechnungen für den Indikator MACD oder Moving Average Convergence Divergence zeigen. Beide Dateien enthalten den exakt gleichen Satz von Open High Low Close Daten. Die Formel basierte Version ist einfacher zu verstehen und dient als eine Möglichkeit, um zu überprüfen, dass der VBA-Code, den ich geschrieben habe korrekt ist. Beide Methoden geben das gleiche Ergebnis. Der Hauptvorteil der Verwendung von VBA ist, dass die Parameter für MACD einfach aus den Eingabefeldern geändert werden können. Darüber hinaus zeigt die VBA-Methode nur das Endergebnis, anstatt fünf Spalten aufzunehmen. Die VBA-basierte Version kann hier heruntergeladen werden. Die Formel-Version kann hier heruntergeladen werden. Unten ist der Code aus der VBA-basierten Version. Sub ETmacd () geschrieben von Exceltrader exceltrader. net Dim EMAslow As Double. EMAf As t Wie doppelt. Ws Als Arbeitsblatt, LR Als Integer Dim eMaF () As Double. EMaS () Als Doppel. EMAdif (), emaPer () Als Doppel. MacDper als Doppel. COUNT As Integer Dim Datarange As Range Dim ExPSlowWeight As Double Dim ExPFastWeight As Double Dim PerWeight As Double 160160The unter drei Zeilen entweder hier geändert, oder die inputbox Linien aufgefordert werden, die Auskommentierung werden können 160160The Werte settings.160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160 MACD sind. EMAslow 13 InputBox (Prompt: Geben Sie Macd Zeiteinstellungen, Titel:. MACD SLOW, Default: 13) EMAfAst 5 InputBox (Prompt:. Geben Sie Macd Schnelleinstellungen, Titel: MACD Schnell, Standard: 5) MacDper 6 InputBox (Prompt: Geben Sie Macd Zeitraum Einstellungen, Titel:. MACD Zeitraum, Standard: 6) ExPSlowWeight 2 (EMAslow 1) PerWeight 2 (MacDper 1) ExPFastWeight 2 (EMAfAst 1) Set ws ThisWorkbook. Worksheets (VBA) oder genau zum Beispiel Blattnamen verwenden ThisWorkbook. worksheet ( Sheet1) langsam 160.160.160.160 Mit ws 160160160160LR. Cells (Rows. Count, A).End (xlUp).Row 160160160160160160160160 For Each Datarange In ws. Range (.Cells (2, A). Die Zellen (LR, A)) 160160160160160160160160coUnt Datarange. Zeile 1 160160160160160160160160 füllen die langsame eMA Array 160160160160160160160160 ReDim Preserve Emas (1 bis COUNT) 160160160160160160160160160160160160160160160160 Wenn COUNT EMAslow 1 dann den ersten Wert 160160160160160160160160160160160160160160160160160160160160 erhalten, die die einfachen gleitenden Durchschnitt 160160160160160160160160160160160160160160160160160160160160 Emas ist (COUNT) Application. Average (ws. Range (.Cells ( 2, E). Die Zellen (COUNT, E))) 160160160160160160160160160160160160160160160160 ElseIf COUNT EMAslow Dann 160160160160160160160160160160160160160160160160160160160160eMaS (COUNT) (.Cells (COUNT, E) ExPSlowWeight) (EMAs (COUNT - 1) (1 - ExPSlowWeight)) 160160160160160160160160160160160160160160160160 End If Next 160160160160160160160160 Datarange schnell 160160160160160160160160 For Each Datarange In ws. Range (.Cells (2, A). die Zellen (LR, A)) 160160160160160160160160coUnt DataRange. Row 1 160160160160160160160160 die langsame eMA Array füllen 160160160160160160160160 ReDim EMAF Preserve (1 bis COUNT) 160160160160160160160160160160160160160160160160 Wenn COUNT EMAfAst 1 Dann wird die 160160160160160160160160160160160160160160160160160160160160 erhalten erste Wert, den der einfache gleitende Durchschnitt ist 160160160160160160160160160160160160160160160160160160160160 EMAF (COUNT) Application. Average (ws. Range (.Cells (2, E). Cells (COUNT, E))) 160160160160160160160160160160160160160160160160 ElseIf COUNT EMAfAst Dann 160160160160160160160160160160160160160160160160160160160160eMaF (COUNT) (.Cells ( COUNT, E) ExPFastWeight) (EMAF (COUNT - 1) (1 - ExPFastWeight)) 160160160160160160160160160160160160160160160160 End If 160160160160160160160160 Weiter Datarange 160160160160160160160160 ReDim Preserve EMAdif (EM so niedrig UBound (EMAF)) 160160160160160160160160160160160160 Zähl - EM As low 1 Um UBound (EMAF ) 160160160160160160160160160160160160160160160160EMAdif (COUNT) EMAF (COUNT) - Emas (COUNT) 160160160160160160160160160160160160 Nächste COUNT MacD Zeitraum 160160160160160160160160 Dim x As Integer. Y Als Integer. Z Als Integer. AVEE As Double 160160160160160160160160y EMAslow MacDper - 1 160160160160160160160160160160160160 Für XY UBound (EMAdif) - 2 160160160160160160160160160160160160160160160160 erhalten die SMA für den ersten Wert 160160160160160160160160160160160160160160160160 Wenn xy Dann 160160160160160160160160160160160160160160160160160160160160160160160160 Für z EMAslow 1 Um EMAslow MacDper160160 (EMAslow MacDper - 1) 160160160160160160160160160160160160160160160160160160160160160160160160Ave Ave EMAdif (z) 160160160160160160160160160160160160160160160160160160160160160160160160 Weiter z 160160160160160160160160160160160160160160160160160160160160160160160160 ReDim emaPer (x LR) 160160160160160160160160160160160160160160160160160160160160160160160160emaPer (x) Ave MacDper 160160160160160160160160160160160160160160160160 ElseIf xy Dann 160160160160160160160160160160160160160160160160emaPer (x) (EMAdif (x 1) PerWeight) (emaPer (x - 1) (1 - PerWeight)) 160160160160160160160160160160160160160160160160 End If 160160160160160160160160160160160160 Weiter x 160160x Empty: y Leer: z Leere 160160x LBound (emaPer) 160160y UBound (emaPer) 160160 Für zx y - 1 160160.Cells (z 1, J) EMAdif (z 1) - emaPer (z) 160160 Next z End With End Sub geschrieben von Exceltrader exceltrader. net Kebaya Mwamba sagt: itjockey, Diese VBA-Version zeigt die MACD, Signalleitung und Histogramm. Die Formel basierte Version zeigt auch diese Werte. Der Code geändert hat, ist die Zugabe des 7. und 8. Zeile unter 160160x Leer: y Leer: z Leere 160160x LBound (emaPer) 160160y UBound (emaPer) 160160.Cells (x, L) MACD Histogramm. Zellen (x, K) Signalleitung. Zellen (x, J) MACD 160160 Für zx Zu y - 1 160160.Zellen (z 1, L) EMAdif (z 1) - emaPer (z) 160160.Zellen (z 1, K) emaPer (z) 160160.Zellen Hallo, ich versuche von EMAslow zu wechseln 13 InputBox (Eingabeaufforderung: Macd Slow Einstellungen eingeben., Titel: MACD SLOW, Voreinstellung: 13 Geben Sie Macd Schnelleinstellungen, Titel:) EMAfAst 5 InputBox (Prompt. MACD Schnell, Standard: 5) MacDper 6 InputBox (Prompt:. Geben Sie Macd Zeitraum Einstellungen, Titel: MACD-Periode, Standard: 6 bis SlowMa InputBox (Prompt: Geben Sie die Slow Moving MA.) FastMa InputBox (Eingabeaufforderung: Geben Sie die Fast Moving MA ein.) MACDtime InputBox (Eingabeaufforderung: Geben Sie die Gesamt-MACD-Periode ein.) Mit 13. 5, 6 Eingang, dann erscheint die Ausgabe sehr unterschiedlich von der vorherigen Sie können die MACD-Einstellungen durch Eingabe Ihrer Einstellungen in Eingabefelder steuern, indem Sie den Code wie folgt ändern: EMAslow InputBox (Eingabeaufforderung: Macd Slow Einstellungen eingeben., Titel: MACD SLOW, Voreinstellung: 13) EMAfAst InputBox (Prompt: Geben Sie Macd Schnelleinstellungen, Titel:. MACD Schnell, Standard: 5) MacDper InputBox (Prompt:. Geben Sie Macd Zeitraum Einstellungen, Titel: MACD-Periode, Standard: 6) ich halte Beispiele zu sehen, wo die Daten statisch. Was ist, wo die Daten ändern sich alle 5 min zum Beispiel und es ist nur eine einzige Zelle, die sich verändert. Müssen Sie dann noch den Wert dieser Zelle in verschiedene Zellen kopieren, damit Sie die Berechnungen durchführen können, um die macd-Werte zu ermitteln. Ich möchte alles in vba machen. Ich möchte nicht Werte in andere Zellen in einem Arbeitsblatt kopieren. Ist dies möglich Ich möchte wissen, ob irgendwelche Fehler auf folgende Codes oder nicht. Haben Sie irgendwelche Vorschläge Vielen Dank im Voraus für alle Vorschläge Fehler. (EmaPer (x - 1) (1 - PerWeight)) Richtig. EmaPer (x1) PerWeight) (emaPer (x) (1 - PerWeight)) wenn ich versuche, Ihre macd vba verwenden und ändern (.Cells (count, E) zum Beispiel in (.Cells (count, M) Zeile ist leer und wird von Programmstart gefüllt werden VBA gibt nonstop Fehler, wo ich falsch gehen in diesem kann dies irgendwie gelöst werdenTable Formel in Excel (Etwas, das ich didn8217t Know Till Gestern) Posted January 28, 2010 3:28 am UTC by Ajay-Tabellenformeln waren etwas, das ich vor kurzem entdeckte. Tatsächlich mein Leser mb kommentiert, dass er es vorzieht, eine Strecke zu einer Tabelle umzuwandeln und dann Tabellenformeln anstelle von benannten Bereichen einzusetzen. Das hat mich neugierig genug, um sie weiter zu erforschen und hier, was ich gelernt habe. Eine Tabelle in Excel Eine Tabelle ist eine Funktion in Excel, die das Formatieren und Analysieren von Datenpunkten in einer Tabelle vereinfacht. In Excel 2007 wurden Tabellen als Erweiterung der Funktion 8216Lists8217 in früheren Versionen eingeführt , Können Sie auch die Tabellenformeln verwenden, um Daten aus einer Tabelle zu extrahieren. Wie erstellt man eine Tabelle In Excel 2007 und höher müssen Sie nur einen bestimmten Bereich in eine Tabelle konvertieren, indem Sie einfach den Bereich auswählen und dann auf die Schaltfläche 8216Table8217 unter der Registerkarte 8216Insert8217 auf dem Farbband klicken. Besser noch, wie unsere Leser Sam darauf hingewiesen, verwenden Sie die Tastenkombination CTRL T. Also, was gut ist die Tabelle für die Formatierung: Völlig ändern Sie das Aussehen und das Gefühl Ihrer Daten mit ein paar Mausklicks Summarize durch Hinzufügen Zeile für Total: Schalten Sie einfach das Kontrollkästchen für 8216Total Row8217 und Sie haben eine neue Zeile direkt unterhalb der Daten eingefügt Set mit den Summen. Nicht nur Summen können Sie beliebige Zelle in dieser Zeile auswählen und aus einer Anzahl von Aggregationsoptionen wie count, min, max auswählen. Export und Freigabe: Exportieren und Freigeben der Tabelle mit anderen Benutzern mithilfe von SharePoint Geben Sie einen Namen für die Tabelle an: Sie können der Tabelle einen bestimmten Namen geben (z. B. 8216SalesData8217) und sie später in Ihren Formeln verwenden. Um der Tabelle einen neuen Namen zu geben, öffnen Sie den 8216Name Manager8217 unter der Registerkarte 8216Formulas8217 und bearbeiten dann den Tabellennamen. Tabellenformeln in Excel 8220Flammende Bisons. Sie machte mir das alles zu lesen, nur um zu zeigen, was eine Excel-Tabelle aussieht 8230 Ich weiß bereits, was es ist, warum don8217t Sie gerade auf den Punkt 8221 Oh Das war unhöflich. Hat niemand jemals sagen, dass Geduld ist eine königliche Tugend Table Formeln lassen Sie Zugriff auf Tabelle in eine einfache und intuitive Art und Weise. Let8217s beginnen mit der Umwandlung eines Bereichs in eine Tabelle. Wenn Sie eine neue Tabelle erstellen, wird Excel mit einem Standardnamen versehen, sagen Sie etwa 8216Table18217. Dies kann nicht am intuitivsten von Namen und Sie können es umbenennen, um etwas anderes, das ist leichter zu merken und für andere zu verstehen. Öffnen Sie die Registerkarte 8216Design8217 und überschreiben Sie den Text in dem 8216Table Name8217-Feld zu etwas wie 8216sales8217. Das öffnet eine ganze neue Schachtel Pralinen. Sie können nun die gesamte Tabelle, einzelne Spalten, Zeilen, Datenbereiche, Kopfzeilen oder Summen in Ihren Formeln verweisen und diese verwenden. Verwenden einer bestimmten Spalte aus der Tabelle in einer Formel Sie wollten den Durchschnitt für alle Elemente in der Spalte 8216Revenue8217 kennen. Geben Sie etwas wie AVERAGE (salesRevenue) in einer Zelle und Lächeln. Die Formel ist so intuitiv, dass sie kaum erklärt werden muss. Indem ich ein Ich bin, lass mich mich sein. Der String 8216salesRevenue8217 verweist auf die Datenpunkte in der Spalte 8216Revenue8217 der Verkaufstabelle. 8216salesTarget8217 hätte auf die Spalte 8216Target8217 derselben Tabelle verwiesen. Wir können jetzt diese wie jede andere Reihe in jeder Excel-Formel. So sind MAX (salesRevenue), LARGE (salesRevenue, 5) und COUNT (salesRevenue) alle gültigen Formeln. Verwenden einer bestimmten Zeile aus der Tabelle in einer Formel What8217s gut für eine Spalte ist gut für die Zeile. Format, jedoch unterschiedlich. Um auf eine Zeile in einer Tabelle zu verweisen, verwenden wir das Symbol. Wenn Sie also auf die 10. Zeile der Tabelle verweisen möchten, schreiben Sie den Umsatz in jeder Zelle in der 10. Zeile. So etwas wie countif (Verkäufe, 8221ltgt8221) würde Ihnen Anzahl der nicht-leeren Zellen in der bestimmten Zeile der Tabelle geben. Wenn Sie dieselbe Formel in die unmittelbar darunter liegende Zelle kopieren, werden die entsprechenden Werte aus der nächsten Zeile 8211 zurückgegeben, obwohl die Formel hasn8217t geändert wurde. Verwenden der gesamten Tabelle in einer Formel What8217s gut für eine Spalte und Zeile muss gut für die Tabelle sein Um sich auf die gesamte Tabelle zu beziehen, verwenden Sie. SalesAll Um nur auf den Datenteil der Tabelle zu verweisen, verwenden Sie. SalesData Um auf die Header zu verweisen, verwenden Sie. SalesHeaders Verwendung der SUBTOTAL-Formel mit der Tabelle Ein weiteres interessantes Merkmal der Tabelle ist die Verwendung der SUBTOTAL-Funktion. Die SUBTOTAL-Formel hat zwei Teile 8211 die erste gibt die Formel für die Aggregation an, und die zweite enthält den zu verwendenden Bereich. Somit würde SUBTOTAL (9, A1: A10) die Summe des Bereichs von A1: A10 ergeben, während SUBTOTAL (1, A1: A10) den Durchschnitt für den gleichen Bereich liefern würde. Wenn Sie die Excel-Tabelle zurückgeben, können Sie über die gesamte Tabelle (oder einen Teil davon) die Werte unter Verwendung der SUBTOTAL-Formel zusammenfassen und mit dem Verweis auf eine bestimmte Zeile, Spalte oder die gesamte Tabelle versehen. Genau wie im Beispiel oben, können Sie den Durchschnitt der Spalte 8216Revenue8217 erhalten, indem Sie SUBTOTAL (1, salesRevenue) verwenden. Wenn Sie bemerkten, als wir die Option 8216Total Row8217 aktivieren, wurde eine neue Zeile mit der Summe für Spalten der Tabelle hinzugefügt. Wir können nun vorgehen und die Formeln mit einer der oben gezeigten Formeloptionen ändern. Die Summen beschränken sich also nicht auf das Summieren, sondern können sehr gut auf Mittelwerte, Min, Max, Varianz usw. ausgedehnt werden. Verwendung der Summen für eine bestimmte Spalte in einer Formel Um die Summe für eine Spalte in der Tabelle zu verweisen, sagen Sie Einnahmen , Können wir jetzt etwas Ähnliches wie salesTotals, Umsatz schreiben. Beachten Sie, dass der zurückgegebene Wert 8216total8217 möglicherweise nicht die Summe (SUM) ist, sondern durch den SUBTOTAL-Funktionsparameter bestimmt wird, der für die Aggregation der Spalte verwendet wird. Let8217s illustrieren dies an einem Beispiel. Wenn die SUBTOTAL-Formel in dem 8216Total Row8217 für die Spalte 8216Revenue8217 einen Aggregationsfunktionsparameter mit einem Wert von 4 enthielt, hätte die Summe den Höchstwert aus der Spalte zurückgegeben. Wenn nun jemand auf diese Summe mit salesTotals, Revenue verweisen möchte, wäre das zurückgegebene 8220total8221 keine Summe von Spaltenwerten, sondern das Maximum. Ich habe das Gefühl, dass da8217s mehr das mit Tabellenformeln getan werden kann. Haben Sie versucht, mit ihnen Pflege zu teilen 29 Kommentare Die Subtotal Fuction auch acceps 101,1028230109..111 als Parameter. Dies funktioniert sowohl mit gefilterten als auch versteckten Zeilen Tabellennamen sind dynamic8230but nicht wirklich. Halten Sie ein paar Zeilen leer und fügen Sie einige Daten. Löschen Sie die Leerzeilen und die Tabelle erweitert nicht sam 8211 Touch. Tatsächlich 101 entspricht 1, 102 bis 2 und so weiter. Während die ehemaligen ignorieren versteckte Werte, die später wird sie bei der Berechnung der Zwischensumme. Nützliches Schreiben einer nicht genutzten Funktion. Beachten Sie, können Sie die Summenformeln mit allem, was Sie wollen, ersetzen, sind Sie nicht mit nur SUBTOTAL stecken. Dinge wie COUNTIFS und SUMIFS können besonders nützlich sein. Sie können immer noch auf sie mit der üblichen Syntax TableNameTotals, ColumnName verweisen, und Ihre benutzerdefinierte Gesamtformel überlebt die gesamte Zeile ausgeschaltet und wieder auf. PCBabe 8211 auf dem TableDesign-Band, verwenden Sie 8220convert auf range8221, oder einfach nur mit der rechten Maustaste gt Tabelle gt Umwandlung in Bereich I verliebte sich in Liebe (eine Übertreibung) mit der Tabelle Formel referenzieren, dann schnell musste eine Scheidung wegen der Unfähigkeit absolut zu tun Zelle, Zeile oder Spalte referenzieren (dh das Äquivalent von a1). Wie dies war nie als ein Use Case Ich don8217t wissen, aber dies machte es einfach zu nervig zu bedienen, so musste ich diese Referenzierung Stil abschalten. Wie kann ich absolut eine Tabelle Formel. Wenn ich eine Tabellenformel in einer anderen Spalte ziehe, ändert sich die Formel. Tabellenname: tblSales Verkaufsbestand 2-30 2-33 die Formel ist. Sum (tblsalessales) nach dem Kopieren oder ziehen Sie diese Formel horizontal es ändern: sum (tblSalesStock) Ich habe versucht, diese Tabelle-Feature in bedingtem Format. Das Problem ist, dass manchmal es akzeptiert, aber produziert kein Ergebnis. Andere Male gibt es einen Fehler. Das Fehlen einer ordnungsgemäßen Dokumentation bedeutet, dass wir keine Mittel haben, zurück zu greifen oder zu beziehen. Die folgende Formel war: IF (UND (Tabelle1Diese Zeile, Qty AvailableltTable1This Row, Reorder-Ebene, Table1This Row, Menge bei Order0), TRUE, FALSE) Wenn ich dieses Problem auf Microsoft-Foren verwies, bat mich einer der MVPs, die IF zu entfernen Klausel: Annehmen, dass Ihre Tabellen-Syntax korrekt ist (ich verwende nie diese strukturierte Referenzierung), befreien Sie sich von der IF-Funktion: AND (Tabelle1This Row, Qty AvailableltTable1This Row, Reorder Level, Table1This Row, Menge bei Order0) Wenn das nicht funktioniert I039d verwenden normale A1-Zellreferenzen. Ich kann nur verstehen, warum die Menschen würde die oben im Vergleich zu: 8221 Wenn ein Feature eingeführt wird, warum nicht erarbeiten Haben Sie Ideen, die ich versucht mit der 8220Evaluate Formel feature8221 aber auch das zeigt Fehler auf jedem Schritt. Ich denke, jeder wird davon profitieren, wenn wir die Diskussion voran nehmen können. Jedenfalls danke für die Eingaben. Ehrfürchtiger Blogpfosten Ajay. Ich hatte keine Ahnung, dass dies in Excel 2007 getan werden könnte. Ich nehme an, dass jetzt, dass ich das kenne, seine Zeit, um über die alte Methode der Auswahl Zellbereiche bei der Erstellung von Formeln zu entwickeln. Das macht so viel mehr Sinn und öffnet neue Türen. Vielen Dank für die Bereitstellung
No comments:
Post a Comment