Как применить Excel-формулу к динамическому массиву с помощью vba - PullRequest
1 голос
/ 21 октября 2019

Мне нужно применить несколько формул Excel к различным динамическим диапазонам Excel, например, обрезка, пользовательский формат, журнал, exp ... и т. Д. Я хотел бы -Avoid итераций -Generate диапазон вывода строк

Вот пример: = exp (input)

enter image description here

Я безуспешно пытался использовать функцию VBA:

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

Есть идеи, как добиться этого с помощью VBA простым и понятным способом? Возможно, так же, как R-функция «применить»

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Это пример с функцией 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
0 голосов
/ 21 октября 2019

Запись макроса - действительно хитрость в любых проблемах форматирования в Excel.

Таким образом, после записи одного и выполнения форматов вы можете увидеть это:

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

с некоторой очисткойвне выбора и с использованием заданного диапазона он становится таким:

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

Еще один , возможно, лучший вариант - построить формулу в Excel через VBA. Это делается так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...