EXCEL VBA-平均包含合并区域中每列的数值的所有行

我有多个电子表格,每个电子表格大致如下所示:

在这里输入图像说明

我试图通过第一行的每一个SPEAKER HEADERS来find一个方法,并且总结与相应的调查问题相关的分数(“CONTENT是否好?SPEAKER是否相关?DELIVERY的好处是什么?按颜色分组。

我想不出一个聪明的做法,自动。

我可以得到合并单元格的RANGE SPANS,如下所示:

For Each Cell In src_sheet.UsedRange.Cells If Cell.Row = 1 And IsEmpty(Cell) = False Then MsgBox Cell.MergeArea.Address End If Next 

然后,我需要迭代地址提供的范围,获取该范围之下的所有行中的数值。

例如,运行当前的macros产生这个:

在这里输入图像说明

我需要采取$C$1:$E$1并运行一个for循环,说从C1到E1平均在它下面的行中的所有数字。 我不知道如何做到这一点。

我正在考虑扩大select包括使用的一切

有一个更好的方法吗?

这是我现在正在做的悲剧性的坏的方式(我因为刚刚接触excel而感到非常骄傲):

  For Each Cell In src_sheet.UsedRange.Cells If Cell.Row = 1 And IsEmpty(Cell) = False Then Set rng = Range(Cell.MergeArea.Address) 'Equal to the Address of the Merged Area startLetter = Mid(rng.Address, 2, 1) 'Gets letter from MergeArea Address endLetter = Mid(rng.Address, 7, 1) 'Gets letter from MergeArea Address On Error GoTo ErrHandler: Set superRange = Range(startLetter & ":" & endLetter) ErrHandler: endLetter = startLetter Set superRange = Range(startLetter & ":" & endLetter) Resume Next superRange.Select MsgBox Application.Average(Selection) 

为了摆脱你所遇到的错误,你需要改变:

 Set rng = Cell.MergeArea.Address 

 Set rng = Range(Cell.MergeArea.Address) 

理想情况下,这个数据会更好地存储在数据库中,这样可以很容易地查询。 如果这不是一个选项,那么你在Excel中的方式与其他任何方法一样有效。

编辑

一旦获得每个发言者最左边一列的地址,就可以遍历每一列来获取平均值。

 'Number of columns in the current speaker's range. numColumns = rng.Columns.Count 'First row containing data. currentRow = 4 'First column containing data. firstColumn = rng.Column 'Loop through each column. For col = firstColumn to firstColumn + (numColumns -1) totalValue = 0 'Loop through each row. Do While Cells(currentRow,col).value <> "" totalValue = totalValue + Cells(currentRow,col).Value currentRow = currentRow + 1 Loop averageValue = totalValue / (currentRow - 3) 'Reset the currentRow value to the top of the data area. currentRow = 4 'Do something with this average value before moving on to the next column. Next 

如果您不知道数据的起始行是什么,那么您可以继续检查rng.Row下面的每一行,直到您input一个数字值。

上述方法假定您的数据区域中没有空白条目。 如果您有空白条目,那么您应该在运行此代码之前对数据进行sorting,或者您需要知道有多less行必须检查数据值。