2015-07-02 3 views
0

Я пытаюсь написать макрос, который возвращает максимальное значение столбца на основе значения в другом столбце. Я думал, что мой код работает, но он просто возвращает значение нуля. Я пытаюсь сделать это для таблицы около 2500 строк. Я создал меньшую таблицу, чтобы попытаться выяснить, в чем проблема, но я получаю тот же результат (он возвращает 0 вместо 10).VBA для max массива возвращает значение 0

Вот мой код:

Sub test() 

    imax = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 

    Dim MaxArray(2 To 11) As String 

    For t = 2 To 11 

     If (Cells(t, 1) = 1) Then MaxArray(t) = Cells(t, 2).Value 

    Next t 

    Cells(2, 3).Value = WorksheetFunction.max(MaxArray) 

End Sub 

Вот результат я получаю:

Column 1 Column 2 Max of Column 1 

    1   4    0 
    1   6 
    1   3 
    1   10 
    1   9 
    2   5 
    2   2 
    2   3 
    2   8 

Может кто-нибудь сказать мне, в чем проблема?

Некоторые примечания: Я знаю, как это сделать, используя сводную таблицу или формулу в excel, но я действительно хочу, чтобы она попала в макрос, который запускает кучу других вещей до и после него. Я просто хочу нажать кнопку один раз вместо остановки и добавить таблицу или формулу, а затем нажать еще одну кнопку, чтобы продолжить.

+0

Вы пытались изменить 'Dim MaxArray (от 2 до 11) как String' до' Dim MaxArray (от 2 до 11) как Integer'. Не уверен, но, возможно, это проблема –

+0

В этом была проблема. Благодаря! –

ответ

0

Try:

Cells(2, 3).Value = Evaluate("=MAX(B2:B11))") 

Возможно также изменение типа массива на номер Double, Integer может помочь.

И кстати, я думаю, что это будет также работать, чтобы уменьшить цикл:

Set MaxArray = Range(Cells(2, 2), Cells(11,2)) 
+0

Спасибо вам всем! Проблема была вызвана целым числом. Что касается функции set, чтобы уменьшить цикл, я думаю, что я не должен использовать его правильно, потому что получаю ошибку компиляции, в которой говорится, что «невозможно назначить массив». –

+0

Добро пожаловать. Пожалуйста, отметьте как ответ. Что касается массива, возможно, диапазон задан неправильно слишком широким или слишком узким. –

0

Я установил его с целым предложением, но потом я понял, что мои реальные цифры округлены до двух или трех знаков после запятой. Я попытался исправить это, используя Long вместо Integer, но он все равно просто возвращает целое число. Как я могу включить десятичные знаки?

код: таблица

Sub test2() 

imax = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 

Dim MaxArray(2 To 11) As Long 

For t = 2 To 11 

    If (Cells(t, 1) = 1) Then MaxArray(t) = Cells(t, 2).Value 

Next t 

Cells(2, 3).Value = WorksheetFunction.max(MaxArray) 

End Sub 

данные:

Колонка 1 Колонка 2 Макс из 1 в

1   4.66  10 
1   6.2 
1   3.987 
1   10.125 
1   9.1 
2   5.3 
2   2.21 
2   3.654 
2   8.12 
2   20.56 

Спасибо за вашу помощь!

+0

Ничего. Я только что увидел «двойную» часть комментария. Использование двойных работ. –

Смежные вопросы