Microsoft Excel - Interaktiver Durchschnitt

354
Ashim Kundu

Es ist für eine Aufgabe. Es sind Daten für Januar bis Juni angegeben, und die Juli-Daten sind leer. Nachdem ich den Juli eingegeben habe, wird der Datendurchschnitt erstellt.

Aufgabe ist, ich muss ein Programm festlegen, dass nach dem Einfügen von Daten im Juli eine separate Zeile von August erstellt wird und wenn ich Daten im August-Durchschnitt stelle, erstellt wird und die September-Zeile erscheint.

Ich frage nicht nach Code. Zeigen Sie mir einfach in die richtige Richtung, wo ich anfangen kann.

-3
Bitte beachten Sie, dass [SU] kein Skriptschreibservice ist. Wenn Sie uns sagen, was Sie bisher versucht haben (einschließlich der von Ihnen verwendeten Skripts) und wo Sie stecken bleiben, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch [Wie kann ich eine gute Frage stellen?] (Http://superuser.com/help/how-to-ask) lesen. DavidPostill vor 8 Jahren 2
@ DavidPostill: Warum sehe ich diesen Kommentar immer. Dies ist möglicherweise kein Skriptschreibservice, aber wenn Benutzer bereit sind, Codes zu schreiben, warum sollten sie davon abgehalten werden. Wenn jemand Skripte als Training schreiben möchte, sollten wir sie willkommen heißen, denn das Schreiben einer Antwort wie eine Formel unterscheidet sich nicht im Aufwand vom Schreiben eines Skripts. Firee vor 8 Jahren 0
@Firee Ein bereits geschriebenes Skript zu posten und um Hilfe zu bitten, ist in Ordnung. Kein Skript zu posten und zu fragen ist, die ganze Arbeit zu erledigen, ist nicht in Ordnung. Posting ohne überhaupt etwas zu versuchen ist nicht in Ordnung. DavidPostill vor 8 Jahren 1
@Firee (cont) Von den Leuten wird erwartet, dass sie zumindest ein wenig recherchieren und sich anstrengen, wie in [Wie stelle ich eine gute Frage?] (Http://superuser.com/help/how-to- ask): "Haben Sie gründlich nach einer Antwort gesucht, bevor Sie Ihre Frage stellen? Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie gefunden haben und warum es nicht Ihren Bedürfnissen entspricht. Dies zeigt, dass Sie sich die Zeit genommen haben, um zu helfen Sie selbst erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten! " DavidPostill vor 8 Jahren 2
@DavidPostill Sie meinen also, Benutzer sollten solche Fragen nicht beantworten? Dann sollte es eine ähnliche Regel für die Beantwortung geben, meinen Sie nicht. In diesem Fall ist Ihr Kommentar verloren gegangen, da wir unten eine ausgezeichnete Antwort haben. Firee vor 8 Jahren 0
@Firee Es gibt immer jemanden, der eine schlechte Frage beantworten möchte und jetzt hat das OP jetzt die Antwort auf seine Hausaufgaben: / DavidPostill vor 8 Jahren 0
@DavidPostill Dadurch wird die Regel unwirksam. Sollte die Antwort in solchen Fällen gelöscht werden? Firee vor 8 Jahren 0
@Firee Dies bedeutet nicht, dass die Antwort gestrichen werden sollte, aber es zeigt, dass die Leute bereit sind zu helfen, obwohl das OP keinen Forschungsaufwand gezeigt hat. Es kann nicht immer passieren. Übrigens sind wir hier, um Lösungen zu teilen. IMHO, wenn ich Ihnen meine Hausaufgaben gebe, werden Sie es jedes Mal tun? Prasanna vor 8 Jahren 0
@jcbermu Als Beantworter der Frage möchte ich Sie wissen lassen, dass ich bereit bin zu helfen, auch wenn das OP seine Forschung nicht zeigt, weil: A) Diese Antwort könnte in der Zukunft für andere Menschen wertvoll sein. B) Es könnte ein Startpunkt für das OP sein, um zu dem Thema zu gelangen, nach dem er fragt. Und C) Ich werde mit Reputationspunkten belohnt. jcbermu vor 8 Jahren 0
@Firee, die Antwort wird NICHT gelöscht. Es wird gehalten **. Wenn der Benutzer einfach seinen Beitrag bearbeitet, um zu zeigen, was er versucht hat (oder was auch immer erforderlich ist, um ihn zum Thema zu machen), kann er erneut geöffnet werden. In diesem Fall ist es nicht effektiv (da OP seine Antwort hat), stimme ich Ihnen zu, muss aber für andere Besucher, die sehen können, welche Art von Fragen hier Thema sind, als "Warteschleife" angezeigt werden Der Code, den sie ausprobiert haben, entmutigt sie nicht wie David, es ist nur eine Aufforderung, ihren Code zu sehen. Wenn sie keine geschrieben haben, dann gehe ich davon aus, dass sie am Anfang nicht sehr ermutigt waren !! Dave vor 8 Jahren 0

