Avatar billede goodwill Nybegynder
03. november 2001 - 12:30 Der er 28 kommentarer og
1 løsning

Hjælp mig lige med at lave en løkke

Hej,
Listen ligger i excel, består af fire kolonner.
Kolonne 1 indeholder \"poster\" som kan forekomme flere gange, kunne være \"44OB24-Q\" eller i den stil. I kolonne 4 er der et status felt, som er forudindstillet til \"O\" for alle poster.
Jeg skal gennemsøge listen for tilsvarende poster; er der mere end een, skal status ændres til \"R\" for alle pånær den sidst forekommende. Listeområdet er varierende i antal rækker, så når listen ikke er længere, dvs. \"\" i næste celle i kolonne A og statusfeltet er opdateret for posterne, skal koden afsluttes.
(P.S. listen ligger i det samme regneark, som selve databasen, så den skal ikke \"kaldes\" nogen steder fra)
Håber på en lidt smart løsning, for jeg kan godt lave koden selv, men den bliver bare kilometerlang, så hellere noget \"For each...next\" eller \"Do while...loop\" agtigt.
God weekend til alle :o)
Goodwill
Avatar billede johs_j Novice
03. november 2001 - 13:28 #1
Du kan jo lige maile den til mig så vil jeg se på det.
johs_j@e-box.dk
03. november 2001 - 16:08 #2
Jeg lurer også gerne med fd@win-consult.com
Avatar billede dumdum Nybegynder
03. november 2001 - 16:16 #3
60 point = svært spørgsmål


www.fotx.net/dumdum
03. november 2001 - 16:30 #4
goodwill>> jeg har lavet den - eneste problem er, at den første forekomst får O og resten får R ....... kan det bruges ?
03. november 2001 - 16:54 #5
goodwill>> Det eneste du skal sørge for er at starte makro\'en i det rigtige ark :-)

Sub ChangesStatusForDuplicatesInColumn()
Dim rRange As Range
Dim rDuplicates As Range
Dim rDummy As Range
Dim rCell As Range
Dim iRow As Integer

    iRow = Range(\"A64000\").End(xlUp).Row

    Set rRange = Range(\"A1:A\" & iRow)

    For Each rCell In rRange.Cells
        Set rDummy = Range(rRange(iRow, iRow), rCell)
        If Application.CountIf(rDummy, rCell.Value) > 1 Then
            If rDuplicates Is Nothing Then
                Set rDuplicates = rCell.Offset(0, 3)
            Else
                Set rDuplicates = Union(rDuplicates, rCell.Offset(0, 3))
            End If
        End If
    Next rCell

    rDuplicates.Value = \"R\"

Set rRange = Nothing
Set rDuplicates = Nothing
Set rDummy = Nothing
Set rCell = Nothing
End Sub
Avatar billede goodwill Nybegynder
03. november 2001 - 17:59 #6
Flemming,

det er simpelthen som at få serveret flødekarameller på et sølvfad, skulle bare ændre et tretal til to. Den virker bare, tusind tak.
:o)
Goodwill
03. november 2001 - 18:08 #7
Håber de smager dig :-) www.win-consult.com
Avatar billede goodwill Nybegynder
03. november 2001 - 18:14 #8
Flemming,

tillægsspørgsmål .o)

Kan jeg ikke samle de ikke-duplikerede i en Union også, og skrive \"O\" i sorry...tredie kolonne, i tilfælde af, at en manuel pilfinger har været inde og rette til \"R\" før tiden??

:o)

Goodwill
Avatar billede goodwill Nybegynder
03. november 2001 - 19:00 #9
Nu har jeg løst det,
fortsat god weekend.
:o)
Goodwill
03. november 2001 - 19:03 #10
hehe :-)
Avatar billede bak Forsker
03. november 2001 - 20:40 #11
Problemet kan også løses uden makro med denne formel, som markerer alle dubletter undtaget den sidste med R:
{=HVIS(ELLER(A1=A2:A100);\"R\";\"O\")}
Dette er en arrayformel, altså formelen skal afsluttes ved at trykke ctrt-shift-enter, men i modsætning til de fleste andre arrayformler skal man ikke starte med at markere det område man vil fylde den ned i.

Derefter kopier man bare formlen nedad til sidste celle.

Avatar billede goodwill Nybegynder
03. november 2001 - 20:51 #12
Hej bak,
nu er det jo ellers løst, men vil da alligevel lige fortælle dig at første post får \"O\" resten \"R\" sådan for fuldstændighedens skyld ;o))
Goodwill
Avatar billede bak Forsker
03. november 2001 - 21:00 #13
Jeg ved godt opgaven er løst, men derfor kan man jo godt prøve andre metoder. Man kan jo kun blive klogere.
Min formel, hvis den bliver tastet rigtigt ind, vil give R ved de første redundante data og O ved sidste. Ved mig gør den tihvertifald :-)1    O
2    O
5    R
8    O
5    R
5    O
6    O

Avatar billede goodwill Nybegynder
03. november 2001 - 21:06 #14
Ja, jeg skal ikke kunne sige om min er kinesisk, men den gør det lige modsat ;o)
14B  O
14B  R
14B  R
36C  O
44A  O
44A  R

