#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 ..) на то, что предложил Александр П. Левассер!