Avatar billede jens_friis Nybegynder
14. marts 2006 - 13:09 Der er 22 kommentarer

Excel - Makro - Udvid navngivet område

Jeg skal bruge en makro i Excel 2000/XP/2003.

BAGGRUND:
Jeg har lavet en lille ”applikation” i Excel. Den bruger en lille database, som jeg har navngivet Posteringer.

SITUATION:
I række 1 har jeg kolonneoverskrifter (feltnavne).
I de efterfølgende rækker har jeg data-records.
Der er pt. ca. 500 data-records. Der vil komme op til 5-8.000.

Kolonne A-N indeholder ”rigtige data”.
Kolonne O-S indeholder formler relateret til kolonne A-N.
Formlerne i kolonne O-S har jeg kopieret til de første 10.000 rækker, så man ikke skal gøre det løbende.

De løbende ændringer består i at man indtaster nye records i kolonne A-N.

UDFORDRING:
Jeg vil gerne lave en makro der kan tage udvide området Posteringer til at omfatte alle rækker med rigtige data-records.

DET HAR JEG PRØVET:
1. Jeg har lavet makroer – også med relative referencer – men de bliver ved også at indsætte det konkrete sidste rækkenr. i koden.
2. Jeg har navngivet alle 10.000 rækker, men så kommer der blanke records op i de efterfølgende pivot-tabeller, og det vil jeg ikke gerne have.

Kan du hjælpe?
På forhånd tak.
Jens
14. marts 2006 - 13:21 #1
Dim rRealData As Range
    Set rRealData = Range("A2:N" & CStr(Range("A1").End(xlDown).Row))

Vil du bare have en variable til at holde hele dit område (som vist i eksemplet) eller hvad er det egenligt du ønsker?
Avatar billede jens_friis Nybegynder
14. marts 2006 - 13:53 #2
Tak for hurtigt svar.
Det jeg egentlig ønsker er følgende:
"
UDFORDRING:
Jeg vil gerne lave en makro der kan tage udvide området Posteringer til at omfatte alle rækker med rigtige data-records.
"
Sagt på en anden måde.
Når jeg er færdig med makroen skal det navngivne område Posteringer omfatte alle records. For jeg refererer til det navngivne område Posteringer i Pivottabeller.

Eksempel:
Starttilstand: Det navngivne område posteringer dækker nu A1:S299.
Brugerhandling: Der indtastes data i række 300-310 (i kolonnerne A-N)
Systemreaktion: Der beregnes på formlerne i kolonne O-S for række 300-310.
Behov for makro: Udvid/redefiner det navngivne område Posteringer til at dække A1:S310.

Herefter vil Pivottabeller automatisk medtage de nye datarecords.
Avatar billede x-lars Novice
14. marts 2006 - 15:08 #3
Behøver du overhovedet en makro til det?

Hvis du sætter følgende definition ind af navnet, burde det kunne gøre det:

=FORSKYDNING(A1;0;0;TÆLV(A1:N1000);1)

Det sikrer en dynamisk navngivning.
14. marts 2006 - 15:08 #4
Fattet
14. marts 2006 - 15:09 #5
x-lars' løsning burde virke.
Avatar billede x-lars Novice
14. marts 2006 - 15:10 #6
Sorry, skulle selvfølgelig være:

=FORSKYDNING(A1;0;0;TÆLV(A1:S1000);1)
(S i stedet for N i opslagsmatrixen)
14. marts 2006 - 15:14 #7
skal det være VBA, så kunne koden pladseres i arkets egen kode - ret arknavn i nedenstående

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveWorkbook.Names("Posteringer").RefersToR1C1 = "=Sheet1!R1C1:R" & CStr(Range("A1").End(xlDown).Row) & "C14"
End Sub
Avatar billede jens_friis Nybegynder
14. marts 2006 - 15:31 #8
Jeg kan ikke få x-lars' løsning til at virke.

Jeg kan godt indtaste det som definition på navn men ...

1) Jeg kan ikke umiddelbart kontrollere hvad navnet Posteringer så omfatter (ikke med i F5 (gå til).
(ikke kritisk - men kan hjælpe på fejlsøgning)

2) Mine pivottabeller er i hvert fald ikke længere baseret på posterne.
(kritisk)
Avatar billede x-lars Novice
14. marts 2006 - 15:35 #9
Hmmmmm.....

Er der blanke rækker blandt posteringerne?
Avatar billede jens_friis Nybegynder
14. marts 2006 - 15:37 #10
flemmingdahls løsningsforslag ser spændende ud.
Jeg formoder at det sidste "C14" refererer til kolonne N. Så hvis jeg skal have Posteringer til at omfatte kolonner fra A-S regner jeg med at jeg skal jeg skrive "C19"

Det betyder så også (nu gætter jeg), at jeg ikke skal definere navnet Posteringer i brugergrænsefladen, fordi det nu er defineret i VBA?
14. marts 2006 - 15:37 #11
Du kan checke området reference således

    MsgBox ActiveWorkbook.Names("Posteringer").RefersToRange.Address
