Можно ли переименовать массив в L oop в VBA? - PullRequest
0 голосов
/ 28 апреля 2020

Я искал много тем, но ни одна не помогла с моей проблемой. Можно ли l oop имена массивов? Вот фрагмент моего кода, который отлично работает, но я смотрю, можно ли его сократить.

Вместо использования имени массива Disp1(6,1), Disp2(6,1), Disp3(6,1) etc или LNIF1, LNIF2, LNIF3, et c.

Возможно ли иметь имя массива в пределах al oop, например, Disp[i](6,1) for i = 1 to 10 или, возможно, LNIF[i] for i = 1 to 10

Любая помощь будет приветствоваться. Спасибо

kLocal = kL     'note kLocal is 6x6 matrix
NodalD = Application.WorksheetFunction.MMult(kInverse, NodalF)  'NodalD is a 33x1 matrix


Dim NodalIF(33, 1) As Double

Dim Disp1(6, 1)
Dim LNIF1 As Variant                ' Local Elem1 Internal Forces

Dim Disp2(6, 1)
Dim LNIF2 As Variant                 ' Local Elem2 Internal Forces

Dim Disp3(6, 1)
Dim LNIF3 As Variant                 ' Local Elem3 Internal Forces

Dim Disp4(6, 1)
Dim LNIF4 As Variant                 ' Local Elem4 Internal Forces

Dim Disp5(6, 1)
Dim LNIF5 As Variant                 ' Local Elem5 Internal Forces

Dim Disp6(6, 1)
Dim LNIF6 As Variant                 ' Local Elem6 Internal Forces

Dim Disp7(6, 1)
Dim LNIF7 As Variant                 ' Local Elem7 Internal Forces

Dim Disp8(6, 1)
Dim LNIF8 As Variant                 ' Local Elem8 Internal Forces

Dim Disp9(6, 1)
Dim LNIF9 As Variant                 ' Local Elem9 Internal Forces

Dim Disp10(6, 1)
Dim LNIF10 As Variant                 ' Local Elem10 Internal Forces


For i = 1 To 6

Disp1(i, 1) = NodalD(i, 1) 
Disp2(i, 1) = NodalD(i + 3, 1) 
Disp3(i, 1) = NodalD(i + 6, 1) 
Disp4(i, 1) = NodalD(i + 9, 1) 
Disp5(i, 1) = NodalD(i + 12, 1) 
Disp6(i, 1) = NodalD(i + 15, 1) 
Disp7(i, 1) = NodalD(i + 18, 1) 
Disp8(i, 1) = NodalD(i + 21, 1) 
Disp9(i, 1) = NodalD(i + 24, 1) 
Disp10(i, 1) = NodalD(i + 27, 1) 
Next

LNIF1 = Application.WorksheetFunction.MMult(kLocal, Disp1)
LNIF2 = Application.WorksheetFunction.MMult(kLocal, Disp2)
LNIF3 = Application.WorksheetFunction.MMult(kLocal, Disp3)
LNIF4 = Application.WorksheetFunction.MMult(kLocal, Disp4)
LNIF5 = Application.WorksheetFunction.MMult(kLocal, Disp5)
LNIF6 = Application.WorksheetFunction.MMult(kLocal, Disp6)
LNIF7 = Application.WorksheetFunction.MMult(kLocal, Disp7)
LNIF8 = Application.WorksheetFunction.MMult(kLocal, Disp8)
LNIF9 = Application.WorksheetFunction.MMult(kLocal, Disp9)
LNIF10 = Application.WorksheetFunction.MMult(kLocal, Disp10)

i = 1
NodalIF(i, 1) = -LNIF1(1, 1)
NodalIF(i + 1, 1) = LNIF1(2, 1)
NodalIF(i + 2, 1) = LNIF1(2, 1)

i = 4
NodalIF(i, 1) = LNIF1(4, 1)
NodalIF(i + 1, 1) = LNIF1(5, 1)
NodalIF(i + 2, 1) = LNIF1(6, 1)

i = 7
NodalIF(i, 1) = LNIF2(4, 1)
NodalIF(i + 1, 1) = LNIF2(5, 1)
NodalIF(i + 2, 1) = LNIF2(6, 1)

i = 10
NodalIF(i, 1) = LNIF3(4, 1)
NodalIF(i + 1, 1) = LNIF3(5, 1)
NodalIF(i + 2, 1) = LNIF3(6, 1)

i = 13
NodalIF(i, 1) = LNIF4(4, 1)
NodalIF(i + 1, 1) = LNIF4(5, 1)
NodalIF(i + 2, 1) = LNIF4(6, 1)

i = 16
NodalIF(i, 1) = LNIF5(4, 1)
NodalIF(i + 1, 1) = LNIF5(5, 1)
NodalIF(i + 2, 1) = LNIF5(6, 1)

i = 19
NodalIF(i, 1) = LNIF6(4, 1)
NodalIF(i + 1, 1) = LNIF6(5, 1)
NodalIF(i + 2, 1) = LNIF6(6, 1)

i = 22
NodalIF(i, 1) = LNIF7(4, 1)
NodalIF(i + 1, 1) = LNIF7(5, 1)
NodalIF(i + 2, 1) = LNIF7(6, 1)

i = 25
NodalIF(i, 1) = LNIF8(4, 1)
NodalIF(i + 1, 1) = LNIF8(5, 1)
NodalIF(i + 2, 1) = LNIF8(6, 1)

i = 28
NodalIF(i, 1) = LNIF9(4, 1)
NodalIF(i + 1, 1) = LNIF9(5, 1)
NodalIF(i + 2, 1) = LNIF9(6, 1)

i = 31
NodalIF(i, 1) = LNIF10(4, 1)
NodalIF(i + 1, 1) = LNIF10(5, 1)
NodalIF(i + 2, 1) = LNIF10(6, 1)
...