2015-06-22 4 views
0
Dim x As Integer 
Dim y As Integer 
For y = 3 To 3 
For x = 600 To 1 Step -1 
    If Cells(x, y).Value = "CD COUNT" Then 
     Cells(x, y).EntireRow.Select 
     Selection.EntireRow.Hidden = True 
     End if 
If Cells(x, y).Value = "CD Sector Average" Then 
     Cells(x, y).EntireRow.Select 
     Selection.Insert Shift:=xlDown 
     Cells(x + 1, y - 1).Select 
     ActiveCell.FormulaR1C1 = "=R[0]C[1]" 
     Cells(x + 1, y + 1).Select 
     Selection.ClearContents 
     Cells(x + 1, y + 2).Select 
     Selection.ClearContents 
     Cells(x + 1, y + 3).Select 
     Selection.ClearContents 
     Cells(x + 1, y + 4).Select 
     ActiveCell.FormulaR1C1 = ***"=sum(R[This is what I need to change]C:R[-3]C"*** 
     Cells(x + 2, y).Select 
    End If 

Мне нужно, чтобы выделенная формула выходила в виде суммы столбца, которая заканчивается на 3 строки выше средней строки сектора и запускает номер, отображаемый в ячейке в Count Row.Использование сохраненного целого числа в качестве ссылки на ячейку

Я попытался это не дало никаких результатов в счете, если заявление

Dim count As Integer 
count = Cells(x , y).Value 

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

+0

Возможно, я недопонимаю, но похоже, что вы вводите этот оператор 'If', проверяя« Ячейки (x, y) .Value = «Сектор CD Average». Если 'Cells (x, y) .Value' равно' CD Sector Average', это не может быть «Целое» право? –

+0

Итак, в столбце B он ищет имена обеих вещей, но в столбце C есть числа. Столбец C очищается для среднего сектора, но я нужно использовать число в столбце C строки count как количество строк для добавления функции sum в средней строке сектора. Надеюсь, это имеет смысл. Поэтому я буду выбирать ячейку '(x, y + 1)' в счетчике для числа, которое мне нужно использовать. – Greg

ответ

0

Вы должны найти подходящую формулу для ввода в ячейку-мишень. Затем вы создадите такую ​​формулу с конкатенацией строк и т. Д., Чтобы ввести ее через VBA.

Одним из вариантов формулы является использование OFFSET, как в

=SUM(OFFSET($A$1,D3-1,COLUMN()-1):OFFSET($A$1,ROW()-3-1,COLUMN()-1)) 

Это суммирует все значения от cell1 к CELL2, в том же столбце, вы поместите формулу. Cell1: в строке, указанной значением в D3, Cell2: 3 строки над ячейкой, которая содержит формулу.

Другой вариант заключается в использовании INDIRECT, как и в

=SUM(INDIRECT("C"&D3):INDIRECT("C"&(ROW()-3))) 

Это подводит все значения от Cell1 до CELL2, в столбце C. Cell1: в строке, указанной величины в D3, CELL2: 3 строки выше ячейку, содержащую формулу.

+0

Будет ли это работать, если ячейка, на которую я ссылаюсь на C3 в примере, который у вас есть, изменена. Поэтому один раз это может быть C3, другой его C5? Если нет, то как я могу изменить он ссылается на ячейку прямо справа от ячейки, в которой говорится: «CD Count» – Greg

+0

Я отредактировал ответ, пока вы комментировали. Как сказано, вы построите формулу в VBA с соответствующей ссылкой (либо C3, C5, и т. Д.), Так что она будет работать. Я изменил C3 -> D3 в обновлении, чтобы соответствовать использованию столбца C в качестве исходных данных для суммирования. –

+0

Я использовал вашу косвенную формулу, но мне пришлось немного ее изменить, потому что мне пришлось добавить строку, которая использовала номер счета, чтобы возвращать номера строк в верхних и нижних рядах чисел, которые мне нужно было суммировать. Спасибо за идею! – Greg

0

Вы уже используете Cells(row, col) для ссылки на свое местоположение, чтобы вы точно знали, в какой строке вы находитесь. Поэтому:

ActiveCell.FormulaR1C1 = "=sum(R[" & x-3 & "C:R[" & X & "]C" 

даст вам Row("CD Sector Average")-3 через Row("CD Sector Average"). При необходимости отрегулируйте x-3 и x, так как я не на 100% уверен, какие строки вам нужно суммировать.

Кроме того, теперь, когда вы использовали Macro Recorder, чтобы получить базовый код (прекрасное место для начала, BTV, но он научит вас страшные кодирования привычки), почитайте How to avoid using Select in Excel VBA macros, чтобы узнать, как очистить ваш код.

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