循环收集标签和计算

问题描述 投票:-1回答:1

编程目标:

1)循环并存储各个统计数据:

一个。扫描序列号,偏移并收集以下各项:i。 PL#

II。固件版本

III。容量(以下单元格中的任何内容)

IV。技术(以下单元格中的任何内容)

英寸电池#

对于每个PL,以下计算......

六。平均值,最小值,最大值(*%充电状态)

七。平均值,最小值,最大值(温度)

八。 Min,Max,Avg(我开始收费(A))

九。出现次数相等。时间为“= 0”,“(1,419)”,“(420,839)”,“= 840”

X。出现次数低级别“是”和“否”

十一。是/的比率(是+否)

十二。总和(Disch.Ah-)

十三。总和(Ah + Charge)

十四。比率(Ah + / Ah-)

2)输出表到新表:

一个。使用各自的i-xii标题创建表

湾每个PL#都带有i-xii的相应值

C。平等的总和。所有数据的存储桶时间

3)将图表输出到新表:

一个。所有日期(y)和*%充电状态(x)2D线图,y轴0-100,带

100处的恒定绿线和20处的恒定红线

湾所有日期和温度2D线图,在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=1vDqnt2aHL06xB2Fg9k5MZ2WeCefqQZ1n1

excel vba excel-vba loops worksheet-function
1个回答
1
投票

这需要更多的编码,你可以更多地进行参数化,但是如果你导出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
© www.soinside.com 2019 - 2024. All rights reserved.