2013-07-22 13 views
0

Привет, у каждого У меня есть жесткий код в excel vba, который установит заданное значение ячейки = в формулу, и у меня есть несколько строк кода, которые делают это для каждого значения ячейки, но меняют формулу чтобы посмотреть на конкретный столбец под ним.Значение ячейки ячейки VBA VBA для формулы

Так что мой вопрос, есть ли способ, чтобы закодировать ниже вещи в 1 строке, так что формула будет автоматически изменять столбцы его, глядя на в зависимости от колонки его на самом деле в.

Sheets("Standalone Non Clustered").Range("G10").Formula = "=CEILING(Worksheet!$G$9*(1+Worksheet!$G$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("H10").Formula = "=CEILING(Worksheet!$H$9*(1+Worksheet!$H$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("I10").Formula = "=CEILING(Worksheet!$I$9*(1+Worksheet!$I$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("J10").Formula = "=CEILING(Worksheet!$J$9*(1+Worksheet!$J$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("K10").Formula = "=CEILING(Worksheet!$K$9*(1+Worksheet!$K$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("L10").Formula = "=CEILING(Worksheet!$L$9*(1+Worksheet!$L$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("M10").Formula = "=CEILING(Worksheet!$M$9*(1+Worksheet!$M$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("N10").Formula = "=CEILING(Worksheet!$N$9*(1+Worksheet!$N$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("O10").Formula = "=CEILING(Worksheet!$O$9*(1+Worksheet!$O$10+Info!$B$14),5)" 
    Sheets("Standalone Non Clustered").Range("P10").Formula = "=CEILING(Worksheet!$P$9*(1+Worksheet!$P$10+Info!$B$14),5)" 

Посмотрите, как каждый диапазон идет от G до P в алфавите, и формула в каждой строке настраивается для этого столбца G-P. Есть ли способ иметь одну строку для Range («G10: P10») и изменить формулу, основываясь на том, какой столбец на самом деле находится в электронной таблице?

Edit:

Удаления $ синтаксис устранил проблему, но я иду с другой проблемой:

Say У меня есть набор диапазонов переменной, и я хочу, чтобы добавить строку в этом переменный диапазоне и использовать эту переменную в приведенной выше формуле. Как бы я идти о увеличивающемся этом переменном на 1.

 Set shownDatabaseRows = Sheets("Standalone Non Clustered").Range("10:10") 
Set hiddenDatabaseRows = Sheets("Standalone Non Clustered").Range("11:108") 

hiddenDatabaseRows.EntireRow.Hidden = True 
shownDatabaseRows.EntireRow.Hidden = False 

    Sheets("Standalone Non Clustered").shownDatabaseRows.Formula = "=CEILING(Worksheet!G$9*(1+Worksheet!G$10+Info!$B$14),5)" 


For Each cell In rng 

    If cell.Value >= 2048 Then 


     shownDatabaseRows = shownDatabaseRows.Count + 1 

     shownDatabaseRows.EntireRow.Hidden = False 

       Sheets("Standalone Non Clustered").shownDatabaseRows.Formula = "=(CEILING(Worksheet!G$9*(1+Worksheet!G$10+Info!$B$14),5))/2" 

     ... 

Я получаю ошибку в формуле строках так им мышление, что что-то не так с тем, как я настраиваю переменную shownDatabaseRows. есть идеи?

+0

Лучше начать другой вопрос. 'Count' доступен только для чтения, вы не можете его изменить. Я не понимаю, чего вы хотите. Добавить новую строку в showDatabaseRows? 'Set показаноDatabaseRows = Union (показаноDatabaseRows, cell.EntireRow)'? 'Таблицы (« Автономный без кластеризации »). Показано, что« База данных »не имеет смысла. –

+0

Я задал новый вопрос: http://stackoverflow.com/questions/17789077/adding-an-offset-row-to-a-given-range-excel-vba – user1305569

ответ

4

Sheets("Standalone Non Clustered").Range("G10:P10").Formula = "=CEILING(Worksheet!R9C[0]*(1+Worksheet!R10C[0]+Info!$B$14),5)"

+0

удаление $ сработало, но проблема с переменной диапазона проверить мое редактирование – user1305569

0

Что-то вроде ....

Sheets("Standalone Non Clustered").Range("G10").Formula = "=CEILING(Worksheet!$G$9*(1+Worksheet!$G$10+Info!$B$14),5)" 
Sheets("Standalone Non Clustered").Range("G10:P10").FillRight 
2

Вы всегда можете задать формулу для диапазона, таких как G10:P10 в вашем случае

Sheets("Standalone Non Clustered").Range("G10:P10").Formula = "=CEILING(Worksheet!G9*(1+Worksheet!G10+Info!$B$14),5)" 

просто удалить $ из ссылок на ячейки, которые должны быть динамически изменяется.

Также вы можете следовать Set formula to a range of cells для уточнения подробностей.

+0

Хорошо, поэтому просто удаление $ будет иметь формулу auto измените, даже если он устанавливает каждую строку = формулу с G в качестве столбца? – user1305569

+0

Как я могу видеть в 'Set показаноDatabaseRows = Таблицы (« Автономный без кластеризации »). Диапазон (« 10:10 »)', вы не упомянули столбец, поэтому я не уверен, что вы добьетесь через 'Таблицы («Standalone Non Clustered»). ShowDatabaseRows.Formula = "= ПОТОЛОК (Рабочий лист! G $ 9 * (1 + Рабочий лист! G $ 10 + Info! $ B $ 14), 5)". – AKS

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