VBA公式创build使用variables的名称而不是值
我试图创build一个代码,这将允许我从一个名为“原始数据”的工作表拉平6行的平均值,并将其转储到另一个工作表中的单元格中,然后从“原始数据' 等等。
EG平均值(“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)"
但是,这只是返回公式中variablesaddress9的名称,而不是实际的范围。
请注意,RPM1300,RPM900,start_row,end_row和rCell都是variables,以便代码循环并粘贴到正确的位置。
任何帮助都会大大降低
尝试replace你的线路:
ActiveCell.Formula = "=Average(""" & address13 & """)"
附:
ActiveCell.Formula = "=AVERAGE(" & address13 & ")"
原因 :variablesaddress13
已经被定义为一个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
。
例如,假设您从单元格A1开始,并希望此公式位于单元格A5中,则可以使用:
Range("A1").Offset(4, 0).Formula = "=AVERAGE(" & address13 & ")"
这可能是您的Excel版本中的一个错误。 代替
ActiveCell.Formula = "=Average(""" & address13 & """)"
尝试使用
ActiveCell.Formula = '=Average("' & address13 & '")'
(用双引号括起来的单引号,然后只用1个双引号)。
代替
ActiveCell.Formula = "=Average(""" & address13 & """)"
尝试
ActiveCell.Formula = "=Average("& chr(34) & address13 & chr(34) & ")"
至less在这里(34)返回你想要的报价。 这可能会调整,如果需要的话。 只要改变()中的数字
尝试使用这个:
Sub CellValue() Dim adr As String Dim sht As String sht = "'Raw Data'" adr = "A1:A3" ActiveCell.Formula = "=AVERAGE(" & sht & "!" & adr & ")" End Sub
希望能帮助到你 :)
这个公式会给你相同的结果,你可以通过拖动单元格句柄来自动填充它。
= AVERAGE(OFFSET('原始数据'!$ A $ 2,ROW(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