Hej Eksperter, Jeg har to 2-dimensional arrays - Array1(1,2) og Array2(5,2). Dvs. Array1 er en record og Array2 er en table med records. Jeg ønsker at tilføje records til tablen.
Betingelsen er at tilføje Array1 til Array2, kun såfremt først kollonne som er nøgle ikke er i Array2 i forvejen. Er den i Array2 skal Array2 overskrives med værdierne fra Array1 for den givne record.
Det hele skal ske i VBA og kun med en læsning fra worksheet range og en skrivning til worksheet range.
Eksempel:
Array1: Grp CurrentPlan G 10
Array2: Grp CurrentPlan F 1 B 2 C 3
Resultat i Array2 Array2: Grp CurrentPlan F 1 B 2 C 3 G 10
Prøv engang at kigge på denne kode, og se om du efterfølgende kan få hul igennem din egen kode...
Sub ArrayDemo() Dim aSource As Variant, aTarget As Variant Dim iLastTarget As Integer, iNewMax As Integer Dim x As Integer, y As Integer
' Opret et target array 3,2 med indhold ReDim aTarget(1 To 3, 1 To 2) aTarget(1, 1) = "Allan" aTarget(1, 2) = "1" aTarget(2, 1) = "Bente" aTarget(2, 2) = "2" aTarget(3, 1) = "Casper" aTarget(3, 2) = "3"
' Opret et source array 1,2 med indhold ReDim aSource(1 To 1, 1 To 2) aSource(1, 1) = "Doris" aSource(1, 2) = "4"
' Udvid target array så alt fra source array kan fyldes deri iLastTarget = UBound(aTarget, 1) iNewMax = iLastTarget + UBound(aSource, 1)
' Et to demintionelt array kan ikke udvides i første demintion, men kun i den anden, ' derfor må array'et vendes rundt, udvides og vendes tilbage igen aTarget = TransposeArray(aTarget) ' byt om ReDim Preserve aTarget(1 To 2, 1 To iNewMax) ' udvid aTarget = TransposeArray(aTarget) ' byt retur
' Indsæt nye værdier For x = LBound(aSource, 1) To UBound(aSource, 1) For y = LBound(aSource, 2) To UBound(aSource, 2) aTarget(iLastTarget + x, y) = aSource(x, y) Next y Next
Public Function TransposeArray(ByVal aSource As Variant) As Variant Dim aRetVal As Variant Dim lRow As Long, lCol As Long
ReDim aRetVal(LBound(aSource, 2) To UBound(aSource, 2), LBound(aSource, 1) To UBound(aSource, 1)) For lRow = LBound(aSource, 1) To UBound(aSource, 1) For lCol = LBound(aSource, 2) To UBound(aSource, 2) aRetVal(lCol, lRow) = aSource(lRow, lCol) Next lCol Next lRow
TransposeArray = aRetVal End Function
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.