【问题标题】:VBA Formula creation uses the name of the Variable rather than the valueVBA 公式创建使用变量的名称而不是值
【发布时间】:2016-11-21 13:20:44
【问题描述】:

我正在尝试创建一个代码,该代码允许我从名为“原始数据”的工作表中提取 6 行的平均值并将其转储到不同工作表的单元格中,然后从中提取接下来 6 行的平均值“原始数据”等等。

例如average('RawData'!A1:A6) 在新工作表 A1 中

然后

average('Raw Data'!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 都是变量,以便代码循环并粘贴到正确的位置。

任何帮助将不胜感激

【问题讨论】:

  • 去掉多余的引号:"=Average(" & address13 & ")".

标签: excel vba variables


【解决方案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

例如,假设您从单元格 A1 开始,并且您希望此公式位于单元格 A5 中,您可以使用:

Range("A1").Offset(4, 0).Formula = "=AVERAGE(" & address13 & ")"

【讨论】:

  • 因此,尽管我尝试了所有引号组合,但我能想到的我显然过得很慢,因为这解决了它。非常感谢 Shai!
【解决方案2】:

这可能是您的 Excel 版本中的一个错误。而不是

    ActiveCell.Formula = "=Average(""" & address13 & """)"

尝试使用

    ActiveCell.Formula = '=Average("' & address13 & '")'

(用双引号括住字符串的单引号,然后只使用 1 个双引号)。

【讨论】:

  • 不幸的是它也不喜欢那样,出现编译错误
【解决方案3】:

代替

 ActiveCell.Formula = "=Average(""" & address13 & """)"

试试

ActiveCell.Formula = "=Average("& chr(34) & address13 & chr(34) & ")"

至少在这里 chr(34) 返回你想要的引号。如果需要,可以对此进行调整。只需更改 ( ) 内的数字

【讨论】:

    【解决方案4】:

    试试这个:

    Sub CellValue()
    Dim adr As String
    Dim sht As String
    sht = "'Raw Data'"
    adr = "A1:A3"
    ActiveCell.Formula = "=AVERAGE(" & sht & "!" & adr & ")"
    End Sub
    

    希望对你有帮助:)

    【讨论】:

      【解决方案5】:

      这个公式会给你同样的结果,你可以通过拖动单元格句柄来自动填充它。

      =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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多