2015-09-20 2 views
-1

у меня есть два вопроса, которые я хотел бы получить много помощи на:Добавление петель в формулу и отображение только значение формулы вычисления

  1. Я VBA связан с кнопкой, которая вычисляет значения на некоторые клетки на основе введенных параметров. Тем не менее, я все еще являюсь основным пользователем и не могу заставить его зацикливаться. Цель состоит в том, чтобы VBA продолжал вычислять до тех пор, пока значение в данной ячейке не будет нулевой.
  2. Возможно ли иметь VBA для вычисления входных значений только в ячейку без ввода соответствующей формулы? См фрагмент кода ниже:

    Sub Formular1() 'Formular1

    Range("H17").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=ROUNDDOWN((RC[-1]-RC[-2])/30,0)" 
    ActiveCell.Select 
    
    ' Formular2 Macro 
    Range("I17").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-1]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    
    ' Formular 3 
    Range("J17").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=R4C9" 
    Range("J20").Select 
    
    End Sub 
    

ответ

0

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

dim nr as long 
'option 1 
with activesheet 
    nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row 
    .cells(nr, "H").formula = "=TRUNC((G" & nr & "-F" & nr & ")/30)" 
    .cells(nr, "I").formula = "=G" & nr & "/F" & nr 
    .cells(nr, "J").formula = "=I4" 
    with .cells(nr, "H").resize(1, 3) 
     .value = .value 
    end with 
end with 

'option 2 
with activesheet 
    nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row 
    .cells(nr, "H") = int((.cells(nr, "D").value - .cells(nr, "H").value)/30) 
    .cells(nr, "I") = cdbl(.cells(nr, "G").value/.cells(nr, "F").value) 
    .cells(nr, "J") = .cells(4, "I").value 
end with 

У вас есть примеры каждого метода. Я немного упростил вашу первую формулу, используя TRUNC function вместо ROUNDDOWN function, но оба они выполняют одну и ту же операцию в этом случае.

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

+0

Я только что обновил и работал как магия. Спасибо. Тем не менее, я хочу внести некоторые изменения, и я не хочу уничтожать то, что вы сделали. Я хотел бы изменить относительный выбор ячейки в начале кода на абсолютный, и я бы хотел добавить цикл. Во-первых, я хочу, чтобы вычисления всегда начинались с строки 19 и заканчивались в строке, где столбец G не имеет значения. Еще раз спасибо. Не могли бы вы добавить комментарии к своим кодам, чтобы я мог хотя бы учиться и совершенствоваться? – Avictomama

-2

не совсем уверен, что вы пытаетесь сделать. но

Очевидно, что я не использую ваш диапазон именно потому, что вы не предоставили достаточной информации о том, что вы хотите сделать.

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

for each rcell in worksheet("myworksheet").Range("A1:A15").Cells 
if rcell.value = "0" then 
exit sub 
else 
rcell.value = rcell.value 
end if 
next rcell 

Кстати, друг рассказал мне об этом сайте, который он использовал. он сказал, что они предоставляют несколько бесплатных учебных видеороликов по основным формулам excel no vba, но что он использовал их для создания макроса для него, и это была очень разумная стоимость.

http://www.excelformulashelp.com/

+0

Спасибо за ваш ответ. Я думаю, что джип уже отправил правосудие на этот вопрос. Но не могли бы вы предложить решение проблемы с циклом? – Avictomama

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