14. marts 2006 - 15:38 #12
rigtig regnet jens_friis
14. marts 2006 - 15:39 #13
du behøver ikke definere Posteringer yderligere - der skal dog være et område der hedder Posteringer
Avatar billede jens_friis Nybegynder
14. marts 2006 - 15:40 #14
Til x-lars:
Der er blanke rækker i kolonne A-N EFTER de rigtige datarecords.

Skitse:

ABCDEFGHIJKLMNOPQRS  Rigtig datarecord
ABCDEFGHIJKLMNOPQRS  Rigtig datarecord
ABCDEFGHIJKLMNOPQRS  Rigtig datarecord
ABCDEFGHIJKLMNOPQRS  Rigtig datarecord
              OPQRS  Række med formler
              OPQRS  Række med formler
              OPQRS  Række med formler
              OPQRS  Række med formler
              OPQRS  Række med formler
Avatar billede jens_friis Nybegynder
14. marts 2006 - 15:59 #15
Til x-lars:
Der er også nogle blanke celler i de rigtige datarecords, men ikke i kolonne A.
Avatar billede jens_friis Nybegynder
14. marts 2006 - 16:07 #16
Til flemmingdahl:
Jeg kan ikke lige det til at fungere, og forstår heller ikke lige følgende:

Som jeg forstår dig skal jeg have et område der hedder Posteringer, men behøver ikke at definere det yderligere. Hvordan sådan mere præcist?

Det jeg kan finde ud af i brugergrænsefladen er at definere et område ved at lade det referere til et område.

Hvis jeg fjerner definitionen fjerner Excel også navnet.

Og hvis jeg lader definition omfatte A1 fejler Pivot-tabellen (for den skal have mere end én celle at referere til).

Og det var vel hér den VBA-definerede "Posteringer" skulle overstyre hvad navnet Posteringer egentlig referer til?


Jeg er ikke ret bekendt med VBA og kan ikke finde ud af hvordan jeg skal anvende dit gode hint:

"
Du kan checke området reference således

    MsgBox ActiveWorkbook.Names("Posteringer").RefersToRange.Address
"
14. marts 2006 - 16:09 #17
Tror ikke på x-lars' løsning virker, når du alle de der tomme fomler... Jeg ville lave op på din løsning, hvis det var mit regneark.

Når der bliver skrevet i kolonne A i en given række:
- så vil en makro tilføje nødvendige fomler til denne række
- navnet "Posteringer" vil blive opdateret og dermed din pivottabel
14. marts 2006 - 16:11 #18
ikke ret bekendt med VBA - jeg laver lige et lille eksempel fremfor at forklare
14. marts 2006 - 16:34 #19
Du finder en demo her http://www.smartoffice.dk/Tips/Eksperten/Index.asp - husk nummeret på dette spørgsmål.
15. marts 2006 - 09:25 #20
Private Const msRNG_POSTERINGER As String = "Posteringer"

Private Sub Worksheet_Change(ByVal Target As Range)
    ' kan bruges til at smide formler på nye rækker hvis der skrives i kolonne A
    If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then
        If Not Intersect(Target, Range("A:A")) Is Nothing Then
            If Cells(Target.Row, 15).FormulaR1C1 = "" Then
                Cells(Target.Row, 15).FormulaR1C1 = "=YEAR(RC[-6])"
                Cells(Target.Row, 16).FormulaR1C1 = "=IF(MONTH(RC[-7])<8,RC[-1]&""-1"",RC[-1]&""-2"")"
                Cells(Target.Row, 17).FormulaR1C1 = "=VLOOKUP(RC[-16],KontoPlanNiv,2,TRUE)"
                Cells(Target.Row, 18).FormulaR1C1 = "=VLOOKUP(RC[-17],KontoPlanNiv,3,TRUE)"
                Cells(Target.Row, 19).FormulaR1C1 = "=VLOOKUP(RC[-18],KontoPlanNiv,4,TRUE)"
            End If
        End If
    End If
   
    ' Styrer størrelsen på området posteringer
    If Intersect(Target, Range(msRNG_POSTERINGER)) Is Nothing Or Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then
        Application.EnableEvents = False
        ActiveWorkbook.Names(msRNG_POSTERINGER).RefersToR1C1 = _
            "='" & Me.Name & "'!R9C1:R" & CStr(Range("A10").End(xlDown).Row) & "C19"
        Application.EnableEvents = True
        'Den næste linie er kun med i dette eksempel for at vise Posteringer's område
        MsgBox ActiveWorkbook.Names(msRNG_POSTERINGER).RefersToRange.Address
    End If
End Sub
Avatar billede jens_friis Nybegynder
15. marts 2006 - 20:32 #21
Helt perfekt Flemming.

Mange tak for hjælpen - det er helt præcis hvad jeg har brug for.

5 ***** for din ekspertise!!

mvh.

Jens
15. marts 2006 - 20:40 #22
Takker
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