VBA公式创建使用变量的名称而不是值

时间:2016-11-21 13:20:45

标签: excel vba variables

我试图创建一个代码,允许我从名为“原始数据”的工作表中提取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都是变量,以便代码循环并粘贴到正确的位置。

任何帮助都会有很大帮助

5 个答案:

答案 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 & ")"

注意:请尽量避免使用SelectActiveCell,而应使用引用的RangesWorksheets

例如,假设您从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))

enter image description here 填写两个公式

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