Как получить ЗНАЧЕНИЕ формулы ячейки

#excel #vba

#excel #vba

Вопрос:

Я искал как сумасшедший, и я уверен, что это намного проще, чем я думаю, поэтому, пожалуйста, просветите меня!

Я устанавливаю формулу для некоторых ячеек в цикле, подобном этому:

 ActiveSheet.Range("AM" amp; i).Formula = "=ROUND(Y" amp; i amp; "/(M" amp; i amp; " U" amp; i amp; "/12))"
  

И я хотел бы скопировать РЕЗУЛЬТАТ этой формулы в другую ячейку. Я попробовал это:

 ActiveSheet.Range("Y" amp; i).Value = ActiveSheet.Range("AM" amp; i).Value
  

Но это не работает. Мне всегда было интересно, как получить результат (значение) этой формулы, а не копировать всю формулу.

Есть идея или ответ? Большое спасибо.

Комментарии:

1. Похоже, это должно сработать, вы убедились, что оно действительно рассчитало его после размещения формулы. Кроме того, две формулы будут циклическими, так что это может быть проблемой.

2. @Tom, на самом деле вам не нужно выполнять цикл, чтобы поместить формулу в диапазон ячеек. Это можно сделать в одной строке.

3. Согласен с обоими комментариями выше. Выбранный вами ответ копирования / вставки на самом деле является обходным путем

Ответ №1:

Вы можете скопировать результат в виде значения. Предположим, у меня есть ячейки A1 и A2, и я хочу получить MAX значение в формате A3, а затем скопировать результат в формат A4:

     A
1   10
2   20
3   20 <- as formula '=MAX(A1:A2)'
4   20 <- as value not formula

Sub AddMax()
    Range("A3").Formula = "=MAX(A1:A2)"
End Sub

Sub CopyResult()
    Range("A3").Copy
    Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
  

Комментарии:

1. (1) Если вы когда-либо используете Copy в VBA, вам следует добавить a Application.CutCopyMode = False , чтобы удалить выделение копирования вокруг A3. (2) Приведенный выше пример можно выполнить с помощью одной строки [a4].Value = Application.WorksheetFunction.Max([a1], [a2]) , избегая копирования

2. @brettdj — Спасибо — хорошие комментарии. Я согласен с вашей точкой зрения (2), и мне было непонятно, почему это не работает для OP, поэтому я предложил копировать и вставлять в качестве альтернативы.

3. Приветствую Remant. Мои комментарии не были предназначены для критики .. они выглядят хуже, чем я думал, когда я их перечитывал. Спасибо, что восприняли это как конструктивное в моем предполагаемом порядке

4. @brettdj — Нет проблем. Я приветствую советы, и я всегда смущен на этом сайте тем, как много я не знаю, поэтому я стараюсь смотреть непредвзято.