Avatar billede soeren_soelv Novice
19. maj 2008 - 15:19 Der er 2 kommentarer og
1 løsning

Dynamisk data i xy-punkt graf.

Jeg vil gerne lave en xy-punkt graf der henter fra et dynamisk data ark – arket ænder hele tiden form så det ville være meget ressourcekrævende manuelt at definere serier i grafen. Data se ud som nedenstående:

Produktnr    værdi
10000        10
10000        16
10000        12
10000        10
10000        6
20000        4
20000        9
20000        2
Osv        osv.

Det jeg godt kunne tænke mig er at alle værdier med produktnr. 10000 bliver samlet i en serie og alle produktnr. 20000 bliver samlet i en serie osv….

Det samlede antal rækker, samt antallet af rækker med de enkelte produktnumre ændres løbende.

Håber der er en der har en god ide til en løsning.
Avatar billede supertekst Ekspert
19. maj 2008 - 18:26 #1
Det kunne jo godt være - har du en prøve på grundlag af ovenstående data - så må du godt sende dem.
Avatar billede juhlemanden Nybegynder
20. maj 2008 - 22:11 #2
Hvis vi antager, at du har dine væredier stående i et ark der hedder "Ark1", og Produktnr er placeret i A1, samt at du har grafen du vil opdatere som et ark der hedder "Diagram1", så kan du skrive følgende vb-kode i arket "Diagram1", og så vil den automatisk opdatere, hver arket med graffen bliver valgt.

Private Sub Chart_Activate()
    ActiveChart.SetSourceData Source:=Sheets("Ark1").Range("A1", Sheets("Ark1").Range("B65536").End(xlUp)), PlotBy:=xlColumns
End Sub

Håber at det giver mening :)
Avatar billede supertekst Ekspert
21. maj 2008 - 11:31 #3
Rem - version 2 21-05-2008
Rem (Nulstilling fjernet)
Rem (DiagramArk navngives - evt. gl. "DiagramArk" slettes, hvis samme navn)

Const diaNavn = "Proceskontrol (Print)"
Dim sidsteRæk, ddStartRæk
Dim datoTab(), datoRæk, antalDatoer, sidsteDataRække
Private Sub worksheet_activate()
    Application.ScreenUpdating = False

    svar = MsgBox("Opbyg diagram?", vbYesNo)
    If svar = 6 Then
        opbygDiagram
        MsgBox ("DiagramOpbygning afsluttet")
    End If
   
    Application.ScreenUpdating = True
End Sub
Private Sub opbygDiagram()
Rem Test om diagramArk findes - hvis ja: Slet dette
    For Each sh In ActiveWorkbook.Sheets
        If LCase(sh.Name) = LCase(diaNavn) Then
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
            Exit For
        End If
    Next
   
    sidsteRæk = findSidsteRække
   
    ddStartRæk = sidsteRæk + 5
    sletGlData sidsteRæk + 1
   
Rem opret tabel til datoer
    opretDatoTabel
End Sub
Private Function findSidsteRække()
    For ræk = 2 To 65000
        If Cells(ræk, 1) = "" Then
            findSidsteRække = ræk
            Exit Function
        End If
    Next
End Function
Private Sub sletGlData(fraRæk)
    ActiveSheet.Rows(CStr(fraRæk) & ":65000").Select
    Selection.Delete
End Sub
Private Sub opretDatoTabel()
Dim dato As Date
    ReDim datoTab(sidsteRæk)
   
    antalDatoer = 0
    For ræk = 2 To sidsteRæk
        If Cells(ræk, 2) <> "" Then
            dato = Cells(ræk, 2)
            placerItabel dato
        End If
    Next ræk
   
    datoSortering
    opbygFailProduct
    genererDiagram
End Sub
Private Sub placerItabel(dato)
    For ix = 0 To sidsteRæk - 1
        If datoTab(ix) = "" Then
            datoTab(ix) = dato
            antalDatoer = antalDatoer + 1
            Exit Sub
        Else
            If dato = datoTab(ix) Then
Rem dato findes i forvejen
                Exit Sub
            End If
        End If
    Next ix
End Sub
Private Sub datoSortering()
Dim dato As Date
    datoRæk = ddStartRæk
   
Rem placer datoer i Kol A
    For ix = 0 To sidsteRæk - 1
        If datoTab(ix) <> "" Then
            dato = datoTab(ix)
            Cells(datoRæk, 1) = dato
            datoRæk = datoRæk + 1
        Else
            Exit For
        End If
    Next ix
   
    Range("A" & CStr(ddStartRæk) & ":A" & CStr(datoRæk - 1)).Select
    Selection.NumberFormat = "m/d/yyyy"

    Selection.Sort Key1:=Range("A" & CStr(ddStartRæk)), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Selection.Copy

Rem Transponer datoer til overskrifter
    Range("B" & CStr(ddStartRæk)).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
   
    Range("A" & CStr(ddStartRæk) & ":A" & CStr(datoRæk - 1)).Select
    Selection.ClearContents
End Sub
Private Sub opbygFailProduct()
Dim part, dato As Date, fejl
    For ræk = 2 To sidsteRæk
        If Cells(ræk, 1) <> "" Then
            part = Cells(ræk, 1)
            dato = Cells(ræk, 2)
            fejl = Cells(ræk, 10)
            placerFejl ræk, part, dato, fejl
        Else
            Exit For
        End If
    Next ræk
End Sub
Private Sub placerFejl(pRæk, part, dato As Date, fejl)
On Error GoTo fejl
    For ræk = ddStartRæk + 1 To 65000
        If Cells(ræk, 1) = part Then
            kol = findDatoKol(dato)
            Cells(ræk, kol) = fejl
            Exit Sub
        Else
            If Cells(ræk, 1) = "" Then
                Cells(ræk, 1) = part
                kol = findDatoKol(dato)
                Cells(ræk, kol) = fejl
                sidsteDataRække = ræk
                Exit Sub
            End If
        End If
    Next ræk
    Exit Sub

fejl:
    MsgBox ("Fejl - kontakt udvikler")
    Stop
End Sub
Private Function findDatoKol(dato)
    For kol = 2 To antalDatoer + 1
        If dato = Cells(ddStartRæk, kol) Then
            findDatoKol = kol
            Exit Function
        End If
    Next kol
    findDatoKol = 0
End Function
Private Sub genererDiagram()

    Range(Cells(ddStartRæk, 1), Cells(sidsteDataRække, antalDatoer + 1)).Select
   
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    ActiveChart.SetSourceData Source:=Sheets("DATAARK Dagsniveau (Print)").Range( _
        Cells(ddStartRæk, 1), Cells(sidsteDataRække, antalDatoer + 1)), PlotBy:=xlRows
    ActiveChart.Location Where:=xlLocationAsNewSheet
    With ActiveChart
        .HasTitle = False
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
   
Rem Navngiv arket
    ActiveSheet.Name = diaNavn
End Sub
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