1 Antwort auf die Frage

1
jcbermu

This code does the task:

Private Sub Worksheet_Change(ByVal Target As Range) ' It is executed each time there is a change on the sheet Application.EnableEvents = False 'Disable detection of further events Dim wks As Worksheet Set wks = ActiveSheet 'Assign a variable name to the active sheet Dim months(1 To 12) As String ' Creates an array of 12 elements to store month names months(1) = "january" months(2) = "february" months(3) = "march" months(4) = "april" months(5) = "may" months(6) = "june" months(7) = "july" months(8) = "august" months(9) = "september" months(10) = "october" months(11) = "november" months(12) = "december" totalrows = wks.Cells(Rows.Count, 2).End(xlUp).Row 'Row of the last value entered If totalrows <= 12 Then 'If it is inside the defined range of months wks.Cells(totalrows + 1, 1) = months(totalrows) 'Put the next month name For j = totalrows + 2 To 13 'Cleans the rows below this wks.Cells(j, 1) = "" Next j End If dataAverage = 0 'calculate the average For i = 2 To totalrows dataAverage = dataAverage + wks.Cells(i, 2) Next i dataAverage = dataAverage / (totalrows - 1) wks.Cells(2, 5) = dataAverage 'Put the average in the designated cell Application.EnableEvents = True 'Enable the detection of events ErrorHandler: Application.EnableEvents = True 'Whenever the Sub generates an error executes this line End Sub 

It works with a sheet like this:

enter image description here

You can customize the code to adapt it to a different position of rows /columns.

Open VBA / Macros with Alt+ F11, double click the worksheet that you want to use and paste the code on the right side.

Hervorragende Lösung, obwohl ich nicht das OP bin. Ich sehe dort viele gute Richtlinien zum Schreiben von Code, gutes Zeug. Firee vor 8 Jahren 0
Ich bekomme dieses * Private Sub Worksheet_Change (ByVal Target As Range) * in meinem VBA-Editor nicht als erste Zeile. Für mich ist es nur * Sub _procedure_name _ () *. Was vermisse ich? Prasanna vor 8 Jahren 0
* Private * Makros werden standardmäßig nicht in den Makrooptionen angezeigt. Markieren Sie es als privat, wenn Sie der Ansicht sind, dass der Benutzer nicht manuell darauf zugreifen muss. * Worksheet_Change (ByVal Target As Range) * gibt an, dass es bei jeder Änderung ausgeführt wird. jcbermu vor 8 Jahren 0
danke jcbermu :). können Sie mir einige Bücher empfehlen, die Ihnen helfen werden, die Verwendung von vba in Excel zu erlernen. Ashim Kundu vor 8 Jahren 0
@ AshimKundu Ich kenne kein Buch darüber. Aber ein guter Ausgangspunkt ist [this] (http://www.excel-easy.com/vba.html) jcbermu vor 8 Jahren 0