Как преобразовать одну часть формулы Excel в значения - PullRequest
0 голосов
/ 07 января 2019

Я хочу преобразовать только один раздел формулы Excel в «значения» с помощью VBA. Важно, чтобы полученная формула попала в одну ячейку, поэтому я не могу просто преобразовать одну ячейку в значения и оставить другую в живых. Чтобы использовать пример, начальная формула ниже ссылается на два листа, один внутренний для рабочей книги и один внешний.

По сути, я хочу сделать так, чтобы Внутренняя ссылка оставалась активной, но внешняя ссылка преобразовывалась в значение. Я пытался использовать функцию разрыва ссылок, но, к сожалению, это убивает всю формулу.

Начальная формула:

=MATCH(A4,InternData!$A:$A,0)+MATCH(A4,[ExternalWorkbook.xlsx]ExternData!$A:$A,0)

Желаемый результат:

=MATCH(A4,InternData!$A:$A,0)+ [Value that would be generated by external match function]

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Просмотрите столбец, в который вы планируете поместить формулу.

Предполагается, что ExternalWorkbook.xlsx уже открыт в коллекции рабочих книг.

Номер строки, возвращенный из внешнего совпадения, не контролируется с ошибками, поскольку # N / A нет совпадений.

dim i as long, lr as long, erng as range

set erng = workbooks("ExternalWorkbook.xlsx").worksheets("ExternData").columns("A")

with thisworkbook.worksheets("sheet1")

    lr = .cells.count(.rows.count, "A").end)xlup).row

    for i = 4 to lr

        .cells(i, "B").formula = _
          "=match(a" & i & ", InternData!$A:$A, 0)+" & application.match(.cells(i, "A").value, erng , 0)

    nrxt i

end with
0 голосов
/ 07 января 2019

Вы можете использовать Application.Evaluate. В моем примере у меня есть следующие данные в электронной таблице:

A1: 5
B1: 2
C1: 3
A3: =A1+SUM(B1:C1)

Затем вы можете запустить этот код для преобразования формулы A3 в =A1+5. Понятно, что вам нужно все настроить в соответствии с вашей ситуацией и определенно заняться обработкой ошибок, или вы будете изменять формулы без особого контроля!

Sub bob()
    Dim tmpFirst    As String
    Dim tmpSecond   As String

    tmpFirst = Split(Range("A3").Formula, "+")(0)
    tmpSecond = Split(Range("A3").Formula, "+")(1)

    Range("A3").Formula = tmpFirst & "+" & Application.Evaluate(tmpSecond)
End Sub

Функция Split разделяется на +, что весьма вероятно будет проблематичным. Я бы порекомендовал добавить фиктивный диапазон с именем Spacer или аналогичный, который может указывать на ячейку со значением ноль, может быть? Формула может быть что-то вроде: =A1+Spacer+SUM(B1:C1)

и тогда разделение можно было бы сделать на +Spacer+ вместо +, чтобы избежать разделения на знак плюс, который вы не хотите (может легко произойти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...