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


1

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

我有一个看起来像这样的Excel文件:

在此处输入图片说明

我基本上想要一个宏,它将通过“水果”列,认识到作为一个单独的水果,然后根据其“组”对水果的新鲜度求平均,然后在每个组的第一个单元格旁边声明平均值和组。

我觉得这是一个简单的宏,但我无法弄清楚。如何才能做到这一点?

谢谢!感激不尽!


1
甚至不需要宏,一个公式就足够了。将新鲜度乘以如果水果=苹果然后1否则0,将其求和,然后除以水果列中的苹果计数。
彼得


感谢您的快速回复!但我认为这不适用于我的Excel工作表。我有100多个“水果”(不是真正的水果,仅是示例),我希望每个组中每种水果的平均值,我有50个组。它的〜750,000行excel文件,因此我尝试不手动执行…
LearningTheMacros

1
伙计,听起来您需要枢轴工作台……
Raystafarian 2015年

C列中的@LearningTheMacros,手册分组是毫无根据的,或者我可以不基于水果或它们的新鲜度来想象它,因此这将给安排它们的分组顺序带来麻烦!
Rajesh S

Answers:


0

这个宏可以解决问题

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,在ThisWorkbook下插入一个新模块,然后将此代码粘贴到右侧。

可以根据需要调整变量firstrowresultcolumn

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.