|
| Formelhjælp i excel 2003 Fra : boro23 | Vist : 888 gange 500 point Dato : 04-11-08 09:34 |
|
Jeg har brug for en formel der kan beregne hvor mange grupper der er af et bestemt tal f.eks. 10 i en række.
:22:10:41:66:27:10:10:10:66:22:41:10:10:66:66:10: = formelresultat 4
Håber I forstår mit lille eksempel, har virkelig for noget prof. hjælp, da jeg er ved at blive vanvittig over det ikke kan lykkedes.
| |
| Kommentar Fra : Højris |
Dato : 04-11-08 09:55 |
|
Hej boro23
Citat :22:10:41:66:27:10:10:10:66:22:41:10:10:66:66:10: = formelresultat 4 |
Det der fåstår excel ikke noget af. Prøv at dele grupperne op med ;
så kan jeg i det mindste se hvor mange grupper der er.
Nu har jeg ikke så meget tid men der kommer nok en excelsnedker på et tids .
Højris
| |
|
Den er svær...
En mulighed:
A: Prøv med en IF der checker om tallet og det efterfølgende er forskellige.
B: Summer disse hændelser...
Men det skal jo gennemføres for alle mulige tal.
Har du ikke en maks værdi?
| |
|
>A: Prøv med en IF der checker om tallet og det efterfølgende er forskellige.
Kan f.eks. se sådan ud:
=HVIS(C4=D4;0;1) osv.
>B: Summer disse hændelser.
Kan f.eks. se sådan ud:
=SUM(D5:F5)-1
Du skal vist trække 1 fra? Afhængig af hvordan du begynder og slutter...
| |
| Kommentar Fra : boro23 |
Dato : 04-11-08 10:16 |
|
Hej Højris
: : skal bare illustrerer celler i en række.
Hej Svendgiversen
Har ingen maks værdi. Har prøvet med HVIS, TÆL.HVIS, TÆLV, TÆL you name it
| |
|
Min metode er god nok, men der skal suppleres med en betingelse mere:
En kombineret If med & ..., der udvælger kun bestemte tal, i dit eksempel 10.
Har ikke mere tid lige nu, kommer tilbage i eftermiddag, hvis andre ikke har suppleret...
| |
| Kommentar Fra : boro23 |
Dato : 04-11-08 10:46 |
|
Hej Svendgiversen
Glæder mig til se om du kan løse mit store problem.
| |
| Kommentar Fra : sion |
Dato : 04-11-08 11:11 |
|
Denne VBA-kode klarer vist opgaven:
Kode Sub Opdel_i_grupper()
Dim arrTal As Variant
Dim intArraySize As Integer
Dim intGrupper As Integer
Dim InputCelle As Range
Dim TestCelle As Range
Dim OutputCelle As Range
Set InputCelle = Range("E8") 'Skriv her celle med tekststreng
Set TestCelle = Range("E9") 'Skriv her celle med værdi, som skal grupperes
Set OutputCelle = Range("E10") 'Skriv her celle til angivelse af resulat (antal grupper)
arrTal = Split(InputCelle.Value, ":")
intArraySize = UBound(arrTal) - LBound(arrTal) - 1
For x = 1 To intArraySize
If Val(arrTal(x)) = TestCelle.Value Then
If Val(arrTal(x + 1)) = TestCelle.Value Then
intGrupper = intGrupper
Else
intGrupper = intGrupper + 1
End If
Else
intGrupper = intGrupper
End If
Next
OutputCelle.Value = intGrupper
End Sub |
Mvh. Simon
| |
|
Her er en halvautomatisk løsning i ren Excel:
"
10
22 10 41 66 27 10 10 10 66 22 41 10 10 66 66 10 0
1 1 1 1 1 0 0 1 1 1 1 0 1 0 1 1
0 1 0 0 0 1 1 1 0 0 0 1 1 0 0 1
0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1
Grupper 4
"
Det tal du ønsker at se grupperinger for angives i A1, her 10
Din talrække er angivet fra A2 til P2 og et ekstra 0 i Q2
(fylder 2 linier her)
Så følger kriteriet for gruppe skift:
=HVIS(A2=B2;0;1)
(fylder 2 linier her)
Og kriteriet for valgt tal:
=HVIS(A2=$A1;1;0)
(fylder 2 linier her)
Det kombinerede kriterie er produktet:
=B3*B4
(fylder 2 linier her)
De 2 kriterier kan sikkert kombineres i én IF??
Og så summeres den sidste række:
=SUM(B5:Q5)
med resultat for 10: Grupper 4
Prøv at skifte til eksempelvis 66 og du får: Grupper 3
Skal grupperingen udføres automatisk for alle mulige talværdier må du nok programmere,
eksempelvis som Simon i Visual Basic...
Her foretrækker jeg MathLab.
| |
|
Fylder alligevel ikke 2 linier efter det er sendt, men søjlestrukturen er væk...
| |
| Kommentar Fra : boro23 |
Dato : 04-11-08 16:41 |
|
Hej Svendgiversen
Det er ikke godt at skulle indsætte ekstra rækker for at lave beregningen, da det vil ødelægge referencer i andre filer.
Hej Simon
Jeg forstår ikke helt din vba kode, kunne du ikke uddybe det lidt mere.
| |
|
>Det er ikke godt at skulle indsætte ekstra rækker...
Du kan jo bare hide dem eller, endnu bedre, placere dem på et underliggende sheet.
| |
| Kommentar Fra : pedroso |
Dato : 04-11-08 17:06 |
|
Det er da simpelt:
Skriv det tal du ønsker at finde gruppeantallet af i A1
Skriv din talrække i B1:B100 (nu antager jeg 100 tal, dette kan du jo ændre)
Skriv følgende i C1: =countif(10;B1:B100)
C1 angiver nu antallet af 10-taller i B-rækken. Skal du bruge antallet af et andet tal så ændrer du bare A1.
Nu har jeg ikke en dansk excel, men nogen kan måske hjælpe her. Det hedder vist noget med tæl.hvis() som du har prøvet, men måske ikke på den rigtige måde?
Jeg synes ikke du har beskrevet opgaven helt, f.eks. fremgår det ikke om du skal kende grupperingen af alle tal. I så fald har du jo uendelig mange grupper at checke - du siger der ikke er noget max tal ! Eller skal du bruge gruppen med flest ens tal???
Hvad skal du iøvrigt bruge dette til, måske er der en anden indgang på problemstillingen. Eller er det bare for at udfordre os her i kandu
| |
| Kommentar Fra : boro23 |
Dato : 04-11-08 19:08 |
|
Hej alle
Jeg har måske ikke forklaret problemet godt nok, vil forsøge at beskrive mit problem noget bedre.
Jeg har lavet en slags arbejdsplan over godt 100 medarbejdere på et kvartal (rækker=medarbejder og kolonner=dage), hvor der er tastet en arbejdskode for hver dag pr. medarbejder. For enden af hver række/ medarbejder har jeg brug for en formel der kan finde éen bestemt kode (f.eks. 10) så jeg kan se hvor mange gange/perioder en medarbejder har haft over et kvartal. Hvis f.eks. en medarbejder har kode 10 mandag, tirsdag i en uge, torsdag i en anden uge og onsdag, torsdag, fredag i en tredie uge, så har han brugt 3 perioder og det er hans max kvote over et kvartal.
Jeg har prøvet en lignene udgave af svendgiversen version, men det giver problemer når jeg bruger sortering i autofilter.
Håber jeg har fået det formuleret rigtig ellers må jeg maile Jer en mini version af filen.
| |
| Kommentar Fra : sion |
Dato : 04-11-08 19:54 |
|
Jeg troede, at du havde alle tallene adskilt af kolon'er i én celle. Det er dét, min VBA-kode kan løse.
Nu forstår jeg, at tallene står i hver sin kolonne. Jeg mener derfor, at svendgiversen's svar fra 12:26 er noget nær det smarteste, man kan lave i Excel. Som svendgiversen også selv skriver, kan formlerne dog slås sammen, så de ikke fylder så meget i regnearket. Du bør naturligvis heller ikke lave plads mellem rækkerne til formlerne, men blot placere dem i kolonnerne til højre for dine data.
Antag at dine tal/data stå i cellerne A1:P1, og at du indtaster din kode-værdi i R1. Du kan nu skrive følgende kode i T1 og trække den ud til alle cellerne i T1:AI1:
=HVIS(A1=$R$1;HVIS(A1=B1;0;1);0)
Summen af T1:AI1 er din ønske værdi - altså antallet af perioder med den angivne kode.
Hvis du er interesseret, kræver det vist ikke meget at lave min VBA-kode om, så den kan bruges, når tallene står i flere kolonner.
Mvh. Simon
| |
| Kommentar Fra : boro23 |
Dato : 04-11-08 20:42 |
|
Hej Simon
Det virker fint, men der er ikke er nok kolonner, ærgeligt.
Kunne du lave en vba kode, så den beregner på samme måde som ovenstående, vil jeg være dig evig taknemmelig.
| |
| Kommentar Fra : pedroso |
Dato : 04-11-08 21:37 |
|
Du kunne vel også bruge et nyt faneblad til beregningerne, så er der da kolonner nok.
Jeg vil foreslå at du sender arket til sion, så er det langt nemmere for ham at se hvad du skal bruge. Har selv prøvet at lave VBA kode til folk uden at det liiiiige var det de skulle bruge.
Og sion, hvis jeg var dig ville jeg lave et array med 2 integer i hver. En med koden, og en med antal grupper, og så bare tælle op.
| |
| Kommentar Fra : boro23 |
Dato : 06-11-08 11:25 |
|
Hej Alle
Har prøvet at lave beregningerne i et nyt, men det giver problemer når jeg sortere data i arbejdsplanen, samt at filens størrelse bliver på ca 25MB en ganske tung fil at arbejde med.
Håber at Simon kan hjælpe med en vba kode.
| |
| Kommentar Fra : sion |
Dato : 06-11-08 13:01 |
|
Hej boro23
Jeg vil se på det, når jeg får tid. Formentlig først i weekenden.
Simon
| |
| Kommentar Fra : pedroso |
Dato : 13-11-08 09:36 |
| | |
| Kommentar Fra : boro23 |
Dato : 13-11-08 13:49 |
|
Nej, ikke endnu. Jeg håber Simon kommer på banen igen, han plejer at komme med en god løsning.
| |
| Kommentar Fra : sion |
Dato : 13-11-08 17:16 |
|
Jeg har nu lavet en kode:
Kode Sub Tæl_grupper()
Dim intGrupper As Integer
Dim InputCelle As Range
Dim TestCelle As Range
Dim OutputCelle As Range
Set InputCelle = Range("A1") 'Skriv her første celle med inputværdier
Set TestCelle = Range("A2") 'Skriv her celle med værdi, som skal grupperes
Set OutputCelle = Range("A3") 'Skriv her celle til angivelse af resulat (antal grupper)
i = 0
Do While InputCelle.Offset(0, i).Value <> ""
If InputCelle.Offset(0, i).Value = TestCelle.Value Then
If InputCelle.Offset(0, i + 1).Value = TestCelle.Value Then
intGrupper = intGrupper
Else
intGrupper = intGrupper + 1
End If
Else
intGrupper = intGrupper
End If
i = i + 1
Loop
OutputCelle.Value = intGrupper
End Sub |
Dine arbejdskoder skriver du i celle A1, B1, C1 osv. Programmet finder selv ud af hvor mange koder, du har skrevet (når der er en tom celle, stopper beregningen).
I celle A2 skriver du den arbejdskode, du vil søge efter.
Antallet af grupper (outputtet) kommer i celle A3.
Håber det giver mening. Du kan jo selv prøve at tilpasse koden til dine behov.
Hvis beregningen skal laves for flere rækker, skal der i hvert fald lidt mere kodning til.
Simon
| |
| Kommentar Fra : boro23 |
Dato : 01-12-08 10:36 |
|
Hej Simon
Undskyld den lange reaktionstid, har lagt underdrejet i 2 uger.
Jeg har prøvet at ligge din kode ind, men kan ikke få det til at fungere. Kunne du ikke prøve at maile et regneark med dit eksempel på "mit brugernavn"@ofir.dk, som jeg kan bruge på et senere tidspunkt. Er kørt lidt træt i arbejdet med filen, ligger den på hylden et stykke tid.
Du får pointene hvis du kan hjælpe mig med noget helt andet? Jeg har et par medarbejdere der laver et kørselsregnskab hvor de taster dato, navn, sted, formål og km ind. Jeg ville gerne kunne lave en formel (i et andet ark) der kan beregne hvormange km. de til sammen har kørt i 1.kvartal, 2 kvartal osv.
Hilsen boro23
| |
| Du har følgende muligheder | |
|
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
| |
|
|