Avatar billede kgndksv Juniormester
28. december 2009 - 15:27 Der 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å.

Er det en Do?
Avatar billede excelent Ekspert
28. december 2009 - 17:25 #1
her er tal i D2:D29, der skrives navn i kolonne E så klarer du nok selv resten

For Each c In Range("D2:D29")
If c = 1 Then
x = x + 1
If x > 3 Then x = 1
c.Offset(0, 1) = "navn" & x
End If
Next
Avatar billede kgndksv Juniormester
28. december 2009 - 19:51 #2
Hej Excelent

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.

Giver det mening?
Avatar billede excelent Ekspert
28. december 2009 - 20:51 #3
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
Avatar billede kgndksv Juniormester
28. december 2009 - 22:24 #4
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?

Men sender du lige et svar på denne :-)
Avatar billede excelent Ekspert
29. december 2009 - 13:08 #5
prøv dim med 3, kan ikke gennemskue hvad du vil :-)
og et svar
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
Kurser inden for grundlæggende programmering

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