2016-02-26 3 views
0

Итак, у меня есть серия чисел, для удобства всего 3, в ячейках A1, A2, A3. Они создаются случайным образом и, следовательно, могут быть любой комбинацией 0s и 1s. Мне нужно найти максимальное число 1s, которое происходит в любой момент времени, и поместить значение в A4. например:Подсчет максимального числа элементов в случайной серии чисел

Время t1: (A1, A2, A3) являются (0,0,0) -> результат = (A4) является 0 [так как нет 1 не существует]
Время t2: Время t1: (A1, A2, A3) равно (1,1,0) -> result = (A4) равно 2 [поскольку существует 2 1s, превышающее 0 (при t1)]
Время t3: Время t1: (A1, A2, A3) равно (1,1,1) -> result = (A4) равно 3 [поскольку существует 3 1s, большее 0 (при t2)]
Время t4: (A1, A2, A3) равны (0,1,0) -> результат = (A4) равен 3 [поскольку существует только один 1, который меньше 3 (В t3)]

Так конечный результат 3

Как я могу добиться этого?

Thanks

+0

О каком промежутке времени мы говорим? т.е. как часто изменяются значения в A1, A2, A3? – Ditto

+0

Значения (A1, A2, A3) вычисляются на основе пользовательского ввода. – vaibhav

ответ

0

Хорошо, попробуйте это для размера. Во-первых получить количество всех тех, в любой момент времени, например: (предполагая, что ячейка A4)

COUNTIF(A1:A3,1) 

Затем вы хотите иметь бегущую «максимальное значение» ячейку, которая может проверить, чтобы убедиться, что она больше чем текущий счетчик. Это можно сделать с помощью макроса. Щелкните правой кнопкой мыши на вкладке Excel, выберите «просмотр кода» и введите этот код в окно кода:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim KeyCells As Range 
Dim OldValue As Range 
Dim MaxValue As Range 

Set KeyCells = Range("A1:A3") 
Set OldValue = Range("A4") 'this is the current count of ones 
Set MaxValue = Range("A6") 'this is the overall max number of ones 

If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
     Is Nothing Then 

    ' Display a message when one of the designated cells has been 
    ' changed. 
    ' Place your code here. 
    If OldValue > MaxValue Then 
     MaxValue = OldValue 
    End If 

End If 
End Sub 

Когда вы закончите в окне кода, выберите file > close and return to microsoft excel

+0

Это не удовлетворяет его требованию, что вы должны учитывать все времена. – Ditto

0

на основе ваших отзывов в комментариях , Я бы рекомендовал следующее:

1) Поместите значение «0» в ячейку: B1.

2) В ячейке А4, поместите эту формулу: (очень похожий на ответ W3AVE в) ..

=MAX(B1,COUNTIF(A1:A3,1)) 

По существу, вы должны хранить максимальное значение до сих пор, чтобы вместить, что дополнительные требования вы должны контролировать значения за все время.

После обновления информации вам необходимо скопировать (только значения) с A4 на B1. Вы можете сделать это вручную или создать небольшой скрипт VBA.

Но поскольку он обновляется на входе пользователя, простое копирование (только значения) представляется самым простым решением.

+0

Есть ли функция в excel для копирования только значений без vba или вручную? – vaibhav

+0

при копировании вручную, «paste => special» .. и выберите только значения. Если вы хотите увидеть код VBA, создайте макрос, сделайте копию и посмотрите на макрокод;) – Ditto

0

Вот User Defined Function, который выполняет то, что вы хотите в одной ячейке:

Вызов его из клетки с =HighestNumber(A1:A3,1)

Просто обратите внимание: если вы закроете книгу ваши предыдущие «Макс» значение разрушается, и функция будет пересчитана с нуля при следующем ее открытии.