28. december 2009 - 15:27Der er
4 kommentarer og 1 løsning
fordele navne med en do løkke ???
Jeg har 3 forskellige navne i et range dem jeg skal fordele på nogle celler.
hver gang der i et angivet range står 1 skal der til højre for stå navn1 og næste gang der står 1 skal der til højre stå navn2 osv. der er mange flere 1'er end der er navne. når alle 1'ere har fået fordelt navne på sig. skal der fordeles samme 3 navne til alle celle hvor der står 2.
Jeg kan ikke finde ud af hvordan jeg får de 3 navne til at skifte i en uendelighed til der ikke er flere af det givne tal de skal fordele på.
Tak for proceduren, men det var ikke helt sådan jeg havde tænkt.
Navn1, Navn2 & Navn3 var bare eksempler. Praktisk bruger jeg Initialer på nogle folk, eksempelvis: KET, SJL, MOB, CHR og TKP.
1'ere og 2'ere indikerer egentlig en vagttype, som ligeså godt kunne hedde "aftenvagt", "middagsvagt eller "formiddagsvagt"
Forstil 2 ranges 1) medarbejdere-rng (A1:A5) indeholder KET, SJL, MOB, CHR og TKP én gang.
2) Vagt-rng (B15:B85) indeholder, "aftenvagt", "middagsvagt" og "formiddagsvagt" fordelt på de 70 celler i vilkårlig orden.
Jeg tænkte at man kunne bruge medarbejdere-rng som en slags stempel, sådan så den køre igennem ranget igen og igen og først tager alle "aftenvagt" og skifter medarbejder hvergang den har fundet en "aftenvagt" indtil der ikke er flere "aftenvagt" i vagt-rng, og så skulle den igen gennemgå vagt-rng på samme måde som først bare med en ny vagttype og så stemple den vagttype med initialer.
Sub Fordel2() Dim navn(5) Dim vagt(5) navn(1) = "KET": navn(2) = "SJL": navn(3) = "MOB": navn(4) = "CHR": navn(5) = "TKP": vagt(1) = "aftenvagt": vagt(2) = "middagsvagt": vagt(3) = "formiddagsvagt" For t = 1 To 5 For Each c In Range("B15:B85") If c = vagt(t) Then x = x + 1 If x > 5 Then x = 1 c.Offset(0, 1) = navn(x) End If Next x = 0 Next End Sub
Tusin tak endnu engang! Lige sådan jeg havde tænkt!!
Så komplekst magter jeg ikke at tænke endnu..!!
Skal lige høre hvorfor du dimisionere vagt(5) ?? er det bare en taste fejl eller?? fordi det virker når jeg dimisionere vagt(3), men kan jo godt være det har en betydning??
Har forsøgt at lave den dynamisk i forhold til antal medarbejdere og vagttyper, kan den laves mere optimalt?:
Sub Fordeling() Dim navn() Dim vagt()
With Range("A2") Set medarbRng = Range(.Offset(0, 0), .Offset(0, 0).End(xlDown)) End With
With Range("G2") Set vagtRng = Range(.Offset(0, 0), .Offset(0, 0).End(xlDown)) End With
With Range("B15") Set arbplan = Range(.Offset(0, 0), .Offset(0, 0).End(xlDown)) End With
navn = medarbRng.Value vagt = vagtRng.Value
For t = 1 To UBound(vagt())
For Each c In arbplan If c = vagt(t, 1) Then x = x + 1 If x > 5 Then x = 1 c.Offset(0, 1) = navn(x, 1) End If Next x = 0 Next
End Sub
Kunne det tænkes at man kunne fordele vagter til navn i vilkårlig rækkefølge, altså så alle i navn stadig bliver fordelt før man starter forfra. Men at man ikke starter med navn(1) -> navn(2) -> navn(3) osv, men at den eks. tager navn(3) -> navn(1) navn(4) -> navn(2) osv....?
Jeg skal selvfølgelig nok oprette et nyt spørgsmål hvis det er :-) men vil det være besværligt?
prøv dim med 3, kan ikke gennemskue hvad du vil :-) og et svar
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.