men ellers er det ret smart
Goodwill
Avatar billede bak Forsker
03. november 2001 - 22:52 #15
Det kan jo også være min version der kører kinesisk:
14B     {=HVIS(ELLER(A1=A2:A6);\"R\";\"O\")}    R
14B     {=HVIS(ELLER(A2=A3:A7);\"R\";\"O\")}    R
14B     {=HVIS(ELLER(A3=A4:A8);\"R\";\"O\")}    O
36C     {=HVIS(ELLER(A4=A5:A9);\"R\";\"O\")}    O
44A     {=HVIS(ELLER(A5=A6:A10);\"R\";\"O\")}    R
44A     {=HVIS(ELLER(A6=A7:A11);\"R\";\"O\")}    O

Avatar billede bak Forsker
03. november 2001 - 23:04 #16
Altså : formlen checker kun nedad, derfor vil første forekomst af en dublet blive markeret med R og sidste forekomst med O, da den så ikke kan finde flere.
Slut herfra, sengen trækker.
03. november 2001 - 23:06 #17
jeg får samme resultat som dig bak, når jeg bruger det du viser.

Avatar billede goodwill Nybegynder
04. november 2001 - 09:50 #18
Hej begge to,
Det kan jeg altså ikke få den til, har prøvet tre gange, akkurat samme formler, ctrl-shift-enter for array, og jeg får stadig \"O\" i den første post.
Det må være en af de her ting, som bare ikke kan forklares, men tak bak, fordi du checkede igen.
Jeg skal nok kunne bruge det til et eller andet.
Fortsat god søndag,
:o)
Goodwill
Avatar billede goodwill Nybegynder
04. november 2001 - 10:03 #19
Piiinligt,
havde overset, at min liste havde kolonneoverskrifter. Så min formel
{=hvis(eller(A1=A2:A6);\"R\";\"O\")}
stod i række to.
Skammer mig lige lidt....
:o)
Goodwill
04. november 2001 - 10:50 #20
:-)
Avatar billede bak Forsker
04. november 2001 - 20:32 #21
Ok. Så er min version alligevel ikke kinesisk. :-)
Avatar billede goodwill Nybegynder
06. november 2001 - 19:38 #22
Hej Flemming,
Jeg har lige en kommentar til koden ovenover, kan du give en forklaring, er jeg meget taknemmelig:
Sætningen
Set rDummy = Range(rRange(iRow, iRow), rCell)
virker kun, hvis listen er 256 rækker eller derunder. Opdagede det, da jeg havde nogle stykker over 300, som skulle gennemkøres.
??
:o)
Goodwill
06. november 2001 - 21:00 #23
Sætningen
Dim iRow As Integer
laver du lige til
Dim iRow As Double

Prøv lige det
Avatar billede goodwill Nybegynder
06. november 2001 - 21:41 #24
Hej igen,
Det nytter ikke at dim\'e den som double.
Tror det er en begrænsning i Excel (måske kun Excel\'97)

Goodwill
06. november 2001 - 21:44 #25
Det ville heller ikke hjælpe noget, når jeg nu tænker mig om - en Integer kan tager noget større tal end 256.

Jeg har desværre ikke tid til at teste det lige nu - jeg er ved at lave nyt design til min web-side. - jo, jeg kigger lige på det.
06. november 2001 - 21:47 #26
Prøv at ændre sætningen fra
    Set rDummy = Range(rRange(iRow, iRow), rCell)
til
    Set rDummy = Range(rRange(iRow, 1), rCell)
Avatar billede goodwill Nybegynder
06. november 2001 - 21:48 #27
Tak nfor det,
når du det ikke, kan jeg altid køre koden af flere gange  :o)
06. november 2001 - 21:49 #28
hehe - læs lige oven for - jeg tror på, at det er løsningen.
Avatar billede goodwill Nybegynder
06. november 2001 - 21:52 #29
Det hjalp ! Mange tak og fortsat god aften
:o)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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