Запуск нескольких значений через расчет Excel - PullRequest
0 голосов
/ 25 апреля 2019

Другой член моей команды создал сложную электронную таблицу, которая вычисляет определенное значение, которое нам нужно.Однако в настоящее время он настроен следующим образом:

  • Изменить значения в ячейках A1, A2, A3.
  • Произойдет куча взаимозависимых вычислений, заполняющих несколько сотен ячеек.Эти сотни ячеек затем объединяются с помощью другой формулы в нужное мне значение.
  • Полезные выходные данные появляются в ячейке D1

Моя задача - сгенерировать серию действий "если".Если A1 = 4, A2 = 4.7, A3 = 0.2, что будет D1?

Повторите это для 10k + других допустимых комбинаций A1, A2 и A3 при регистрации выходов.

Мой инстинкт был просто относиться к нему как к функции в языке программирования и делать из нее функцию, которая принимает входные данные и выплевывает выходные данные ... однако я не уверен, как это сделать.Любое руководство о том, как это можно сделать?Функция, которую выполняет коллега, очень сложна, поэтому нелегко воспроизвести эту логику по нескольким строкам или столбцам до уровня «перетаскивания», как я мог бы сделать для SUM или чего-то подобного.

1 Ответ

1 голос
/ 25 апреля 2019

Благодаря Майклу Мерфи в комментариях, которые дали мне некоторые вещи для поиска. Я оставляю это здесь, чтобы будущие люди, которые ищут, могли его найти.

Sub test()
'
' test Macro
'
    Dim a_array As Variant
    Dim b_array As Variant
    Dim c_array As Variant
    Dim rw_cnt As Integer

    rw_cnt = 2
    ' This selects each of the things to combo
    a_array = ThisWorkbook.Sheets(2).Range("A2:A5")
    b_array = ThisWorkbook.Sheets(2).Range("B2:B5")
    c_array = ThisWorkbook.Sheets(2).Range("C2:C5")

    For Each a_el In a_array
        For Each b_el In b_array
            For Each c_el In c_array
                worth = compute_worth(a_el, b_el, c_el)
                ' This writes the output where we can track it
                ThisWorkbook.Sheets(2).Cells(rw_cnt, 6) = a_el
                ThisWorkbook.Sheets(2).Cells(rw_cnt, 7) = b_el
                ThisWorkbook.Sheets(2).Cells(rw_cnt, 8) = c_el
                ThisWorkbook.Sheets(2).Cells(rw_cnt, 9) = worth
                rw_cnt = rw_cnt + 1
            Next a_el
        Next b_el
    Next c_el
End Sub


Function compute_worth(a, b, c)
    ' This puts the value into the original sheet then extracts the output
    ThisWorkbook.Sheets(1).Range("A1") = a
    ThisWorkbook.Sheets(1).Range("A2") = b
    ThisWorkbook.Sheets(1).Range("A3") = c
    worth = ThisWorkbook.Sheets(1).Range("D1").Value
    compute_worth = worth
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...