合并数据并提供合并数据的平均值

时间:2017-08-25 10:13:15

标签: excel vba excel-vba consolidation

我正在写一个宏,它将用于合并来自一系列单元格的数据。我有一个表格,我希望在范围D2中的表格(" 1")中合并数据:J6,目标位置再次位于M2中的工作表(" 1")中: R2(字母M到R但它们包含标题)。我已经编写了下面代码的一部分,它适用于并运行它们。但是,即使它没有说它有错误,它也不会正确运行..我在宏运行后从我的excel中截取屏幕截图..

从图像中可以看出,我想合并行D中的重复值,并打印与合并值在同一行上的E,F,G,H,I,J列中的值的平均值在D列中。例如,对于值#34; Gebze 6832"在D列中,我想将其作为副本删除,使其成为目标中的一个单元格,并打印E,F,G,H,I,J列的平均值,这两列是在它旁边合并的两行中目标列。

我的代码低于(更新)

<data noupdate="1">

        
        <record id="seq_order" model="ir.sequence">
            <field name="name">test Order</field>
            <field name="code">test.model</field>
            <field name="prefix"></field>
            <field name="padding">3</field>
            <field name="company_id" eval="False"/>
        </record>

    </data>

1 个答案:

答案 0 :(得分:1)

假设您的数据位于从Column D to Column J开始的Row 2范围内,并且必须从Column M to Column S Row 2显示输出,可能会有所帮助。

Sub Demo()
    Dim ws As Worksheet
    Dim dataRng As Range
    Dim dic As Variant, arr As Variant
    Dim cnt As Long

    Set ws = ThisWorkbook.Sheets("Sheet4")  'change Sheet4 to your data sheet

    Application.ScreenUpdating = False
    With ws
        lastRow = .Cells(.Rows.Count, "D").End(xlUp).Row    'get last row in Column D
        Set dataRng = .Range("D2:D" & lastRow)              'range for Column D
        Set dic = CreateObject("Scripting.Dictionary")
        arr = dataRng.Value

        For i = 1 To UBound(arr)
            dic(arr(i, 1)) = dic(arr(i, 1)) + 1
        Next
        .Range("M2").Resize(dic.Count, 1) = Application.WorksheetFunction.Transpose(dic.keys)   'uniques data from Column D
        cnt = dic.Count
        For i = 2 To cnt + 1
            .Range("N" & i & ":S" & i).Formula = "=SUMIF($D$2:$D$" & lastRow & ",$M" & i & ",E$2:E$" & lastRow & ")/" & dic(.Range("M" & i).Value)
        Next i
        .Range("N2:S" & .Cells(.Rows.Count, "M").End(xlUp).Row).Value = .Range("N2:S" & .Cells(.Rows.Count, "M").End(xlUp).Row).Value
    End With
    Application.ScreenUpdating = True
End Sub

此代码将给出以下结果。

enter image description here