Avatar billede bak Forsker
11. december 2001 - 13:58 Der er 15 kommentarer og
1 løsning

VBA Dynamisk datatabel i begge retninger

Med henvisning til http://www.eksperten.dk/spm/144746 kunne jeg godt tænke mig at se om det er muligt at også antallet af kolonner kunne gøres dynamisk.
Jeg ønsker at der kan være et vilkårligt antal kolonner, og et vilkårligt antal rækker i hver kolonne.
Outputtet skal være en listning af alle kombinationer og komme ud i lige så mange kolonner som inputtet.
Dvs. at hvis der i inputarket er 3 kolonner med hhv. 10, 10 og 4 rækker bliver outputtet 3 kolonner og 400 rækker.
Håber jeg har gjort det forståeligt!
11. december 2001 - 14:03 #1
Du er forståelig for mig.
Avatar billede janvogt Praktikant
11. december 2001 - 14:15 #2
Også forståeligt for mig.
Udmærket spørgsmål, men forvent ikke et svar fra mig :-)
Måske askims eller lrp eller andre har et bud.
11. december 2001 - 14:54 #3
Jeg gider ikke at lave det, men jeg kan godt give et par ideer.

Tæl antal kolonner i række 1
For i = 1 to antalKolonner
    sMatrix = Column(i).CountA & \",\"          \'Skal indeholde noget mere, men gi\'r dig nok ideen.
Next i
    sMatrix = Left(sMatrix, Len(sMatrix)-1)  \'For at fjerne det sidste komma
\'sMatrix ser nok sådan ud nu 10,10,4 - med det eks. du har angivet.

Redim MyMatrix (sMatrix)        \'Aner ikke om det virker, men måske

Husk at lave et check på, at du ikke smutter over 65536 rækker :-)

Håber det hjælper dig på vej.
Avatar billede bak Forsker
11. december 2001 - 16:02 #4
Det er iorden, Flemming.
I denne her forbindelse er det ideerne der tæller
Bak
11. december 2001 - 16:20 #5
sMatrix = Column(i).CountA & \",\" - skal nok vendes lidt om - men du kender jo funktionen.
sMatrix = .....CountA(column(1)) & \",\"

Avatar billede bak Forsker
14. december 2001 - 15:31 #6
OK, Nu har jeg fået hul på den således at alle kolonner og rækker læses ind i x antal array\'s og jeg kan såmænd også få dem ud igen, bare ikke i rigtig rækkefølge og sammensætning.
Nu er problemet: hvordan får jeg dem nu parret sammen så de kan komme rigtigt ud??
Avatar billede bak Forsker
14. december 2001 - 15:34 #7
Hvis array1 indeholder 10 numre, array2 10 numre og array3 4 numre, hvordan får jeg nu lavet en/flere løkker der parrer disse???. Bemærk at der kan blive flere end 3 arrays
14. december 2001 - 15:37 #8
må jeg se din kode indtil nu - det hjælper nok lidt
Avatar billede bak Forsker
14. december 2001 - 15:38 #9
Jeg bliver lige nødt til at vente med at poste kode til jeg kommer hjem. OK??
14. december 2001 - 15:47 #10
OK - jeg er ikke hjemme i aften, men i morgen engang.
17. december 2001 - 01:50 #11
hvordan går det ?
Avatar billede bak Forsker
17. december 2001 - 12:17 #12
Det går knap så godt. Her er koden så vidt.
Option Base 1
Sub test1()
Set AWF = Application.WorksheetFunction
Dim Matrix, NoOfRowMatrix
Dim a, x, y, z, MaxColumns, MaxRows As Integer
MaxRows = 0
Totalrows = 1
With AWF
    MaxColumns = .CountA(Range(\"1:1\")) \'tæl kolonner
    ReDim NoOfRowMatrix(MaxColumns) \'Array til at holde antal i kolonne
    For x = 1 To MaxColumns
        NoOfRowMatrix(x) = .CountA(Columns(x)) - 1 \'antal rækker pr kolonner
        \'** find største antal rækker
        If NoOfRowMatrix(x) > MaxRows Then MaxRows = NoOfRowMatrix(x)
        \'*** beregn det antal rækker der bliver brug for
        Totalrows = Totalrows * NoOfRowMatrix(x)
    Next x
End With
If Totalrows > 65000 Then Exit Sub \'hvis der er for mange rækker så stop
ReDim Matrix(MaxRows, MaxColumns)  \'Dim Matrix ex. (10,3)
\'Data ind i matrix
For z = 1 To MaxColumns
    For y = 1 To NoOfRowMatrix(z)
      Matrix(y, z) = Cells(y + 1, z)
    Next y
Next z

\'data ud fra matrix
With Worksheets(\"Ark2\")
  For z = 1 To MaxColumns
      For y = 1 To NoOfRowMatrix(z)
        .Cells(y, z) = Matrix(y, z)
      Next
  Next z
End With
End Sub
Avatar billede bak Forsker
17. december 2001 - 12:23 #13
Som sagt er problemet at skrive en løkke der kan tage data ud af matrix\'en og i korrekt rækkefølge.
Matrix\'en er lavet således at matrix(10,1) indeholder kol. A. Matrix(10,2) = kol. B. og matrix(10,3) = Kol C.
NoOfRowsMatrix(x) indeholder så hvor mange elementer der aktuelt er i  kol (x).
Avatar billede bak Forsker
17. december 2001 - 16:50 #14
OK, så kan jeg også tage data ud i rigtig rækkefølge, men det kan sikkert blive bedre.
With Worksheets(\"Ark2\")
  For z = 1 To MaxColumns
  repetion = 1
    For x = z + 1 To MaxColumns
        repetion = repetion * NoOfRowMatrix(x)
    Next x
        a = 1
    While a <= totalrows
        For y = 1 To NoOfRowMatrix(z)
            For i = 1 To repetion
                .Cells(a, z) = Matrix(y, z)
                a = a + 1
            Next i
        Next y
    Wend
  Next z
End With
17. december 2001 - 19:07 #15
bak>> jeg har set det, men kigger nok ikke på det før end i morgen.
17. december 2001 - 19:08 #16
hmmm - hvad er det jeg har set, når jeg først kigger i morgen .... LOL
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester