2016-03-06 4 views
0

Я пытаюсь написать цикл double для цикла, чтобы извлечь какой-либо вывод из одного файла excel в другой файл.VBA Double For Loop

У меня есть несколько наборов данных, каждый из которых имеет несколько анализов, из которых я хочу извлечь информацию. Например, Dataset1 имеет анализ 1 и 2, набор данных 2 имеет анализ 5 и 6, Dataset3 имеет анализ 9 и 10 и т. Д.

Для каждого из этих анализов я хочу вызвать Extract1, макрос, который делает фактическую работу. Поскольку код довольно длинный, Extract1 вызывает Extract2, который продолжает код в Extract 1.

Я пробовал отлаживать это с помощью MsgBox. Когда я запускаю этот код, цикл входит в Dataset2 и Dataset3. Но для Dataset 2 и 3 он не входит в цикл Analysis. Кто-нибудь знает, в чем проблема?

Option Explicit 
Public Master As Workbook 
Public Source As Workbook 
Public IB As String 
Public IB2 As String 
Public IB3 As String 
Public IB4 As String 
Public Dataset As Double 
Public Analysis As Double 
Public Mean_Diff As Double 
Public Interaction As Double 

Sub looper() 

For Dataset = 1 To 3 

    For Analysis = ((Dataset - 1) * 4 + 1) To (Dataset * 2) 

     Extract1 

    Next Analysis 

Next Dataset 

End Sub 
+1

'((Dataset - 1) * 4 + 1) (Dataset * 2), имеющий 1' 'находится от 1 до 2' в 2' 5 до 4' и в 3 '9 до 6' .. математика убивает вас здесь;) –

+0

Ah. Понял! Спасибо. – arthurlgh90

+0

В связанном вопросе можно ли сделать цикл Excel через список, который не следует шаблону, но был предварительно определен (например, анализы 4, 9, 24, 30 и т. Д.)? – arthurlgh90

ответ

0

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

Dim aryAnlysis() as Variant 
aryAnlysis=Array("Analysis4","Analysis9", "Analysis24","Analysis30") 
For i = 0 to 3 
Call aryAnlysis(i) 
Next i