Avatar billede ab58 Novice
19. november 2003 - 00:46 Der 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.
Avatar billede kabbak Professor
19. november 2003 - 08:39 #1
prøv at sætte denne makro ind i dit ark modul

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
Avatar billede ab58 Novice
19. november 2003 - 16:03 #2
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?
Avatar billede kabbak Professor
19. november 2003 - 17:05 #3
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
Avatar billede ab58 Novice
19. november 2003 - 17:42 #4
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?
Avatar billede kabbak Professor
19. november 2003 - 18:36 #5
Det med tomme celler,skulle den heller ikke gøre, den kikker kun på den celle i A kolonnen du skriver i eller rettet
Avatar billede kabbak Professor
19. november 2003 - 18:37 #6
nb. den kan ikke skrive i A1, det skal du selv gøre.
Avatar billede ab58 Novice
19. november 2003 - 19:32 #7
kabbak:  Du har ret. Her er dine fortjente points.

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.
Avatar billede kabbak Professor
19. november 2003 - 20:39 #8
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.
Avatar billede bak Forsker
19. november 2003 - 21:56 #9
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
Avatar billede ab58 Novice
19. november 2003 - 22:44 #10
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.
Avatar billede ab58 Novice
19. november 2003 - 23:32 #11
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:

=HVIS(ELLER(OG($C14="fre";$C11="fre");OG($C14="lør";$C11="lør"));HVIS(ELLER(E14=0;H14=0);"";HVIS(E14/H14<(T13+0,5);"e/b !";""));HVIS(ELLER(OG($C14="man";$C11="man");OG($C14="tir";$C11="tir");OG($C14="ons";$C11="ons");OG($C14="tor";$C11="tor"));HVIS(ELLER(E14=0;H14=0);"";HVIS(E14/H14<(S13+0,5);"e/b !";""));HVIS(ELLER($C14="lør";$C11="lør");HVIS(ELLER(E14=0;H14=0);"";HVIS(E14/H14<(S13+0,5);"e/b !";""));HVIS(ELLER($C14="søn";$C14="hel");HVIS(ELLER(E14=0;H14=0);"";HVIS(E14/H14<(S13+0,5);"e/b !";""));HVIS(ELLER(E14=0;H14=0);"";HVIS(E14/H14<(R13+0,5);"e/b !";""))))))

og:

=HVIS(HVIS($C12<>"";HVIS($B12=X$10;$K12+HVIS($V9="LØN";0;HVIS(X9="";0;X9));HVIS($V9="LØN";0;HVIS(X9="";0;X9)));"")=0;"";HVIS($C12<>"";HVIS($B12=X$10;$K12+HVIS($V9="LØN";0;HVIS(X9="";0;X9));HVIS($V9="LØN";0;HVIS(X9="";0;X9)));""))

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.
Avatar billede ab58 Novice
20. november 2003 - 03:10 #12
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
Avatar billede kabbak Professor
20. november 2003 - 08:13 #13
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.
Avatar billede ab58 Novice
23. november 2003 - 01:37 #14
kabbak:
Ja tak - ved lejlighed :-)
Avatar billede kabbak Professor
23. november 2003 - 11:23 #15
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
Avatar billede ab58 Novice
25. november 2003 - 12:43 #16
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
:-/ :-)
Avatar billede kabbak Professor
25. november 2003 - 12:58 #17
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. ;-))
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