28. juli 2005 - 16:50Der 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.
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
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)
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.
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.
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
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
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
Synes godt om
Ny brugerNybegynder
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.