1

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

在此处输入图像描述

我正在尝试找到一种方法来遍历第 1 行中的每个 SPEAKER HEADERS,并总结与相应调查问题相关的分数(“内容是否良好?SPEAKER 是否相关?交付效果如何?)按颜色分组。

我想不出一个聪明的方法来自动执行此操作。

我可以像这样获得合并单元格的范围跨度:

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

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

例如,运行当前宏会产生:

在此处输入图像描述

我需要使用$C$1:$E$1并运行一个 for 循环,该循环说从 C1 到 E1 平均它下面的行中的所有数字。 我不知道该怎么做。

我正在考虑增加选择,包括使用的所有内容

有一个更好的方法吗?

这是我现在正在做的可悲的糟糕方式(由于我是 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) 
4

1 回答 1

2

为了摆脱您遇到的错误,您需要更改:

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直到您找到一个数值。

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

于 2013-07-02T16:44:10.790 回答