В Excel и VBA, как установить значение ячейки для результата формулы, а не формулы

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

sheet.range("B2:B35").Value = "=IF(SUMPRODUCT(--(Raw!$B$11:$B$322=$A2),--(Raw!$D$11:$D$322=All!$B$2),Raw!$H$11:$H$322)<>0,SUMPRODUCT(--(Raw!$B$11:$B$322=$A2),--(Raw!$D$11:$D$322=All!$B$2),Raw!$H$11:$H$322),""-"")"

Он, очевидно, помещает всю формулу в качестве значения ячейки. Я бы хотел просто поместить результат формулы в ячейку. Я пробовал добавить Evaluate () вокруг части «ЕСЛИ ...», но тогда ЕСЛИ вычисляется неправильно (я просто получаю «-» в каждой ячейке). Возможно ли это сделать или мне нужно иметь отдельный код для циклического перебора и изменения значения на значение ячейки?


person Kurt    schedule 04.10.2012    source источник


Ответы (1)


Использовать:

sheet.range("B2:B35").Formula = "Your formula here"

Если это не сработает, возможно, вам придется изменить форматирование (сначала сделайте это):

sheet.range("B2:B35").NumberFormat = "General"

Изменить:

Решением оказалось добавление следующей строки после кода OP:

sheet.range("B2:B35").value = sheet.range("B2:B35").value
person mkingston    schedule 04.10.2012
comment
Исходный код уже использовал .Formula вместо .Value (что я пробовал оба при использовании Evaluate). Это не изменило то, что было помещено в камеры. Форматирование ячеек уже является общим, хотя это, похоже, было автоматическим; Я не устанавливал это специально через код. - person Kurt; 05.10.2012
comment
Странный. Если вы запустите его, выберите его и сделайте следующее (в ближайшем окне): Selection.NumberFormat = General, затем Selection.Value = Selection.Value, что вы получите? - person mkingston; 05.10.2012
comment
Немного изменив то, что вы сказали: добавив sheet.range (B2: B35) .Value = sheet.range (B2: B35) .Value, сделало это просто числом. Тогда это работает. Я просто надеялся, что мне не придется этого делать, поскольку у меня есть код в OP еще примерно 5 раз в цикле. Ну что ж. Достаточно просто добавить еще 1 строку кода. - person Kurt; 05.10.2012