动态范围计算宏
Dynamic range calculations macro
我有一个 Excel 文档,包含 12 sheet 个。
每个 sheet 包含大量数据,从 A 列到 X 列,并且行中的范围可变。
我正在尝试为每个 sheet 计算每列的平均值和标准误差。最好在摘要 sheet.
上输出
我的思考过程:
- 我设法让最后一行下的每个单元格计算平均值。
- 当我尝试对标准误差执行相同操作时,问题是步骤 1) 中计算的平均值包含在计算中。
- 毕竟,将这些计算的结果显示在单独的 'summary' 选项卡中似乎更方便。
这是我试过的代码,它适用于在列中最后一个值的正下方生成的平均值。
Sub ColumnAverageFormula()
For i = 3 To 24
Columns(Columns(i).Address).Select
Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=Average(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")"
Next i
For j = 3 To 24
Columns(Columns(j).Address).Select
Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=stdev.p(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")"
Next j
End Sub
Tl;dr:我想编写代码来计算 Excel 文件中每个 sheet 的每一列的平均值和标准误差,结果应该在一个 'summary' sheet.
您插入的公式引用了从第 1 行开始的范围。通常,您所描述的数据集在第一行中有某种基于文本的列 header 标签。如果是这种情况,您会希望从第 2 行开始,而不是第 1 行。以下内容从第 1 行开始。
Sub ColumnAverageFormula()
Dim c As Long, sr As Long
With Worksheets("Sheet1")
sr = .Cells(Rows.Count, 3).End(xlUp).Row
For c = 3 To 24
.Cells(sr + 1, c).Formula = "=average(" & .Range(.Cells(1, c), .Cells(sr, c)).Address(0, 0) & ")"
.Cells(sr + 2, c).Formula = "=stdev.p(" & .Range(.Cells(1, c), .Cells(sr, c)).Address(0, 0) & ")"
Next c
End With
End Sub
'as an alternate, you might consider putting all of the formulas in at once
Sub ColumnAverageFormula()
Dim c As Long, sr As Long
With Worksheets("Sheet1")
sr = .Cells(Rows.Count, 3).End(xlUp).Row
.Cells(sr + 1, 3).Resize(1, 22).Formula = "=average(" & Range(.Cells(1, 3), .Cells(sr, 3)).Address(0, 0) & ")"
.Cells(sr + 2, 3).Resize(1, 22).Formula = "=stdev.p(" & Range(.Cells(1, 3), .Cells(sr, 3)).Address(0, 0) & ")"
End With
End Sub
如果您想从第 2 行开始,请将 .Range(.Cells(1, c), ...
更改为 .Range(.Cells(2, c), ...
。
我有一个 Excel 文档,包含 12 sheet 个。
每个 sheet 包含大量数据,从 A 列到 X 列,并且行中的范围可变。
我正在尝试为每个 sheet 计算每列的平均值和标准误差。最好在摘要 sheet.
我的思考过程:
- 我设法让最后一行下的每个单元格计算平均值。
- 当我尝试对标准误差执行相同操作时,问题是步骤 1) 中计算的平均值包含在计算中。
- 毕竟,将这些计算的结果显示在单独的 'summary' 选项卡中似乎更方便。
这是我试过的代码,它适用于在列中最后一个值的正下方生成的平均值。
Sub ColumnAverageFormula()
For i = 3 To 24
Columns(Columns(i).Address).Select
Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=Average(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")"
Next i
For j = 3 To 24
Columns(Columns(j).Address).Select
Cells(1, ActiveCell.Column).End(xlDown).Offset(1, 0).Formula = "=stdev.p(" & Cells(1, ActiveCell.Column).Address(0, 0) & ":" & Cells(1, ActiveCell.Column).End(xlDown).Address(0, 0) & ")"
Next j
End Sub
Tl;dr:我想编写代码来计算 Excel 文件中每个 sheet 的每一列的平均值和标准误差,结果应该在一个 'summary' sheet.
您插入的公式引用了从第 1 行开始的范围。通常,您所描述的数据集在第一行中有某种基于文本的列 header 标签。如果是这种情况,您会希望从第 2 行开始,而不是第 1 行。以下内容从第 1 行开始。
Sub ColumnAverageFormula()
Dim c As Long, sr As Long
With Worksheets("Sheet1")
sr = .Cells(Rows.Count, 3).End(xlUp).Row
For c = 3 To 24
.Cells(sr + 1, c).Formula = "=average(" & .Range(.Cells(1, c), .Cells(sr, c)).Address(0, 0) & ")"
.Cells(sr + 2, c).Formula = "=stdev.p(" & .Range(.Cells(1, c), .Cells(sr, c)).Address(0, 0) & ")"
Next c
End With
End Sub
'as an alternate, you might consider putting all of the formulas in at once
Sub ColumnAverageFormula()
Dim c As Long, sr As Long
With Worksheets("Sheet1")
sr = .Cells(Rows.Count, 3).End(xlUp).Row
.Cells(sr + 1, 3).Resize(1, 22).Formula = "=average(" & Range(.Cells(1, 3), .Cells(sr, 3)).Address(0, 0) & ")"
.Cells(sr + 2, 3).Resize(1, 22).Formula = "=stdev.p(" & Range(.Cells(1, 3), .Cells(sr, 3)).Address(0, 0) & ")"
End With
End Sub
如果您想从第 2 行开始,请将 .Range(.Cells(1, c), ...
更改为 .Range(.Cells(2, c), ...
。