Tellers

Status
Niet open voor verdere reacties.

giten

Gebruiker
Lid geworden
2 feb 2009
Berichten
80
Ik heb een bestand met 2 arrays. Ik wil graag dat deze in een resultaatblad worden geplaatst met alle mogelijke combinaties. Als beide arrays dus 2 waarden hebben resulteert dat in 4 rijen.

Met hulp van enkelen hier ben ik op het volgende gekomen. Dit is het deel waar het om gaat:

array1 = Sheets("sheet").Range("a1", Sheets("sheet").Range("a1").End(xlDown))
array2 = Sheets("sheet").Range("b1", Sheets("sheet").Range("b1").End(xlDown))

teller1 = 1
teller2 = 1
teller3 = 1


For teller3 = 1 To UBound(array1) * UBound(array2)


If teller1 = UBound(array1) + 1 Then
teller1 = 1
teller2 = teller2 + 1
End If


With Sheets("resultaat")
.Range("a1") = array1(teller1, 1)
.Range("b2") = array2(teller2, 1)
End With


teller1 = teller1 + 1

next


Nu gaat het erom dat ik geen 2, maar 3 (of meer) arrays wil hebben.

Hoe pak ik dit aan?
 
Volgens mij is de linkerzijde in:

Code:
With Sheets("resultaat")
.Range("a1") = array1(teller1, 1)
.Range("b2") = array2(teller2, 1)
End With

verkeerd. Je hebt daar nl. steeds cellen A1 en B1 waardoor je telkens overschrijft...

Code:
With Sheets("resultaat")
.Range("a" & teller3) = array1(teller1, 1)
.Range("b" & teller3) = array2(teller2, 1)
End With

Wigi
 
Laatst bewerkt:
Je hebt helemaal gelijk. In het originele script het ik het plak-gedeelte ook op die manier gedaan. Bij het versimpelen om het hier te kunnen vragen is er alleen iets misgegaan.

Overigens ben ik zelf al op het antwoord gekomen. Toch bedankt!
 
En zonder al die lussen:

Code:
Sub fff()

    array1 = Sheets(1).Columns(1).SpecialCells(2, 2)
    array2 = Sheets(1).Columns(2).SpecialCells(2, 2)

    With Sheets(2).[B1].Resize(UBound(array1) * UBound(array2))
    
        .Value = Application.Transpose(Split(Replace(String(UBound(array1), "#"), "#", Join(Application.Transpose(array2), "|") & "|"), "|"))
        With .Offset(, -1)
            .Value = Application.Transpose(Split(Replace(Join(Application.Transpose(array1), "|") & "|", "|", String(UBound(array2), "|")), "|"))
            .SpecialCells(4).Formula = "=R[-1]C"
            .Value = .Value
        End With

    End With

End Sub

Met dank aan de inzichten van Snb :thumb: Hopelijk heb ik goed opgelet.

Wigi
 
Laatst bewerkt:
Wow, dit gaat me even te ver. Maar goed, het werkt nu zoals ik het heb. Misschien niet de meest nette methode, maar het werkt. Ik ben maar een beginneling. :)
 
Heb ik nog een andere vraag:

Ik wil teller4 af laten hangen van de inhoud van een bepaalde cel.

Als cel H3=3 dan:

For teller4 = 1 To UBound(array1) * UBound(array2) * UBound(array4)

en als cel H3=2 dan:

For teller4 = 1 To UBound(array1) * UBound(array2)


Daar is vast een makkelijke oplossing voor.
 
Zoiets bijvoorbeeld:

Code:
For teller4 = 1 To UBound(array1) * UBound(array2) * IIf(Range("H3") = 3, UBound(array4), 1)

En voor de gevorderden :D

Code:
Sub f()

    array1 = Sheets(1).Columns(1).SpecialCells(2, 2)
    array2 = Sheets(1).Columns(2).SpecialCells(2, 2)
    With Sheets(2).[B1].Resize(UBound(array1) * UBound(array2))
        .Value = Application.Transpose(Split(Replace(String(UBound(array1), "#"), "#", Join(Application.Transpose(array2), "|") & "|"), "|"))
        With .Offset(, -1)
            .Value = Application.Transpose(Split(Replace(Replace(Join(Application.Transpose(array1), "#|") & _
                "#", "#", String(UBound(array2) - 1, "#")), "#", "|" & "=R[-1]C"), "|"))
            .Value = .Value
        End With
    End With

End Sub
 
Dat is em, bedankt!

En misschien gebruik ik die versie voor gevorderden ook nog eens. :)
 
Dat is em, bedankt!

En misschien gebruik ik die versie voor gevorderden ook nog eens. :)

Als je 'm niet zo goed begrijpt, niet doen dan ;) Uiteindelijk moet jij dit hier gaan onderhouden bij wijzigingen. :eek:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan