2016-07-25 9 views
0

У меня есть таблица, где я пытаюсь многократно заполнять столбец K конкретными данными из разных, но похожих точек (80 ячеек вниз для каждой итерации) в столбце E.Настройка цикла в Excel VBA для повторного подбора определенного диапазона

Таким образом, K2 должен, например, отображать общее количество E25 + E35 + E42 + E56 + E63.

Затем K3 должен отображать общее количество E105 + E185 + E122 + E136 + E143.

Я написал макрос, который делает первый шаг (и работает), которая выглядит следующим образом:

Sub disctoptest() 

Dim source As Range 
Dim destination As Range 
Dim total As Long 

Set destination = Range("K2") 
Set source = Range("E25") 

total = WorksheetFunction.Sum(_ 
source.Value + _ 
source.Offset(10, 0).Value + _ 
source.Offset(17, 0).Value + _ 
source.Offset(31, 0).Value + _ 
source.Offset(38, 0).Value) 

destination.Select 

destination.Value = total 

Set source = Nothing 
Set destination = Nothing 

End Sub 

Затем я вставил цикл, чтобы повторить операцию для полноты базы данных, но всякий раз, когда я запускайте добавленный макрос excel либо зависает, либо просто отказывается работать. Это код, я использую для цикла:

Sub disctop() 

Dim source As Range 
Dim destination As Range 
Dim total As Long 

Set destination = Range("K2") 
Set source = Range("E25") 

Do until destination.offset(0, -1) = "" 

destination.Select 

total = WorksheetFunction.Sum(_ 
source.Value + _ 
source.Offset(10, 0).Value + _ 
source.Offset(17, 0).Value + _ 
source.Offset(31, 0).Value + _ 
source.Offset(38, 0).Value) 

destination.Value = total 

source = source.Offset(80, 0) 
destination = destination.Offset(1, 0) 

Loop 

Range("A1").Activate 

Set source = Nothing 
Set destination = Nothing 

End Sub 

В случае может быть проще в использовании другого типа цикла, мне нужно повторить операцию ровно 680 раз в колонке K.

Любой советы и рекомендации были бы очень признательны!

+0

Это можно сделать с помощью формулы, которую можно перетащить, которая будет автоматически обновляться. –

+0

Какая формула? –

+0

Вам необходимо установить источник и назначение внутри цикла. Вы создаете бесконечный цикл, помещая значения смещений в диапазоны и не сворачивая сам диапазон на смещение. –

ответ

0

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

Set source = source.Offset(80, 0) 
Set destination = destination.Offset(1, 0) 

Также

destination.offset(0, -1) = "" никогда не возвращает истину, как функция SUM возвратит 0, даже если все пять ссылок пустые.

Так что вам нужно будет проверить что-то еще, как: Total = 0


Или вы можете сделать это с помощью следующей формулы:

=INDEX(E:E,25+((ROW(1:1)-1)*80)) +INDEX(E:E,35+((ROW(1:1)-1)*80)) +INDEX(E:E,42+((ROW(1:1)-1)*80)) + INDEX(E:E,56+((ROW(1:1)-1)*80)) +INDEX(E:E,63+((ROW(1:1)-1)*80)) 

Помещенный в K2 и скопировать вниз.

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