2015-07-27 4 views
0

Название может быть похоже на другие вопросы, но насколько я могу судить, никто не спросил об этом. Я пытаюсь пройти через все столбцы и добавить их сумму внизу после последней строки и сделать значения до суммы серым. До этого момента я пишу каждое имя столбца, но листы продолжают увеличиваться, и это становится пустой тратой времени, потому что я знаю, что должен быть лучший способ. Пожалуйста, имейте в виду, что я новичок в VBA. Секция кода:Как вы обходите столбцы в пределах диапазона в Excel VBA

LR = Range("I" & Rows.Count).End(xlUp).Row 
Range("I1:I" & LR & "").Interior.Color = RGB(217, 217, 217) 
Range("I" & LR + 2).Formula = "=SUM(I2:I" & LR & ")" 
LR = Range("J" & Rows.Count).End(xlUp).Row 
Range("J1:J" & LR & "").Interior.Color = RGB(217, 217, 217) 
Range("J" & LR + 2).Formula = "=SUM(J2:J" & LR & ")" 
LR = Range("K" & Rows.Count).End(xlUp).Row 
Range("K1:K" & LR & "").Interior.Color = RGB(217, 217, 217) 
Range("K" & LR + 2).Formula = "=SUM(K2:K" & LR & ")" 
LR = Range("L" & Rows.Count).End(xlUp).Row 
Range("L1:L" & LR & "").Interior.Color = RGB(217, 217, 217) 
Range("L" & LR + 2).Formula = "=SUM(L2:L" & LR & ")" 

Надеюсь, вы увидите решение, используя петлю. Спасибо.

ответ

2

Нет необходимости в цикле вообще здесь для этого:

Dim LR     As Long 
Dim sLastCol    As String 

' change this as needed 
sLastCol = "L" 

LR = Range("I" & Rows.Count).End(xlUp).Row 

Range("I1", Cells(LR, sLastCol)).Interior.Color = RGB(217, 217, 217) 
Range("I" & LR + 2, sLastCol & LR + 2).FormulaR1C1 = "=SUM(R2C:R[-2]C)" 

или если вы можете определить, последний столбец, используя последнюю населенную ячейку в строке 1, вы можете использовать:

Dim LR     As Long 
Dim lLastCol    As Long 

LR = Range("I" & Rows.Count).End(xlUp).Row 
lLastCol = Cells(1, Columns.Count).end(xltoleft).column 

Range("I1", Cells(LR, lLastCol)).Interior.Color = RGB(217, 217, 217) 
Range("I" & LR + 2, Cells(LR + 2, lLastCol)).FormulaR1C1 = "=SUM(R2C:R[-2]C)" 
+0

Спасибо, пока что это именно то, что мне нужно. Есть ли способ определить значение sLastCol так, чтобы оно было равно последнему активному столбцу на листе? – Thrillho

+0

@Thrillho Да - см. Отредактированный ответ. – Rory

1

Я использую цикл do while через количество строк.

lRow = 1 

    'Loop through and record what is in the first column 
    Do While lRow <= LR.Rows.count 

     'Do you code here. 

     lRow = lRow + 1 
     Range("A" & lRow).Activate 
    Loop 
Смежные вопросы