Avatar billede zjat Nybegynder
16. november 2011 - 14:53 Der er 15 kommentarer og
1 løsning

VBA: Dynamisk X-værdier i chart

Hej Alle sammen

Jeg ønsker at lave en graf, som tilpasser x-værdierne efter hvor mange værdier, der er i et givent ark.

Problemet er at antallet af værdier svinger og det vil jeg gerne have mit chart kan finde ud af (evt. vha empty søgning eller lign??)

Dvs. Graf 1 kan have 4 x-værdier. Trykker man update, vil der være 10 x-værdier, som grafen skal bruge. Håber nogen kan hjælpe med dette.
16. november 2011 - 15:01 #1
Avatar billede igoogle Forsker
16. november 2011 - 19:47 #2
filter grafer kan også være en mulighed, men #1 ville også være min første vej
Avatar billede zjat Nybegynder
16. november 2011 - 21:40 #3
Tak for de fine og hurtige svar :) Lyder simpelt, dog kan jeg ikke helt få det til at virke.

Jeg har en kolonne med tidspunkter og 3 kolonner med 3 forskellige ting og måle på.

Offset funktionen ser ud til at virke, får i hvert fald lavet 2 områder (1 område med tidspunkter og 1 område med de 3 forskellige målemetoder)

Dette vil jeg så gerne have ind i en graf med 3 forskellige linier, hvor grafen automatisk finder ud af, hvis der kommer flere tal i de enkelte kolonner.

Jeg har prøvet disse formler:

Dato kolonne:
=OFFSET(Sheet1!$A$1;1;0;COUNTA($A:$A)-1;1)

målemetode kolonnerne:
=OFFSET(Sheet1!$B$1;1;0;COUNT($B:$D)-1;1)

og har fundet denne artikel:
http://www.tushar-mehta.com/excel/newsgroups/dynamic_charts/

Desværre er jeg nok ret dum (eller måske bare træt). Men er der ikke en af jer, som konkret kan guide med step by step, hvad jeg skal gøre?
Avatar billede zjat Nybegynder
16. november 2011 - 22:21 #4
Lige til hjælp har jeg prøvet følgende:

X-værdi:
Date = "=OFFSET(data!$A$1;0;0;COUNTA(data!$A:$A)-2;1)"

Y-værdier:
Method = "=OFFSET(data!$B$1;0;0;COUNTA(data!$B:$D)-2;3)"


Sat ind i chart data range:
SERIES('data'!Date;'data'!Method;1)

Der får jeg reference not valid
Avatar billede Slettet bruger
17. november 2011 - 07:22 #5
Det mest oplagte ville da være at søge på "dynamisk graf" her på eksperten. Hvad med for eksempel:

http://www.eksperten.dk/spm/856710
Avatar billede zjat Nybegynder
17. november 2011 - 09:14 #6
Hej dkhanknu :)

Dooh...Desværre så er eksemplet ikke med dynamisk graf, kun med dynamisk celler.

Det er det sidste step jeg ikke kan få til at virke :(
Avatar billede zjat Nybegynder
17. november 2011 - 09:28 #7
Hmm...nu har jeg prøvet og ændre så Y værdierne kun har en kolonne (er det ikke muligt og lave alle 3 metoder i en datasamling?)

og er der nogen som kan vise mig, hvor man kan læse om hvad de enkelte funktioner i offset funktionen betyder?

dvs. hvad betyder 0 0 -2 3 osv i denne funktion:
"=OFFSET(data!$B$1;0;0;COUNTA(data!$B:$D)-2;3)"
Avatar billede zjat Nybegynder
17. november 2011 - 09:42 #8
Hmmm...kan man få dynamic range til at undgå og medtage felter som er tomme - men indeholder formler?
Avatar billede oyejo Nybegynder
17. november 2011 - 10:02 #9
Har du en kode som fungerer på statiske data?
Så kan jeg kanskje hjelpe med at den finner riktig antall rader.
Avatar billede oyejo Nybegynder
17. november 2011 - 10:47 #10
Dette eksempelet kan kanskje hjelpe?

Sub Macro1()
       
    'Starter nedenfra og finner første celle i kolonne A som inneholder data
    lLastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
   
   
    ' Her må du Bytte ut "Chart 1" med navnet på ditt Chart
    ActiveSheet.ChartObjects("Chart 1").Activate
   
    ' Dette eksempelet henter data fra et område som starter med Celle A5 og som har data i kolonne A til D.
    ' Her må du bytte ut A5 med første Celle med data. Bytt også ut D med riktig kolonne
    ActiveChart.SetSourceData Source:=Range("A5:D" & lLastRow)
   
End Sub
Avatar billede zjat Nybegynder
17. november 2011 - 11:06 #11
Hej Oyejo og Thor

Smid svar - jeg fandt løsningen ud fra jeres hjælp :)

