Microsoft Excel - Интерактивное среднее

293
Ashim Kundu

Его для назначения. Есть данные, данные за январь-июнь, а данные за июль пусты. После того, как я ввожу данные за июль, создается среднее значение.

Задача состоит в том, чтобы исправить программу, чтобы после того, как я поместил данные в июле, была создана отдельная строка августа, а когда я поместил данные в августовское среднее значение, была создана строка сентября.

Я не прошу какой-либо код. Просто покажи мне в правильном направлении, откуда я могу начать.

-3
Обратите внимание, что [SU] не является сервисом написания скриптов. Если вы сообщите нам, что вы уже пробовали (включая сценарии, которые вы используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Http://superuser.com/help/how-to-ask). DavidPostill 8 лет назад 2
@DavidPostill: Почему я всегда вижу этот комментарий. Это может быть не сервис написания скриптов, но если пользователи желают писать коды, то зачем их отговаривать. Если кто-то хочет писать сценарии в качестве тренинга, то я думаю, что мы должны приветствовать их, ведь написание ответа типа формулы ничем не отличается от написания сценария. Firee 8 лет назад 0
@ Firee Опубликовать уже написанный сценарий и попросить о помощи - это нормально. Не писать сценарий и просить сделать всю работу не хорошо. Публиковать, даже не пытаясь ничего вообще не хорошо. DavidPostill 8 лет назад 1
@Firee (продолжение) От людей ожидается, что они хотя бы проведут некоторые исследования и приложат усилия - как четко указано в [Как задать хороший вопрос?] (Http://superuser.com/help/how-to- спросить): «Тщательно ли вы искали ответ, прежде чем задавать свой вопрос? Поделиться своим исследованием помогает всем. Расскажите нам, что вы нашли и почему оно не соответствует вашим потребностям. Это показывает, что вы нашли время, чтобы попытаться помочь сами, это спасает нас от повторения очевидных ответов, и, прежде всего, помогает получить более конкретный и актуальный ответ! " DavidPostill 8 лет назад 2
@DavidPostill Итак, вы хотите сказать, что пользователи не должны отвечать на такие вопросы? Тогда должно быть такое же правило для ответа, не так ли? В этом случае ваш комментарий пропал, потому что у нас есть отличный ответ ниже. Firee 8 лет назад 0
@Firee Всегда есть кто-то, кто хочет ответить на плохой вопрос, и теперь у ОП теперь есть ответ на его домашнюю работу: / DavidPostill 8 лет назад 0
@DavidPostill Что делает правило неэффективным. В таких случаях должен ли быть удален ответ? Firee 8 лет назад 0
@Firee Это не означает, что ответ должен быть удален, но это показывает, что люди готовы помочь, даже несмотря на то, что ОП не показала никаких исследований. Это может случиться не все время. Кстати, мы здесь, чтобы поделиться решениями. ИМХО, если я передам тебе домашнее задание, будешь ли ты делать это каждый раз? Prasanna 8 лет назад 0
@jcbermu Как тот, кто ответил на вопрос, я хотел бы сообщить вам, что я готов помочь, даже если ОП не показывает свое исследование, потому что: A) Этот ответ может быть ценным для других людей в будущем. Б) Это может быть отправной точкой для ОП, чтобы войти в предмет, который он просит. И C) Я награжден очками репутации. jcbermu 8 лет назад 0
@ Firee, ответ НЕ удаляется. Это ** приостановлено **. Если пользователь просто отредактирует свой пост, чтобы показать, что он пробовал (или что когда-либо нужно, чтобы сделать его по теме), его можно открыть заново. В этом случае это неэффективно (так как у ОП есть ответ), я согласен с вами, но он должен быть показан как «на удержании» для других посетителей, которые могут видеть, какие типы вопросов здесь или вне темы :) увидеть код, который они попробовали, не обескураживает их, как это сделал Дэвид, это просто просьба увидеть их код. Если они не написали ничего, то я предполагаю, что они не очень поощрялись начинать с !! Dave 8 лет назад 0

1 ответ на вопрос

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.

Отличное решение, хотя я не ОП. Я вижу много хороших рекомендаций по написанию кода, хорошие вещи. Firee 8 лет назад 0
Я не получаю это * Private Sub Worksheet_Change (ByVal Target As Range) * в моем редакторе VBA в качестве первой строки. Для меня это просто * Sub _procedure_name _ () *. Что мне не хватает? Prasanna 8 лет назад 0
* Закрытые * макросы не отображаются в настройках макроса по умолчанию. Отметьте это как частное, если вы считаете, что пользователь не должен обращаться к нему вручную. * Worksheet_Change (ByVal Target As Range) * указывает, что он будет выполняться каждый раз, когда происходит изменение. jcbermu 8 лет назад 0
спасибо jcbermu :). Можете ли вы отослать мне несколько книг, которые помогут в изучении использования VBA в Excel. Ashim Kundu 8 лет назад 0
@AshimKundu Я не знаю книги об этом. Но хорошей отправной точкой является [это] (http://www.excel-easy.com/vba.html) jcbermu 8 лет назад 0

Похожие вопросы