如何使用宏对 Excel 列中的值进行分组和平均?

如何使用宏对 Excel 列中的值进行分组和平均?

我是新手,一直在努力编写宏。我想知道是否有人可以帮助我制作/解释一个可以在我的数据集中使用的宏。

我有一个如下所示的 Excel 文件:

在此处输入图片描述

我基本上想要一个宏,它可以遍历“水果”列,将其识别为单独的水果,然后根据水果的“组”计算该水果的平均新鲜度,然后在每个组的第一个单元格旁边显示平均值和组。

我觉得这是一个简单的宏,但我搞不懂。该怎么做?

谢谢!非常感谢!

答案1

这个宏可以解决问题

Public Sub itemaverages()
    Dim wks As Worksheet
    Set wks = ActiveSheet
    firstrow = 2
    resultcolumn = 6
    titletext = "AVG"
    resultrow = firstrow
    searching = True
    lastitemname = wks.Cells(firstrow, 1)
    lastitemfresh = wks.Cells(firstrow, 2)
    lastitemgroup = wks.Cells(firstrow, 3)
    itemtotal = lastitemfresh
    therow = firstrow + 1
    While searching
        countitem = 1
        sameitem = True
        While sameitem
            itemname = wks.Cells(therow, 1)
            itemfresh = wks.Cells(therow, 2)
            itemgroup = wks.Cells(therow, 3)
            If itemname <> "" Then
                If (itemname = lastitemname) And (itemgroup = lastitemgroup) Then
                    itemtotal = itemtotal + itemfresh
                    countitem = countitem + 1
                    therow = therow + 1
                    lastitemname = itemname
                    lastitemfresh = itemfresh
                    lastitemgroup = itemgroup
                Else
                    averagename = UCase(lastitemname) & " " & titletext
                    averagefresh = itemtotal / countitem
                    wks.Cells(resultrow, resultcolumn).Value = averagename & " " & averagefresh
                    wks.Cells(resultrow, resultcolumn + 1).Value = lastitemgroup
                    sameitem = False
                    lastitemname = itemname
                    lastitemfresh = itemfresh
                    lastitemgroup = itemgroup
                    itemtotal = itemfresh
                    resultrow = therow
                    therow = therow + 1
                End If
            Else
                sameitem = False
                searching = False
            End If
        Wend
    Wend
    a = MsgBox("Finished", vbInformation)
End Sub

使用 Alt+F11 打开 VBA/Macros,在下方插入一个新模块本工作簿,并将此代码粘贴到右侧。

变量firstrow可以resultcolumn根据您的需要进行调整。

相关内容