2014-09-18 4 views
0

С макросами Excel VBA я создаю таблицу excel (listobject), которая содержит несколько столбцов данных (со значениями в них) и один столбец с формулами. Эти формулы различны для каждой строки. Эти формулы строятся и хранятся в массиве с помощью vba и помещаются в столбец только один раз в конце. Это необходимо для скорости.Поместите формулы из массива в столбец таблицы Excel

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

Примечания:

  • В "AutoFillFormulasInLists" установлен в FALSE.
  • Если я пытаюсь хранить значения вместо формул, все работает нормально.
  • Если я попытаюсь сделать ту же логику, но поставил формулы в простой диапазон ячеек, все будет хорошо.

Вот очень упрощенный пример кода я использую, чтобы pupulate столбец таблицы с формулами:

Dim sformulas(1 To 3) As String 
sformulas(1) = "=""x""" 
sformulas(2) = "=""y""" 
sformulas(3) = "=""z""" 
ActiveSheet.ListObjects("Table1").ListColumns("ColumnX").DataBodyRange.Formula = Application.Transpose(sformulas) 

Полученная формула в ColumnX все = «х»

Но я ожидал бы иметь = "x", = "y" и = "z"

Есть ли способ сохранить правильную формулу в таблице?

ответ

0

Единственный способ воспроизвести вашу ошибку - это когда первое значение является строкой формулы строки. Я не мог воспроизвести его иначе.

Dim a As Variant 
a = Array("x", "=""y""", "=""z""") 

Dim xRange As Range 
Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange 

xRange.Formula = Application.Transpose(a) 

Работал нормально. но a = Array("=""x""", "y", "z") дает все «х».

Пока я не могу объяснить, почему это происходит, но я могу дать обход. Вы бесполезно используете формулу для константы. Просто используйте Array("x", "y", "z") и DataBodyRange.Value вместо формулы (хотя они оба имеют один и тот же эффект.)

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

Dim a As Variant 
a = Array("0001", "0004", "0002") 

Dim xRange As Range 
Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange 

With xRange 
    .NumberFormat = "@" ' text format 
    .value = Application.Transpose(a) 
End With 

Это даст "0001", "0004", "0002" вместо 1, 4, 2.

+0

Спасибо за ваш ответ. Однако мне действительно нужно хранить сложные формулы excel не только константы, но и ценности. "=" x "" был просто способом ввода формулы. Формулы, которые я буду использовать, используют функции с ячейками той же таблицы, а также ячейки других рабочих листов. Мне действительно нужно найти решение, в котором я могу ввести сложную формулу в таблицу. Единственная работа, которую я нашел, - создать диапазон имен за пределами таблицы excel, где я храню массивы формул, а затем использовать этот диапазон имен, используя функцию INDEX() внутри таблицы excel, чтобы получить результирующие значения. – Martin

+0

Вы просто обертываете функцию в кавычки, например '' = "" Среднее (A1: A5) "" "" или есть строковая константа в ваших уравнениях, например '' = CONCATENATE (A1, "sales" ")" ' ? – cheezsteak

Смежные вопросы