Avatar billede brilleabe Nybegynder
13. januar 2004 - 21:05 Der er 16 kommentarer og
1 løsning

konsolidering af lister ud fra 2 betingelser

Jeg har et ark som ser således ud:

kolonne A, kolonne B
Nummer    Antal
697    54
698    54
699    54
700    54
701    18
702    54
703    54
704    54
705    54
776    54
777    54
782    54
783    54
784    54
785    54
778    54
779    54
780    54
osv osv...

Listen ændres hele tiden og er meget meget længere end vist her. Listen skal konsolideres ud fra 2 betingelser.

1)    nummer må ikke stige mere end en
2)    Antal skal være 54.

Ovenstående liste vil give følgende resultat.
E  F  G
697-700    54
701-701    18
702-705    54
776-777    54
782-785    54
778-780    54
Avatar billede brilleabe Nybegynder
13. januar 2004 - 21:06 #1
E F G er naturligvis kolonne overskrifter..
Avatar billede kabbak Professor
16. januar 2004 - 00:13 #2
prøv denne makro

Sub TælSammen()
Dim B As Long, Data As Variant, Res As Variant, I As Long
On Error GoTo Slut
B = Range("B65536").End(xlUp).Row ' finder sidste række med data
Data = Range("A1:B" & B) ' nummer kolonne A og tal kolonne B
Res = Range("E1:G" & B) ' Skriver resultatet i Kolonne E, F  og G
I = 1
For T = 1 To UBound(Data)
  If Data(T, 2) = Data(T + 1, 2) And Data(T + 1, 1) = Data(T, 1) + 1 Then
      If Res(I, 1) = "" Then
        Res(I, 1) = Data(T, 1)
      End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    GoTo Videre
    End If
  If Data(T, 2) = Data(T + 1, 2) And Data(T + 1, 1) <> Data(T, 1) + 1 Then
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
      Res(I, 2) = Data(T, 1)
      Res(I, 3) = Data(T, 2)
      I = I + 1
      GoTo Videre
    End If
  If Data(T, 2) <> Data(T + 1, 2) And Data(T + 1, 1) = Data(T, 1) + 1 Then
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    I = I + 1
    Else
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    I = I + 1
    End If
   
Videre:
Next

Slut:
  Res(I, 2) = Data(T, 1)
  Res(I, 3) = Data(T, 2)
Range("E1:G" & B) = Res ' Skriver resultatet i Kolonne E, F  og G
End Sub
Avatar billede kabbak Professor
16. januar 2004 - 00:17 #3
sæt lige denne ind under on error

Range("E1:G" & B).Clear
Avatar billede brilleabe Nybegynder
18. januar 2004 - 11:23 #4
Hej Kabbak,

Den er der ikke helt endnu for den nye liste indeholder jo alle nummre fra den oprindelige liste. dvs den er lige så lang som den første.
Avatar billede brilleabe Nybegynder
18. januar 2004 - 11:37 #5
dette resultat:

651644    651644    54
651645    651645    54
651646    651646    54
651647    651647    54
651648    651648    54
651649    651649    54
651650    651650    54


skulle se således ud:


651644 651650  54

for der er kun 1 mellem hvert nummer og Antal er 54
Avatar billede kabbak Professor
18. januar 2004 - 12:10 #6
Kolonne A skal være sorteret stigende, for at den virker

Sub TælSammen()
Dim B As Long, Data As Variant, Res As Variant, I As Long
On Error GoTo Slut
B = Range("B65536").End(xlUp).Row ' finder sidste række med data
Data = Range("A1:B" & B) ' nummer kolonne A og tal kolonne B
Range("E1:G" & B).Clear
Res = Range("E1:G" & B) ' Skriver resultatet i Kolonne E, F  og G
I = 1
For T = 1 To UBound(Data)
  If Data(T, 2) = Data(T + 1, 2) And Data(T + 1, 1) = Data(T, 1) + 1 Then
      If Res(I, 1) = "" Then
        Res(I, 1) = Data(T, 1)
      End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    GoTo Videre
    End If
  If Data(T, 2) = Data(T + 1, 2) And Data(T + 1, 1) <> Data(T, 1) + 1 Then
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
      Res(I, 2) = Data(T, 1)
      Res(I, 3) = Data(T, 2)
      I = I + 1
      GoTo Videre
    End If
  If Data(T, 2) <> Data(T + 1, 2) And Data(T + 1, 1) = Data(T, 1) + 1 Then
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    I = I + 1
    Else
    If Res(I, 1) = "" Then
      Res(I, 1) = Data(T, 1)
    End If
    Res(I, 2) = Data(T, 1)
    Res(I, 3) = Data(T, 2)
    I = I + 1
    End If
   
Videre:
Next

Slut:
  Res(I, 2) = Data(T, 1)
  Res(I, 3) = Data(T, 2)
Range("E1:G" & B) = Res ' Skriver resultatet i Kolonne E, F  og G
End Sub
Avatar billede brilleabe Nybegynder
18. januar 2004 - 12:24 #7
Det er f... utroligt hvad du kan med et regneark.

Tester det lige igennem - smid lige et svar, så er du klar til at få point.
Avatar billede kabbak Professor
18. januar 2004 - 12:25 #8
virker det nu. ?

og et svar
Avatar billede brilleabe Nybegynder
18. januar 2004 - 18:13 #9
lige her på falderebet, har du et bud på hvordan man får excel til at acceptere tal på 16-20 cifre? Når jeg sæter tal ind bliver 00057056242006516571
til 5,70562E+16.

(og det skal behandles som tal.)
Avatar billede bak Forsker
18. januar 2004 - 18:18 #10
15 cifre i regnearket max... hvis der skal regnes på dem. Noget flere i vba.
Avatar billede brilleabe Nybegynder
18. januar 2004 - 18:22 #11
tak for hjælpen alligevel.
Avatar billede bak Forsker
18. januar 2004 - 18:24 #12
hvad skal du bruge så store tal til ??
(mange begrænsninger kan jo omgåes)
Avatar billede kabbak Professor
18. januar 2004 - 18:43 #13
tak for point ;-))
Avatar billede brilleabe Nybegynder
19. januar 2004 - 21:32 #14
jeg skal kun bruge de siste 6 cifre - men jeg er jo nød til at importerer hele tallet før jeg kan 'nappe' de sidste 6 cifre.
Avatar billede brilleabe Nybegynder
19. januar 2004 - 21:35 #15
Og jeg har desværre lige fundet ud af at det ikke går at sorterer data stigende - der må ikke laves om på rækkefølgen...

Har du et bud - ellers laver jeg et nyt sp. - æv
Avatar billede kabbak Professor
19. januar 2004 - 22:09 #16
Kan du sende et testark med data på, så skal jeg se.


Sendtil#kabbak@tiscali.dk

fjern Sendtil#
Avatar billede brilleabe Nybegynder
20. januar 2004 - 22:00 #17
Hej,
Tak for tilbudet - men af een eller anden grund ser det ud til at virke?? (måske har det noget med min formatering at gøre)

Jeg skal lige prøve at bruge det i praksis de næste par dage - så kan det godt være at jeg vil tage i mod tilbudet, hvis det stadig er åbent.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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