Нахождение минимального, максимального и среднего для динамического c диапазона столбцов и строк VBA - PullRequest
2 голосов
/ 22 февраля 2020

Я пытаюсь найти MIN , MAX и AVERAGE каждого столбца ( Примечание: количество столбцов меняется каждый день). Сводная таблица на следующем рабочем листе MIN , MAX и AVERAGE каждого столбца является требуемым выводом. Каждый из столбцов имеет уникальный серийный номер (в соответствии с краткой информацией на фото ниже).

Также я пытаюсь найти MIN , MAX и СРЕДНИЙ каждой строки ( Примечание: количество строк также меняется каждый день). Эти значения желательно указывать в столбцах CZ (мин), DA (макс.), DB (среднее).

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

«Ошибка времени выполнения« 1004 »: невозможно получить свойство Min класса WorksheetFunction»

Я пытался сделать это с формулами, но лист Excel значительно замедлился, поэтому надеялся, что VBA ускорит обработка вверх. Я бы оценил 2000-4000 строк и до 100 столбцов данных о температуре.

Sub Range_End_Method()
'Finds the last non-blank cell in a single row or column

Dim Row As Long
Dim Col As Long
Dim MinValue As Integer
Dim Min_Values As Range
Dim Cycle As Integer
Dim RangeNew As Variant

    'Find the last non-blank cell in column C(1)
    Row = ThisWorkbook.Sheets("1. Paste Raw Data").Cells(Rows.Count, 3).End(xlUp).Row

    'Find the last non-blank cell in row 9
    Col = ThisWorkbook.Sheets("1. Paste Raw Data").Cells(9, Columns.Count).End(xlToLeft).Column

For i = 3 To Col

    RangeNew = Range(Cells(9, i).Address, Cells(Row, i).Address).Address
    MinValue = Application.WorksheetFunction.Min(RangeNew)
    Cycle = 3
    MinValue = Sheets("5. Summary Information").Cells((Cycle + i), i)

    Next

End Sub

enter image description here

enter image description here

1 Ответ

1 голос
/ 22 февраля 2020

Я не думаю, что приведенный ниже код будет делать то, что вы хотите, но он имеет правильный синтаксис для установки диапазона и для определения последней использованной строки и столбца на листе. При правильном синтаксисе вы теперь можете ввести правильный лог c.

Sub Range_End_Method()
    ' Variatus@STO 22 Feb 2020

    Dim MinValue As Integer
    Dim MinRng As Range
    Dim Cycle As Integer
    Dim Rl As Long                      ' last used row
    Dim Cl As Long                      ' last used column
    Dim i As Integer

    'Find the last non-blank cell in column C(1)
    ' rows and columns must be counted in the same sheet!
    With ThisWorkbook.Sheets("1. Paste Raw Data")
        Rl = .Cells(.Rows.Count, 3).End(xlUp).Row

        'Find the last non-blank cell in row 9
        Cl = .Cells(9, .Columns.Count).End(xlToLeft).Column

        Cycle = 3
        For i = 3 To Cl
            Set MinRng = .Range(.Cells(9, i), .Cells(Rl, i))
            Debug.Print MinRng.Address
            MinValue = Application.WorksheetFunction.Min(MinRng)
            Sheets("5. Summary Information").Cells((i + Cycle), i).Value = MinValue
        Next i
    End With
End Sub

Я обращаю ваше внимание на строку Debug.Print MinRng.Address, которую я добавил для поддержки вашего тестирования. Эта строка будет печатать адрес MinRange в окне Immediate на каждой итерации, и вы сможете увидеть, соответствует ли это вашему намерению.

Обратите также внимание, что я перевернул ваш код для записи MinValue на лист 5. Это Мне показалось, что это более логично, но я сомневаюсь, что координаты целевой ячейки указаны правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...