Цикл сбора меток и расчетов - PullRequest
0 голосов
/ 13 сентября 2018

Цель программирования:

1) Зацикливать и хранить индивидуальную статистику:

а. Сканирование на серийный номер, смещение и собрать следующее для каждого: я. PL #

II. Версия прошивки

III. Вместимость (что находится в ячейке ниже)

IV. Технология (что находится в ячейке ниже)

v. Аккумулятор №

Для каждого отдельного PL, следующие расчеты ...

VI. Среднее, Мин., Макс. (*% Состояние заряда)

VII. Avg, Min, Max (Temp)

VIII. Мин, Макс, Ср (Я начинаю заряд (А))

IX. Количество вхождений Равно. Время в «= 0», «(1 419)», «(420 839)», «= 840»

х. Количество случаев Низкий уровень «да» и «нет»

хи. Соотношение да / (да + нет)

ХII. Сумма (дис. Ах -)

ХIII. Сумма (А + заряд)

ХIV. Соотношение (Ах + / Ах -)

2) Вывести таблицу на новый лист:

а. Создать таблицу с соответствующими заголовками i-xii

б. Каждый отдельный PL # с соответствующим значением для i-xii

с. Сумма Равных. Время в ведрах для всех данных

3) Вывести графики на новый лист:

а. Все даты (у) и *% состояния заряда (х) 2D линейный график, ось у 0-100, с

постоянная зеленая линия на 100 и постоянная красная линия на 20

б. Все линейные графики даты и температуры с постоянной красной линией в 138

Я работаю над (1). Вот как я буду сканировать и собирать каждый кусок ...

Sub GetData()

Dim ArrPK() As String, SearchString As String
Dim SerialNo As Range, aCell As Range
Dim ws As Worksheet
Dim PkCounter As Long
Dim LstBox As msforms.ListBox

Set ws = ThisWorkbook.Sheets("Sheet1")
SearchString = "Serial#"
Set LstBox = UserForm1.ListBox1

PkCounter = 1

With ws
    Set SerialNo = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)

    For Each aCell In SerialNo
        If aCell.Value2 = SearchString Then
            ReDim Preserve ArrPK(1 To 5, 1 To PkCounter)
            ArrPK(1, PkCounter) = aCell.Offset(0, 1) 'Serial#
            ArrPK(2, PkCounter) = aCell.Offset(1, 1) 'Firmware#
            ArrPK(3, PkCounter) = aCell.Offset(3, 1) 'Capacity
            ArrPK(4, PkCounter) = aCell.Offset(3, 3) 'Technology
            ArrPK(5, PkCounter) = aCell.Offset(3, 11) 'Battery#
       'Collected information labels, now run calculations...
            PkCounter = PkCounter + 1
        End If
    Next
End With

Что я хочу сделать: . Я хотел бы вывести таблицу с собранными метками и соответствующими расчетами. Цикл, который у меня есть, получает метки.

Файл примера:

https://drive.google.com/open?id=1vDqnt2aHL06xB2Fg9k5MZ2WeCefqQZ1n 1

1 Ответ

0 голосов
/ 13 сентября 2018

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

Sub GetData()

    Dim ArrPK() As String, SearchString As String
    Dim SerialNo As Range, aCell As Range
    Dim ws As Worksheet
    Dim PkCounter As Long
    'Dim LstBox As msforms.ListBox
    Dim rng As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")
    SearchString = "Serial#"
    'Set LstBox = UserForm1.ListBox1

    PkCounter = 1

    With ws
        Set SerialNo = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)

        For Each aCell In SerialNo
            If aCell.Value2 = SearchString Then
                ReDim Preserve ArrPK(1 To 6, 1 To PkCounter)
                ArrPK(1, PkCounter) = aCell.Offset(0, 1) 'Serial#
                ArrPK(2, PkCounter) = aCell.Offset(1, 1) 'Firmware#
                ArrPK(3, PkCounter) = aCell.Offset(3, 1) 'Capacity
                ArrPK(4, PkCounter) = aCell.Offset(3, 3) 'Technology
                ArrPK(5, PkCounter) = aCell.Offset(3, 11) 'Battery#


                'define the data block for the battery
                Set rng = aCell.CurrentRegion 'data block for one battery
                Set rng = rng.Offset(6, 0)
                Set rng = rng.Resize(rng.Rows.Count - 6, rng.Columns.Count)

                'now range is defined, run the calculations using the worksheet functions, or use a loop over the range columns
                '### calculate avg, min and max temperature (8th column in block)
                ArrPK(6, PkCounter) = Application.WorksheetFunction.Average(rng.Columns(8)) 'average temperature



                PkCounter = PkCounter + 1
            End If
        Next
    End With
End Sub
...