Отображение жестко запрограммированных формул после запуска макроса

#vba #excel

#vba #excel

Вопрос:

Есть ли способ отобразить формулы, щелкнув по ячейке? Я написал несколько жестко запрограммированных формул в vba, и после запуска макроса я получаю только значения в ячейках. Я хочу, чтобы после запуска макроса я все еще мог просматривать формулу в ячейках. Это формулы, которые у меня есть в настоящее время:

 Dim i, lastrow  As Integer
Range("a10").Select
Selection.End(xlDown).Select
lastrow = ActiveCell.Row

For i = 10 To lastrow
Sheets("20140618 Loans").Range("Q" amp; i) = Application.VLookup(Sheets("20140618 Loans").Range("D" amp; i), Sheets("20140617 Loans").Range("D:P"), 13, False)

Sheets("20140618 Loans").Range("R" amp; i) = Sheets("20140618 Loans").Range("P" amp; i) - Sheets("20140618 Loans").Range("Q" amp; i)

Sheets("20140618 Loans").Range("S" amp; i) = Application.VLookup(Sheets("20140618 Loans").Range("D" amp; i), Sheets("20140617 Loans").Range("D:H"), 5, False)

Sheets("20140618 Loans").Range("T" amp; i) = Sheets("20140618 Loans").Range("H" amp; i) - Sheets("20140618 Loans").Range("S" amp; i)

Sheets("20140618 Loans").Range("U" amp; i) = Application.VLookup(Sheets("20140618 Loans").Range("D" amp; i), Sheets("20140617 Loans").Range("D:G"), 4, False)

Sheets("20140618 Loans").Range("V" amp; i) = Sheets("20140618 Loans").Range("G" amp; i) - Sheets("20140618 Loans").Range("U" amp; i)

Sheets("20140618 Loans").Range("W" amp; i) = WorksheetFunction.SumIf(Sheets("WSO Interest").Range("H:H"), Sheets("20140618 Loans").Range("D" amp; i), Sheets("WSO Interest").Range("S:S"))

Sheets("20140618 Loans").Range("X" amp; i) = Application.VLookup(Sheets("20140618 Loans").Range("D" amp; i), Sheets("20140618 PNL").Range("C:N"), 12, False)

Sheets("20140618 Loans").Range("Y" amp; i) = Sheets("20140618 Loans").Range("R" amp; i) - Sheets("20140618 Loans").Range("W" amp; i) - Sheets("20140618 Loans").Range("T" amp; i) * (Sheets("20140618 Loans").Range("G" amp; i) / 100) - Sheets("20140618 Loans").Range("X" amp; i)
 

Спасибо, ребята.

Ответ №1:

Вы не записали формулы в ячейку. Вы устанавливаете значение для содержимого в правой части оператора равенства. Использование объекта диапазона с равенством подразумевает, что вы хотите задать значение, а не формулу. Чтобы задать формулу, вам нужно указать Formula свойство, и вам нужно будет задать запись формулы, как в Excel.

например.

 Sheets("20140618 Loans").Range("Q" amp; i).Formula = _
    "=VLOOKUP('20140618 Loans'!D" amp; i amp; ",'20140617 Loans'!D:P, 13, 0)"
 

Кроме того, это не входит в ваш вопрос, но я думаю, что вам было бы очень полезно узнать об этих With заявлениях.

http://msdn.microsoft.com/en-ca/library/wc500chb.aspx

Используя With…End With , вы можете выполнить серию инструкций для указанного объекта, не указывая имя объекта несколько раз. В блоке инструкции With можно указать элемент объекта, начинающийся с точки, как если бы перед ним стоял объект инструкции With.

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

1. Большое спасибо за ваш ответ! Знаете ли вы, как я мог бы использовать что-то подобное для функции SUMIF? Я пытался Sheets("20140618 Loans").Range("W" amp; i).Formula = _ "=SUMIF('WSO Interest'!H:H,'20140618 Loans'!D amp; i amp;, 'WSO Interest'!S:S)" , но это было явно неправильно.

2. Вам нужно снять кавычки со строки, если вы хотите использовать переменную, созданную в VBA. Итак "...Loans'!D" amp; i amp; "..."

Ответ №2:

Используйте .Formula метод, подобный этому:

Sheets("20140618 Loans").Range("Q" amp; i).Formula = '...your formula here


Примечание: вам нужно будет добавить кавычки и отформатировать его как формулу, которая вычисляется по таблице, а не по VBA. Например:

 Range("A1").Formula = "=1 2"
 

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

1. Эй, я только что попробовал это сделать… sheets("20140618 Loans").range("Q" amp; i).Formula = 'my formula но он все еще дает мне значения. Могу ли я подтвердить, что все, что я делаю, это просто добавление .Formula после каждого диапазона?

2. Не совсем, вам также необходимо отформатировать каждую формулу для использования в ячейке. @alexandreP.levasseur привел пример того, как может выглядеть уравнение (в VBA) в своем ответе. Посмотрите, поможет ли это прояснить ситуацию.

Ответ №3:

Необходимо создавать строки, отражающие рабочие формулы

Например, если у вас есть значения столбца A, как показано ниже

введите описание изображения здесь

Запуск следующего макроса

 Sub FillInFormula()

Dim i, lastrow  As Integer
Range("A1").Select
Selection.End(xlDown).Select
lastrow = ActiveCell.Row

For i = 1 To lastrow
Range("B" amp; i) = "=sum(A" amp; i amp; ":A" amp; i   1 amp; ")"
Next i

End Sub
 

введите описание изображения здесь

Что — то в этом роде

P.S. используйте ctrl ` (вкладка выше), чтобы просмотреть все формулы сразу

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

1. Хорошо, это сработало, но как я мог включить это, чтобы использовать Vlookup? Еще раз спасибо.

2. Замените правую часть («= SUM ..) на то, что предложил Александр П. Левассер!