【问题标题】:How to apply an Excel-formula on a dynamic array using vba如何使用 vba 在动态数组上应用 Excel 公式
【发布时间】:2019-10-22 22:28:22
【问题描述】:

我需要在不同的动态 excel 范围上应用一些 excel 公式,例如修剪,自定义格式,日志,exp ...等。 我想 - 避免迭代 - 生成字符串的范围输出

这里是一个例子:=exp(input)

我尝试了 VBA 函数,但没有成功:

Sub test()
Dim OutputRange As Range
Set OutputRange = Math.Exp(Range("inputRange"))
End Sub

知道如何使用 VBA 以一种简洁明了的方式实现这一目标吗?也许与 R 函数“应用”的方式相同

【问题讨论】:

  • 如果您希望输出为文本字符串而不是数字格式掩码,那么您需要迭代单元格并在每个单元格的 vba 中使用 Format()
  • 我确实需要输出为字符串。但是,我想使用范围并避免迭代。

标签: excel vba


【解决方案1】:

录制宏确实是解决 Excel 中任何格式问题的诀窍。

因此,在录制一张并进行格式化后,您可能会看到:

Sub Makro1()
    Selection.NumberFormat = "#,##0.00"
    Range("C6").Select
End Sub

通过清除选择并使用定义的范围,它变成了这样:

Sub TestMe()
    [ExcelTestRange].NumberFormat = "#,##0.00"
End Sub

另一个,可能更好的选择是通过 VBA 在 Excel 中构建公式。这样做是这样的:

Sub TestMe()
    [ExcelTestRange].Formula = "=TEXT(INDIRECT(ADDRESS(ROW(),COLUMN()-1)),""0,000.00"")"
End Sub

棘手的部分是正确地提出公式,特别是如果您使用的不是英文 Excel,而是其他东西。最简单的技巧是选择已经工作的公式并运行以下代码:

Public Sub PrintMeUsefulFormula()

    Dim selectedFormula  As String
    Dim parenthesis  As String

    parenthesis = """"

    selectedFormula = Selection.Formula
    selectedFormula = Replace(selectedFormula, """", """""")

    selectedFormula = parenthesis & selectedFormula & parenthesis
    Debug.Print selectedFormula

End Sub

【讨论】:

  • 谢谢。你会好心并使用另一个 Excel 函数而不是格式函数重写代码吗?
  • @DKK - 当然,我很善良:)
  • 你的头像暗示“你像狐狸一样善良”;-) 谢谢我正在研究它!
【解决方案2】:

这是一个EXP函数的例子(其他函数也可以)

Sub Test_Range_Formula()

    Dim inputRange As Range: Set inputRange = Range("inputRange")
    Dim aux As Range : Set aux = Range(ActiveCell.Address & ":" & ActiveCell.Offset(UBound(inputRange.Value, 1) - 1, 0).Address)

    aux.FormulaArray = "=EXP(inputRange)+1"

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2015-07-23
    • 2015-12-05
    • 2021-02-01
    相关资源
    最近更新 更多