2016-12-23 22 views
1

У меня есть код в моем макросе, который возвращает меня в мою ячейку (A5) результат #name?VBA macro с формулой (Excel)

Range("A5").Select 
ActiveCell.FormulaR1C1 = "=Application.Sum(Range(Cells(1, 5), Cells(20, 5)))" 
End Sub 

#name? включает формулу текста между кавычками в моем VB коде

=Application.Sum(Range(Cells(1, 5), Cells(20, 5))) 

Если я буду писать без кавычек это будет возвращают мне результата. (Сумму диапазона)

ActiveCell.FormulaR1C1 = Application.Sum(Range(Cells(1, 5), Cells(20, 5))) 

но необходимо иметь в моей таре A5 результат и формула, как я получил этот результат. Возможно, этого достаточно, чтобы изменить некоторые параметры?

+0

Хотите получить в вашей ячейке и формула и результат? Если да, проверьте ответ ниже, http://stackoverflow.com/a/41298568/2707864 –

ответ

4

Так как вы хотите использовать код VBA, чтобы ввести формулу в ячейке A5, то вам необходимо использовать правильные параметры:

Range(Cells(1, 5), Cells(20, 5)) является VBA, если вы хотите, как формула, которая распознает ячейки листа в Excel , вам необходимо использовать R1C5:R20C5.

Кроме того, вместо Application.Sum просто используйте Sum.

Вы должны стараться избегать использования Select и ActiveCell и непосредственно использовать Range("A5").FormulaR1C1

Так просто используйте код строки ниже:

Range("A5").FormulaR1C1 = "=Sum(R1C5:R20C5)" 
+0

@ Майкл Штефаница, вы пробовали мой код в моем ответе? если помог отметить «ответ» –

1

, если вы хотите иметь формулу в камере, указывая на какой-то диапазон, в вашем коде VBA, то вы можете использовать

Range("A5").FormulaR1C1 = "=Sum(" & Range(Cells(1, 5), Cells(20, 5)).Address(, , xlR1C1) & ")" 
+0

его другим способом, но приятно держать «Ячейки ...» –

+0

@ShaiRado, ну это на самом деле _different_ способ, что все другие решения предполагают диапазон _fixex_ 'F1: F20' для быть введенным в формулу ячейки, в то время как мой предполагает, что OP может использовать один и тот же оператор в другом контексте и оставить определение диапазона для кода VBA. Давайте посмотрим, что Майкл Штефаница скажет, что это действительно нужно ... – user3598756

+0

Мне нравится мышление «вне коробки», но также '' = Sum (R1C5: R20C5) "' можно использовать с параметрами '" = Sum (R "& firstrow &" C "& Col &": R " LastRow & "C" & Col & ")" ' –

2

Мне было проще добавить формулу к формуле клеток с использованием

Sub addFormula() 

    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet1") 

    With ws 
     .Range("A5").NumberFormat = "General" 'This formats A5 as general 
     .Range("A5").Formula = "=SUM(F1:F20)" 
    End With 

End Sub 

Все это делает входит в формулу в ячейке A5

+0

Я тоже пытаюсь, но он возвращает меня "= SUM ('F1': 'F20')" –

+0

Я предполагаю, что ячейка отформатирована как текст ... Добавляя '.Range (" A5 "), .NumberFormat = "General" 'i разрешил это –

+0

@MichaelShtefanitsa - Вы уверены, что сделали то, что было предложено, или вы использовали' Range ("A5"). FormulaR1C1 = "= SUM (F1: F20)" '- используя' FormulaR1C1' неправильно поняли бы, что «F1» и «F20» ссылаются и будут «обходить» вокруг них. – YowE3K

0

Если я правильно понял, вы хотите, чтобы показать в A5как формулы и результат. Если да, то используйте

Dim aux As Variant 
aux = Application.Sum(Range(Cells(1, 5), Cells(20, 5))) 
ActiveCell.Value = "Application.Sum(Range(Cells(1, 5), Cells(20, 5))) : " & CStr(aux) 

Этот код caould вероятно быть улучшена (с использованием Sum вместо Application.Sum, например)