Må acceptere at jeg kun kan tage en kolonne af gangen. Så

X-værdi:
Date = "=OFFSET(data!$A$1;0;0;COUNTIF(data!$A:$A;">=0")-2;1)"

Y-værdier:
Method = "=OFFSET(data!$B$1;0;0;COUNTIF(data!$B:$B;">=0")-2;1)"

(CountIF løste problemet med celler med formel, men ingen værdi)

Sat ind i chart data range:
fik jeg ikke til at virke med series - trykke dog det manuelt ind og fik det til at virke.

Hvis der er en venlig sjæl, som kan forklare formelen i detaljer, mangler jeg stadig det:

dvs. hvad betyder 0 0 -2 3 osv i denne funktion:
"=OFFSET(data!$B$1;0;0;COUNTA(data!$B:$D)-2;3)"
Avatar billede igoogle Forsker
17. november 2011 - 14:04 #12
http://chandoo.org/wp/2009/02/12/make-a-dynamic-chart-using-data-filters/

var det link jeg søgte tidligere ..

tli dine værdier så er det 0 = ANTAL rækker 0 = antal colums, -2 er fordi du ikke vil tælle overskrift og række 1 med, 3 er fordi din range er 3 bred.
Avatar billede oyejo Nybegynder
17. november 2011 - 15:39 #13
Jeg venter litt med å sende et svar, da jeg ikke føler du har riktig løsning ennå.

Her er noe som kanskje kan vise vei?


Sub Makro1()
   
    ' Jeg har satt at navnet på arket som inneholder data heter "data" endre dette hvis det er feil
   
   
    'Sett inn riktig rad her = den første raden som inneholder data til Diagram
    'Det er mulig at overskrifter kan være med, prøv deg frem
    lFirstDataRow = 1

    'Finner siste rad som inneholder data eller formler
    'Her blir kolonne B testet, hvis du ønsker kan du bytte til A
    lLastRow = ThisWorkbook.Sheets("data").Range("B" & Rows.Count).End(xlUp).Row


    'Så skal vi finne hvor mange rader i dette området som inneholder verdier større enn 0
    'Her blir kolonne B testet, hvis du ønsker kan du bytte til A
    n = 0
    For lRow = lFirstDataRow To lLastRow
        If ThisWorkbook.Sheets("data").Range("B" & lRow).Value > 0 Then
            n = n + 1
        End If
    Next


  ' Data til diagrammet kan nå skrives slik, her blir området merket
  ThisWorkbook.Sheets("data").Range(Cells(lFirstDataRow, 1), Cells(lFirstDataRow + n, 4)).Select
 

'Nå mangler bare og overføre dette området til ditt diagram, men her mangler jeg opplysninger for å kode riktig


End Sub


' Slik ser koden ut uten merknader

Sub Makro2()
   
   
    lFirstDataRow = 1
   
    lLastRow = ThisWorkbook.Sheets("data").Range("B" & Rows.Count).End(xlUp).Row
   
    n = -1
    For lRow = lFirstDataRow To lLastRow
        If ThisWorkbook.Sheets("data").Range("B" & lRow).Value > 0 Then
            n = n + 1
        End If
    Next
 
  ThisWorkbook.Sheets("data").Range(Cells(lFirstDataRow, 1), Cells(lFirstDataRow + n, 4)).Select
 

End Sub
Avatar billede zjat Nybegynder
23. november 2011 - 12:31 #14
Hej Oyejo og Thor

Jeg har lavet det manuelt og det er blevet rigtig fint :) takker for jeres tålmodighed og I må gerne smide svar :)
Avatar billede oyejo Nybegynder
23. november 2011 - 12:41 #15
Hei zjat

Hvis du fikset det selv er vel pointene dine?

Bra at du fikset det :-)
Avatar billede zjat Nybegynder
28. februar 2012 - 07:45 #16
Så snupper jeg dem :)

Ellers må I protestere og så får I dem ;)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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