19. november 2003 - 00:46Der er
16 kommentarer og 1 løsning
Formel, som kan lave en kolonne overskrift.
Hej er der nogen der kan hjælpe mig med at løse følgende opgave?
A B C D E F G 1 ccc ccc aaa ggg bbb eee 2 3 aaa 4 5 ggg 6 7 ccc 8 9 bbb 10
- Hver dag udfylder jeg en ny celle (hver anden celle her)i kolonne A med et navn (3 bogstaver her). - Hver gang jeg skriver et NYT navn, kopierer jeg det nye navn (manuelt), som overskrift (række 1) i en ny kolonne (B,C, D, osv.). - NB: Det er kun nye navne, jeg ønsker at kopieret, som overskrift. Eksisterende navne må ikke gentages!
Er der mulighed for at oprette en formel i B1, C1, D1, osv. som automatisk kopierer et nyt navn, hver gang dette tilføjes i en ny celle i kolonne A?
Grunden til ønsket om automatisering er, at jeg har 6000 rækker, så det er svært for mig, at finde ud af om det nye navn eksisterer.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:A65536")) Is Nothing Then For I = 1 To 256 If Cells(1, I).Value = Target.Value Then Exit Sub Next Range("IV1").End(xlToLeft).Offset(0, 1) = Target End If End Sub
kabbak: Jeg har meget begrænset forstand på makro. Min excel er på dansk. Jeg har bygget den op over flere år med meget indviklede formler dog uden makroer. Den er 20 MB stor. Har ikke noget imod makroer, hvis jeg nemt kan lære at bruge dem. Jeg kan altså ikke finde ud af hvordan jeg sætter den makro, du foreslår, ind i min ark modul. Kan du hjælpe mig her?
Start excel regnearket tryk ALT+F11 Nu er du inde i vba editoren Til venstre kan du se alle dine ark. Dobbeltklik på det ark du skal have udført handlingen i. Nu åbner der sig en hvid side, aller øverst står der: Microsoft Visual Basic -filnavn - [arknavn(Code)] Her sætter du makroen ind
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:A65536")) Is Nothing Then For I = 1 To 255 If Cells(1, I).Value = Target.Value Then Exit Sub Next Range("IV1").End(xlToLeft).Offset(0, 1) = Target End If End Sub
kabbak: Spændende! Mangler dog en lille finesse. Den skal ikke kopiere tomme celler som overskrift - kun celler med navn (3 bogstaver). Kan du justere makroen til det?
PS. Hvad gør jeg for at acceptere dit svar og give dig pointene?
Er det muligt, at jeg også undgår at tal (f.eks. "123" i stedet for navne "aaa") kommer med i overskriften?
Jeg accepterer din løsning, dog er jeg betænkelig ved at bruge den på min ark:
1- Jeg foretrækker en formel frem for makro og vba. En formel kan jeg forstå. Visual Basic forstår jeg ikke! Den giver mig problemer ved de mindste rettelser (error, debug, osv), som jeg ikke har erfaringer med at håndtere. 2- Der er andre ting ifm makro/vba, som gør mig usikker. Fx Hvor er der makro/vba; Er de aktive; Hvordan man aktiverer... 3- Jeg ønsker fortsat at vide, om en "gammeldags" formel kan løse mit problem, eller om dit forslag er den eneste løsning!?
Hvis en formel er mulig løsning og du kan ikke hjælpe mig her, vil jeg oprette et nyt spørgsmål, hvor jeg præciserer at det er en formel jeg ønsker.
Du skrev ikke noget om at der var noget den skulle hoppe over, som du nævner tal.
Nu tager den ikke rene tal med, men hvis du blander bogstaver med tal tager den dem.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:A65536")) Is Nothing Then' kikker kun i kolonne A For I = 1 To 255 If IsNumeric(Target) Then Exit Sub If Cells(1, I).Value = Target.Value Then Exit Sub ' hvis den er der, afsluttes Next Range("IV1").End(xlToLeft).Offset(0, 1) = Target' den nye tilføjes End If End Sub
jeg tror ikke man kan lave en funktion (Formel) til det.
Jeg tror du skal holde dig til kabbaks løsning. Den måde du har bygget dit ark op med både tal og tekst og tomme felter og kun tekst skal overføres vil kræve en formel som vil være betydelig sværere at overskue end koden. Der vil sansyligvis også være behov for hjælpekolonner med formler. Bare for at give et eksempel på en Array-formel der kan hente unikke værdier op ( men dør hvis der er tomme celler og kan ikke selektere mellem tal og tekst) =TRANSPONER(INDEKS(A1:A6000;MINDSTE(HVIS(SAMMENLIGN(A1:A6000;A1:A6000;0)=RÆKKE(INDIREKTE("1:"&RÆKKER(A1:A6000)));SAMMENLIGN(A1:A6000;A1:A6000;0);"");RÆKKE(INDIREKTE("1:"&RÆKKER(A1:A6000))))))
Som du kan se er det ikke særlig gennemskuelig, og der skal ikke meget til for den fejler. Mit råd : Hold dig til koden
Jeg kan ikke skrive det hele. Det er der ikke plads til her. Jeg undlod at nævne celler med tal, fordi jeg har en funktion som renser hele kolonnen for tal. Tak for hjælpen.
bak: Tak for dit råd, men jeg er desværre ikke helt enig. Kabbaks løsning er bedst - enig. Det forudsætter dog, at jeg er rutineret med makro/vba - det er jeg desværre ikke - og her holder enigheden. Jeg har skrevet formler som er endnu længere og mere uoverskuelige. Her er et par af dem:
Sidstnævnte er udstyret med endnu en funktion, nemlig betinget formatering - Alt har virket upåklageligt i månedsvis, ja endda årevis.
Jeg takker dog for den "uoverskuelige" formel du foreslår, som eksempel. Den vil jeg kigge nærmere på. Er den brugbar, skal jeg nok give dig point som tak.
De er meget stabile. Jeg har ikke noget imod at tilføje en hjælpe-kolonne eller flere, skrive indviklede formler osv. Alt bliver testet før brug. Det, du siger er sikkert rigtigt, forudsat, at jeg forstår makro og vba. Jeg tror, det er mere upraktisk for mig, at lære at programmere end at holde mig til det jeg er god til.
Kan ikke anvende kabbaks makro/vba, da den er usikker på følgende måde: 1- Den kan ikke lave overskrifter på eksisterende navne, kun nye indtastninger. 2- Den kan ikke rette en overskrift, hvis jeg ændrer på et navn. Taster jeg navnet forkert og trykker enter, og senere overskriver/retter navnet, forbliver det forkerte navn som overskrift, selv om en ny overskrift med navn oprettes. 3- Når/hvis jeg laver ændringer på min ark, retter makroen sig ikke automatisk, ligesom formlen gør. 4- Makroen/vba meddeler tit "error" og jeg kan ikke "debug-ge" eller rette et program.
Konklusion: kabbaks løsning er imponerende, men desværre ikke brugbar for mig. baks formel gav mig inspiration til at forsøge mig frem med lignende formler, men det er for det meste for avanceret for mig at forstå. Jeg er gået i stå. Eneste løsning er, at jeg taster hvert nyt navn manuelt, og holder styr på nye navne også manuelt.
Tak for hjælpen bak og kabbak.
Jeg lukker spørgsmålet (hvis jeg kan finde ud af hvordan ;-). Her er min email, skulle nogen finde mig en god løsning. asser@privat.tdcadsl.dk
Jeg har lavet en makro der finder alle, men den er på min hjemme pc. Ved den slætter den alt i række 1, og derefter opretter dem igen. Det vil sige at man manuelt skal starte makroen, for at opdatere. Der er altså intet der kører, uden man ved det.
Er du intresseret, så kan jeg sende den når jeg kommer hjem.
Public Sub TjekAlle() Dim RRNG As Variant, KRNG As Variant, T As Boolean Rows("1:1").ClearContents ' sletter alt i række 1 A = Range("A65536").End(xlUp).Address ' finder den sidste celle der er brugt i A kolonnen Set RRNG = Range("A2:" & A) ' inlæser området i A kolonnen Set KRNG = Range("A1:IV1") ' området til overskrifter For R = 1 To Range("A65536").End(xlUp).Row T = False For I = 1 To 255 If RRNG(R, 1) = KRNG(1, I) Then T = True GoTo OK End If Next I If T = False Then If RRNG(R, 1) = "" Then GoTo OK If IsNumeric(RRNG(R, 1)) Then GoTo OK ' hvis det er tal, hoppes over For K = 1 To 255 If KRNG(1, K) = "" Then ' finder en ledig kolonne til overskriften KRNG(1, K) = RRNG(R, 1) GoTo OK End If Next K End If OK: Next R For K = 1 To 255 Cells(1, K) = KRNG(1, K) ' skriver overskrifterne Next End Sub
Tusind tak kabbak. MEGET interessant! Jeg kan godt lide du giver en ekstra forklaring på dansk ved hver handling. Om jeg kan bruge den i mit regneark, er for tidligt at sige. Om ikke andet, kunne jeg godt tænke mig at anvende dem ved, at bygge helt nye ark med dine makro-forslag fra starten af. Det bliver nok i det nye år, at jeg for alvor sætter mig ind i programmering og makro ifm Excel. Indtil videre stor tak - Jeg mener det! Er det lovligt, at jeg giver dig ekstra point her (50). I så fald fortæl mig hvordan - jeg er rimelig ny her :-/ :-)
Du skal ikke at give ekstra point, jeg har jo fået her. Du skal jo også have nogen du kan bruge, til at spørge om mere.
ellers tak for tilbudet. ;-))
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.