我试图创建一个代码,允许我从名为“原始数据”的工作表中提取6行的平均值。并将其转储到不同工作表中的单元格中,然后从“原始数据”中提取接下来6行的平均值。等等。
E.G。新表A1中的平均值(' RawData'!A1:A6)
然后
平均值('原始数据'!A7:A12)在新表A2中
等
到目前为止,我已经设法以我想要的方式进行代码循环但是我在新的表A1和A2中编写实际公式时遇到了麻烦。
到目前为止,我已尝试过:
Dim address13 As String
address13 = "'Raw Data'" & "!" & Cells(start_row, RPM1300).Address & ":" & _
Cells(end_row, RPM1300).Address
ActiveCell.Offset(0, -4).Select
'1300
ActiveCell.Formula = "=Average(""" & address13 & """)"
然而,这会返回正确的公式,但使用""围绕它 - 使它无用。
我也尝试过:
Sheets("Raw Data").Select
Dim address9 As Range
Set address9 = Range(Cells(start_row, RPM900).Address(), Cells(end_row, RPM900).Address())
Sheets("New Sheet").Select
rCell.Activate
ActiveCell.Offset(0, -5).Select
ActiveCell.Formula = "=Average(address9)"
然而,这只会返回公式中变量address9的名称而不是实际范围。
请注意,RPM1300,RPM900,start_row,end_row和rCell都是变量,以便代码循环并粘贴到正确的位置。
任何帮助都会有很大帮助
答案 0 :(得分:1)
尝试更换您的专线:
ActiveCell.Formula = "=Average(""" & address13 & """)"
使用:
ActiveCell.Formula = "=AVERAGE(" & address13 & ")"
原因:变量address13
已经定义为String
,这就是为什么您不需要括号内的额外"
。
Dim address13 As String
address13 = "'Raw Data'!" & Cells(start_row, RPM1300).Address & ":" & _
Cells(end_row, RPM1300).Address
ActiveCell.Offset(0, -4).Select
ActiveCell.Formula = "=AVERAGE(" & address13 & ")"
注意:请尽量避免使用Select
和ActiveCell
,而应使用引用的Ranges
和Worksheets
。
例如,假设您从Cell A1开始,并且您希望此公式位于Cell A5中,您可以使用:
Range("A1").Offset(4, 0).Formula = "=AVERAGE(" & address13 & ")"
答案 1 :(得分:0)
这可能是您的Excel版本中的错误。而不是
ActiveCell.Formula = "=Average(""" & address13 & """)"
尝试使用
ActiveCell.Formula = '=Average("' & address13 & '")'
(单引号用双引号括起来,然后只使用1引号)。
答案 2 :(得分:0)
而不是
ActiveCell.Formula = "=Average(""" & address13 & """)"
尝试
ActiveCell.Formula = "=Average("& chr(34) & address13 & chr(34) & ")"
至少这里chr(34)返回你想要的引号。如果需要,可以调整。只需更改()
中的数字即可答案 3 :(得分:0)
尝试使用:
Sub CellValue()
Dim adr As String
Dim sht As String
sht = "'Raw Data'"
adr = "A1:A3"
ActiveCell.Formula = "=AVERAGE(" & sht & "!" & adr & ")"
End Sub
希望有所帮助:)
答案 4 :(得分:0)
此公式将为您提供相同的结果,您可以通过拖动单元格手柄自动填充它。
= AVERAGE(OFFSET('原始数据'!$ A $ 2,行(A1)* 6-7,0,6,1))
Sub FillFormulas()
Const BASE_FORMULA = "=AVERAGE('Raw Data'!@Address)"
Dim lastRow As Long, x As Long
Dim Formulas
With Worksheets("Raw Data")
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row / 6
End With
ReDim Formulas(1 To lastRow, 1 To 1)
With Worksheets("New Sheet")
For x = 1 To lastRow
Formulas(x, 1) = Replace(BASE_FORMULA, "@Address", .Cells((x * 6) - 5, 1).Resize(6).Address)
Next
.Range("A1").Resize(lastRow).Formula = Formulas
.Range("C1").Resize(lastRow).Formula = "=AVERAGE(OFFSET('Raw Data'!$A$2,ROW(A1)*6-7,0,6,1))"
End With
End Sub