【问题标题】:Setting cells from selected range as formula inputs将选定范围内的单元格设置为公式输入
【发布时间】:2018-07-09 08:01:48
【问题描述】:

我创建了一个简单的 CAGR 公式,它允许我根据给定的输入(第一期、最后一期和期数)计算 CAGR。

现在,我希望能够在选定的单元格范围内运行公式。我想不出任何花哨而简单的方法来做到这一点。宏本身应该能够将范围的最左侧单元格识别为第一个句点,将最右侧的单元格识别为最后一个句点,并计算单元格的数量以得出句点数。

你能帮帮我吗?

我的 CAGR 公式宏如下所示:

Public Function CAGR(First, Last, Periods)

    CAGR = ((Last / First) ^ (1 / Periods)) - 1

End Function

提前致谢。 保罗

【问题讨论】:

    标签: vba excel range formula


    【解决方案1】:

    您可以像这样访问当前选择的范围:

    Application.ActiveWorkbook.ActiveSheet.range(Application.Selection.Address)
    

    剩下的交给你,但如果你遇到困难发表评论,我会提供更多指导:)

    【讨论】:

    • 实际上,这可能是一个过于复杂的解决方案。我认为您只需 Application.Selection 即可完成所需的一切。
    【解决方案2】:

    首先,我们需要一个输入范围,它可以是一行宽或一列高(参见检查部分)。那么对于行或列模式的计算有点不同(见代码中的cmets)。

    1. 您可以在任何 Excel 单元格中使用该函数,例如……

      • =CAGR(A1:F1)输入为行模式
      • =CAGR(A1:A6)输入为列模式
      • =CAGR(A1:B5) 此输入无效,因为 row.countcolumn.count>1 这将返回错误:#REF!
    2. 或者来自 VBA 之类的......

      Public Sub MsgCagrOfSelection()
          MsgBox CAGR(Selection) 'MessageBox the CARG result of the current selected cells
      End Sub
      

    Option Explicit
    
    Public Function CAGR(rngInput As Range) As Variant 'needs to be variant so we can return errors too
    
        ' first we do some checking
        ' input range has to be one column or one row only
        If rngInput.Columns.Count > 1 And rngInput.Rows.Count > 1 Then
            CAGR = CVErr(xlErrRef)
            Exit Function
        End If
    
        Dim First As Double
        Dim Last As Double
        Dim Periods As Long
    
        ' calculation is a bit different if we have a column or row as input range
        If rngInput.Columns.Count > 1 Then ' we have one row
            First = rngInput.Resize(1, 1).Value
            Last = rngInput.Resize(1, 1).Offset(ColumnOffset:=rngInput.Columns.Count - 1).Value
            Periods = rngInput.Columns.Count
        Else ' we have one column
            First = rngInput.Resize(1, 1).Value
            Last = rngInput.Resize(1, 1).Offset(RowOffset:=rngInput.Rows.Count - 1).Value
            Periods = rngInput.Rows.Count
        End If
    
        ' first value has not to be 0 we can't divide by 0
        If First = 0 Then
            CAGR = CVErr(xlErrDiv0)
            Exit Function
        End If
    
        CAGR = ((Last / First) ^ (1 / Periods)) - 1
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多