Avatar billede gon Nybegynder
28. juli 2005 - 16:50 Der er 14 kommentarer og
1 løsning

En "lurket" løkke i Excel

Hejsa folkens med viden der overstiger min egen !

Jeg har netop overtaget posten som vedligeholder af vores lokale ligarangliste for vores figurspilsturnering og søger i den anledning en macro til et excelark.

Løkken skal hest udføre som følger:

Der er findes en deltagerliste i arket. Lad os sige i kollonne A. I kollone B er deres rangliste_ID numre.
Lad os sige, at det første navn er "Jens" og hans ID er "123".

Jeg vil gerne have en løkke, der gennemgår denne kollonne A og for hvert navn (f.eks. "Jens") gennemgår to andre kollonner (lad os sige kollonne D og F). Hver gang makroen finder "Jens" skal det smide hans ID ind i cellen til venstre for navnet.

Når det er færdig med de to kollonner (D og F) skal den naturligvis tage navn nummer to i deltagerlisten (kollonne A).

Forvirret ??

Håber i kan hjælpe. Det eneste sted jeg har programmeret løkker er i Matlab samt Visualbasic, men min viden i disse programmer har ikke kunne hjælpe mig. Håber i kan.

Venligst,
Karl
Avatar billede brynil Nybegynder
28. juli 2005 - 17:03 #1
Kan denne bruges:

Sub Opdater()
Dim c, d, f, i, o, p As Integer
c = Range("A65000").End(xlUp).Row
d = Range("D65000").End(xlUp).Row
f = Range("F65000").End(xlUp).Row

For i = 1 To c
    For o = 1 To d
        If Cells(i, 1).Value = Cells(o, 4).Value Then Cells(o, 5).Value = Cells(i, 2).Value
    Next o
    For p = 1 To f
        If Cells(i, 1).Value = Cells(p, 6).Value Then Cells(p, 7).Value = Cells(i, 2).Value
    Next p
Next i

End Sub
Avatar billede brynil Nybegynder
28. juli 2005 - 17:17 #2
Du kan også bruge et LOPSLAG:

=LOPSLAG(D1;$A$1:$B$10;2;FALSK)

Placér den i celle E1

D1 er den værdi du leder efter.
Ret $A$1:$B$10 til det område du leder i (her fra A1 til B10)
2 er kolonnen som du vil have returneret en værdi fra - altså B

Kopiér formlen ned i kolonne E (til sidste værdi i kolonne D)
Avatar billede oyejo Nybegynder
28. juli 2005 - 17:25 #3
Sub LigaRangListe()
 
  With ActiveWorkbook.Sheets(1)
      r = .Cells(Rows.Count, 1).End(xlUp).Row
      Set rRangeA = Range(.Cells(1, 1), .Cells(r, 1))
      Set rRangeD = Range(.Cells(1, 4), .Cells(r, 4))
      Set rRangeF = Range(.Cells(1, 6), .Cells(r, 6))
       

        For Each c In rRangeA
        For Each t In rRangeD
          If c.Value = t.Value Then
            t.Offset(0, 1).Value = c.Offset(0, 1).Value
          End If
        Next
       
        For Each t In rRangeF
          If c.Value = t.Value Then
            t.Offset(0, 1).Value = c.Offset(0, 1).Value
          End If
        Next
      Next
  End With
End Sub
Avatar billede oyejo Nybegynder
28. juli 2005 - 18:11 #4
' obs! verdien skulle til venstre, da blir det vel  t.Offset(0, -1

Sub LigaRangListe()
 
  With ActiveWorkbook.Sheets(1)
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    Set rRangeA = Range(.Cells(1, 1), .Cells(r, 1))
    Set rRangeD = Range(.Cells(1, 4), .Cells(r, 4))
    Set rRangeF = Range(.Cells(1, 6), .Cells(r, 6))
       
   
    For Each c In rRangeA
     
      For Each t In rRangeD
        If c.Value = t.Value Then
          t.Offset(0, -1).Value = c.Offset(0, 1).Value
        End If
      Next
       
      For Each t In rRangeF
        If c.Value = t.Value Then
          t.Offset(0, -1).Value = c.Offset(0, 1).Value
        End If
      Next
     
    Next
  End With
