Jeg ved ikke, om det er den nemmeste løsning, men den virker. Problemet er, at man kun kan udvide et array i sidste dimension, og når du henter data fra Excel ved arr=range,så har du brug for at udvide i første dimension. Du skal derfor først "vende" arrayet, udvide, tilføje og så "vende" igen.
Function AddToArr() Dim vArr() As Variant Dim vArrKolA() As Variant Dim vTempArr() As Variant Dim x As Integer
vArr() = Range("f2:f6") vArrKolA = Range("a2:a6")
' Du kan kun tilføje til sidste dimension i et array ' derfor skal arrayet vendes TransponeArray_Var vArr(), vTempArr()
' Redimensioner dit temp array ReDim Preserve vTempArr(LBound(vTempArr, 1) To UBound(vTempArr, 1), _ LBound(vTempArr, 2) To UBound(vTempArr, 2) + UBound(vArrKolA, 1)) As Variant
' Indsæt data fra kolonne a For x = LBound(vArrKolA, 1) To UBound(vArrKolA, 1) Step 1 vTempArr(1, x + UBound(vArr, 1)) = vArrKolA(x, 1) Next x
' Vend igen for korrekt udlæsning til cellerne TransponeArray_Var vTempArr(), vArr() Range("g2:g11") = vArr() End Function
Function TransponeArray_Var(ByRef InputArray() As Variant, ByRef OutputArray() As Variant) ' Transpones a Variant array into a new array Dim x As Long Dim y As Long
ReDim OutputArray(LBound(InputArray, 2) To UBound(InputArray, 2), LBound(InputArray, 1) To UBound(InputArray, 1)) As Variant
For x = LBound(InputArray, 2) To UBound(InputArray, 2) Step 1 For y = LBound(InputArray, 1) To UBound(InputArray, 1) Step 1 OutputArray(x, y) = InputArray(y, x) Next y Next x End Function
Hvis der er, kunne jeg også godt tænke mig at kende den, men jeg tvivler, da man kun kan udvide et array i sidste dimension. I et array, der er hentet fra en range, står rækker i første dimension og kolonner i sidste. Hvis du vil koble data på kolonnevis, kan du bare skrive
redim preserve array(lbound(array,1) to ubound(array,1), lbound(array,2) to ubound(array,2) + antal kolonner, du vil have på) og så tilføje data.
Hvis det drejer sig om rækker, er du nødt til at vende arrayet, så rækkker kommer til at stå i sidste dimension for at du kan udvide det.
Det er jo trods alt kun tre step 1) vend array (funktionben TransponeArray_Var) 2) udvid array 3) vend array tilbage
Jeg har lagt funktionen TransponeArray_Var i en klasse, som jeg bare lægger ind, når jeg skal bruge den. Så kan den jo genbruges :-)
Det er jeg næsten klar over, men man kan som sagt kun føje til i sidste dimension af et array, og når man henter et array fra Range, står rækkerne desværre i første dimension.
Selvom koden ser voldsom ud, er det jo blot
1) Vend array, så rækkerne kommer i sidste dimension 2) Udvid ved at ReDim array 3) Tilføj til dit array 4) Vend igen array, så der kan skrives til en Range i dit Excelark.
Bemærk, at der er to funktioner. Den sidste af dem er den, der vender arrayet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.