In a number of cases, the order of nesting of loops (and conditional tests) is not important: All must be done, but the order of nesting does not change the result. Example: Sum the cells in a three-dimensional array. Dim dblTotal As Double dblTotal = 0# For k = 1 To MaxK For j = 1 To MaxJ For i = 1 To MaxI dblTotal = dblTotal + arrValues(i, j, k) Next i Next j Next k ' Use "dblTotal" here... ...can safely be changed to... Dim dblTotal As Double dblTotal = 0# For i = 1 To MaxI For j = 1 To MaxJ For k = 1 To MaxK dblTotal = dblTotal + arrValues(i, j, k) Next k Next j Next i ' Use "dblTotal" here... ----- Q: Why do this? A1: We might want to print subtotals as our next move. Dim dblTotal As Double Dim dblTotalI As Double Dim dblTotalJ As Double Dim dblValueK As Double dblTotal = 0# For i = 1 To MaxI dblTotalI = 0# For j = 1 To MaxJ dblTotalJ = 0# For k = 1 To MaxK dblValueK = arrValues(i, j, k) dblTotalJ = dblTotalJ + dblValueK Next k Print "Total for i=" & i & ", j=" & j & " is " & dblTotalJ dblTotalI = dblTotalI + dblTotalJ Next j Print "Total for i=" & i & " is " & dblTotalI dblTotal = dblTotal + dblTotalI Next i ' Use "dblTotal" here... Print "Final total is " & dblTotal A1b: To support other refactoring moves... ''From...'' If x Then If y Then '''Do A.''' Else Do B. End If Else If y Then '''Do A.''' Else Do C. End If End If ''To...'' If y Then If x Then '''Do A.''' Else '''Do A.''' End If Else If x Then Do B. Else Do C. End If End If ''then...'' If y Then '''Do A.''' Else If x Then Do B. Else Do C. End If End If ----- Q: Why do this? A2: It may be necessary to make the code more efficient or intuitive. Here 's a real example, taken from production code: For i = 1 To MaxI For j = 1 To MaxJ If Data(i) = 0 Then ' Do important processing. End If Next j Next i changed to... For i = 1 To MaxI If Data(i) = 0 Then For j = 1 To MaxJ ' Do important processing. Next j End If Next i Because we don't need to determine if "Data(i)" is processable '''MaxJ TIMES''' (for each and every i)!!! This example was the inspiration for creating this page -- and the first few generic examples. -- JeffGrigg ----- Q: Why do this? A3: It can be used to increase locality of reference so as to not hammer your system cache as much. -- AlastairBridgewater ----- Q: Why do this? A4: Because my brain likes things to be in order. Therefore: for i... for j... for k... reads easier than for j... for i... for k... ---- Or you might choose the J (JayLanguage) statement: theTotal =: +/,theArray which works for any rank array, not just the rank 3 array being discussed. --JimRussell ---- [CategoryRefactoring/RefactoringLanguage]