End Sub
Avatar billede gon Nybegynder
29. juli 2005 - 00:57 #5
Hejsa. Det ser lækkert ud drenge - dog lige et par problemer.

@Brynil - din kode indsætter værdierne til højre for navnet den finder i kollonne D og F - det skal være til venstre for navnet.

@oyejo - Din kode ser lækker ud - minder rigtig meget om de løkker jeg er vant til. Dog stopper koden når den finder navnet ("Jens") første gang. "Jens" kan optræde i begge kollonner der gennemsøges flere gange (typisk 2-3 gange i hver) og det er derfor vigtigt, at den kigger det hele igennem for hvert navn.

Prøvede at ændre koden så det virkede, men kunne ikke rigtig få det til at køre.

Ellers ser det fantastisk ud drenge !

ses,
Karl
Avatar billede gon Nybegynder
29. juli 2005 - 01:09 #6
Fik det til at virke!!
Takker mange gange for det - du løber med sejren Oyejo !

Det er fedt, at i gider !!

ses,
Karl
Avatar billede oyejo Nybegynder
29. juli 2005 - 07:38 #7
Takk for det Karl :-)
som du sikkert har oppdaget, r = siste celle i kolonne A.
Hvis siste celle i kolonne D eller F er lengre ned,
vil ikke de bli gjenomsøkt, da må r få en høyre verdi.

Sender en varm tanke til kabbak :-)
http://www.eksperten.dk/spm/614524
Skulle nesten delt pointene med han

oye :-)
Avatar billede gon Nybegynder
29. juli 2005 - 13:37 #8
Så godt det med "r" værdien. Jeg gik blot ind og lavede faste værdier for de forskellige størrelser.

ses,
Karl
Avatar billede gon Nybegynder
29. juli 2005 - 13:38 #9
test
Avatar billede gon Nybegynder
29. juli 2005 - 13:38 #10
test
Avatar billede gon Nybegynder
29. juli 2005 - 13:39 #11
arghh Kan ikke acceptere svaret !
Avatar billede oyejo Nybegynder
29. juli 2005 - 13:48 #12
Tror du må merke oyejo i ruten først :-)
Avatar billede oyejo Nybegynder
29. juli 2005 - 15:48 #13
' her kommer en litt mere kompakt variant :-)

Sub LigaRangListe()
 
  With ActiveWorkbook.Sheets(1)
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    Set rRangeA = Range(.Cells(1, 1), .Cells(r, 1))
    Set rRangeD = Range(.Cells(1, 4), .Cells(r, 4))
    Set rRangeF = Range(.Cells(1, 6), .Cells(r, 6))
  End With
   
    For Each c In rRangeA
      For Each t In Union(rRangeD, rRangeF)
        If c.Value = t.Value Then
          t.Offset(0, -1).Value = c.Offset(0, 1).Value
        End If
      Next
    Next
 
End Sub
Avatar billede oyejo Nybegynder
29. juli 2005 - 15:56 #14
' he kommer en siste variant, god helg :-)

Sub LigaRangListe()
    r = Cells(Rows.Count, 1).End(xlUp).Row
    For Each c In Range(Cells(1, 1), Cells(r, 1))
      For Each t In Union(Range(Cells(1, 4), Cells(r, 4)), _
                            Range(Cells(1, 6), Cells(r, 6)))
        If c.Value = t.Value Then
          t.Offset(0, -1).Value = c.Offset(0, 1).Value
        End If
      Next
    Next
End Sub
Avatar billede oyejo Nybegynder
03. august 2005 - 15:45 #15
' denne er heller ikke dum :-)

Sub LigaRangListe()
  For Each c In [A5 : A100]
    For Each t In [D5 : D100 , F5 : F100]
      If t.Value = c.Value And Not t.Value = "" Then
        t.Offset(0, -1).Value = c.Offset(0, 1).Value
      End If
    Next
  Next
End Sub
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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