Avatar billede boheme Nybegynder
09. september 2004 - 16:43 Der er 6 kommentarer og
1 løsning

Hjælp til Excel, sortering af data + konvertering til binært

Er der nogen der kan hjælpe mig med følgende:

Jeg har 50 forskellige lokationer hvor jeg har været ude at samle insekter, disse insekter er på forhånd angivet med et nummer fra 1-1000, det er langt fra alle typer af insekter der forekommer på mine (og forsøget er gentaget et antal gange) Tallene skal nu skrives ind i excel.

Jeg starter med i første række at angive hvilke dyr der forekommer i hvert forsøg, der er typisk 20 arter i hvert forsøg, jeg skal nu for hver lokation angive om arten er der eller ej (binært). Jeg kunne godt tænke mig at jeg indtastede alle tallene og derefter sorterede dem således at tallener er sorteret i rækkefølge (Efter kolone A) hvorefter de skal laves om til 1 eller 0. Her er et simplificeret eksemple:


originale data:


A    B    C    D  etc
1    14    1    400
3    60    9
6
8
9
14
60
89
114
400
567
890


Det skal så sorters så de kommer til at se sådan ud:

A    B    C    D  etc
1          1   
3         
6
8
9          9
14    14
60    60
89
114
400              400
567
890


Derefter vil jeg have lavet alle tal binære, undtagen koden (a)

A    B    C    D  etc
1      0    1      0
3      0    0      0
6      0    0      0
8      0    0      0
9      0    1      0
14    1    0      0
60    1    0      0
89            etc
114
400                1
567
890

Er der nogle trix til at gøre dette med i excel?
Avatar billede kabbak Professor
09. september 2004 - 17:18 #1
en makro:

Når du højreklikker på fanen af et ark og vælg vis programkode
Kan du i venstre side se dine arknavne.

Oppe i menulinien vælger du
Insert > module

Nu kan du se ovre under arkene til venstre står Module1.

Se nu er Module1 makeret med grå baggrund, det er her den koden skal være

***** kode

Sub SorteringOgBin()
Dim Temp() As Variant, RankArray As Variant, N As Long, i As Integer, j As Integer
Dim swap As Boolean, Col As Integer, T As Integer
RankArray = Selection ' makeringen på regnearket
N = UBound(RankArray)
Col = Selection.Columns.Count
ReDim Temp(Col)
swap = True
If Col > 1 Then
SortKolonne = 1
A = Val(SortKolonne)
Else
A = 1
End If
' sortering
Do While swap
  swap = False
  For i = 1 To N - 1
      For j = i To N
        If RankArray(i, A) > RankArray(j, A) Then
          For T = 1 To Col
            Temp(T) = RankArray(i, T)
            RankArray(i, T) = RankArray(j, T)
            RankArray(j, T) = Temp(T)
          Next
            swap = True
        End If
    Next
  Next
Loop
' bin 0 og 1
  For i = 1 To N
      For T = 2 To Col
            If RankArray(i, T) > 0 Then
                RankArray(i, T) = 1
              Else
                RankArray(i, T) = 0
            End If
    Next
  Next
Worksheets("ark2").Activate ' arket det skal over i
Range(Cells(1, 1), Cells(N, Col)) = RankArray
End Sub


*** kode slut

Hvis jeg er dig vil jeg lade den sætte resultatet, over i et andet ark,

Her i koden gør den det til Ark2 , så ret ark2 til det ark du vil have det over i.
Avatar billede kabbak Professor
09. september 2004 - 17:19 #2
Du skal makere alle data inden koden køres
Avatar billede boheme Nybegynder
10. september 2004 - 22:49 #3
Hej Kabbak.
Jeg har lige prøvet koden, men der må vist være en fejl for den laver det kun om til binært uden at sortere først? Håber at det kan løses.
Avatar billede kabbak Professor
10. september 2004 - 23:32 #4
Jeg misforstod din sortering, men det kan så gøres med en formel i stedet.

Kopier den første kolonne over i et andet ark, i A kolonnen.

sæt denne formel ind i celle B1

= TÆL.HVIS(Ark1!B:B;$A1)

Ret Ark1 i formlen, til navnet på arket, som dine data er i.

Træk formlen til venstre over lige så mange kolonner som der er data i.
Træk derefter formlen til nedad lige så mange rækker som der er data i.
Avatar billede kabbak Professor
10. september 2004 - 23:33 #5
Træk formlen til højre over lige så mange kolonner som der er data i.

selvfølgelig
Avatar billede boheme Nybegynder
11. september 2004 - 08:19 #6
Super. Nu virker det tak. smider du lige et svar!
Men det virker kun hvis alle tal står i øverste række, så der er ikke plads til en overskrift i hver kolonne, ellers bliver det hele en forskudt, kan man gøre formlen mere fleksibel eller må jeg bare sørge for at de altid står overst.
Tak
Avatar billede kabbak Professor
11. september 2004 - 15:31 #7
Det virker selv om du har overskrifter begge steder, så ser formlen sådan ud i B2:
= TÆL.HVIS(Ark1!B:B;$A2)
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