izris grafa/slike v excelu

Pomoč pri delu z MS Excelom
Odgovori
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

izris grafa/slike v excelu

Odgovor Napisal/-a jure121 »

Zdravo
Želim (ampak ne znam :? ) narediti izris daljic, za katere vem koordinate začetnih in končnih točk.

Primer
x1 y1 x2 y2
1 1 3 1
4 2 4 7
...

Podatki bi bili v obliki tabele (poljubno št. vrstic) v Excelu, graf/slika pa bi se izrisala ob tabeli
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Uf, o temle ne vem nič :( je pa neka podobna tema tukaj, malo si oglejte, morda dobite kak navdih.
lp,

cedra
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

Hm, ne, ne pomaga mi tisto. Sicer vseeno hvala za trud, cedra, ampak...
V tisti temi gre za manj daljic in praktično samo za en graf. Izris 1, 2... ali celo 10 neodvisnih daljic bi se zlahka dalo narisati z grafikonom, ki ga ponuja excel. Izris poljubnega števila daljic pa mislim, da se da le s pomočjo vb. In tu vas prosim za pomoč. S programiranjem sem si popolnoma tuj. :oops:

Če morda kdo ve kje začeti, kako postaviti risalno površino in na njej koordinatni sistem (ki naj bi se spreminjal glede na največje vrednosti x, y koordinat), kako zapisati kodo za izris le ene daljice...
Karkoli mi bo zelo v pomoč.
Hvala in lp
Jure
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Če znate izrisati željeni graf za 10 daljic, potem ga znate tudi za poljubno število vrstic. Razlika med grafom z 10 daljicami in grafom z poljubno daljicami je samo v količini podatkov, torej v območju grafa. Pravo vprašanje je kako bi vi narisali graf z 10 daljicami; jaz se namreč tega nebi lotil v Excelu.
lp,
Matjaž Prtenjak
Administrator
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

admin napisal/-a: Pravo vprašanje je kako bi vi narisali graf z 10 daljicami
Ravnokar mi je uspelo izrisati 10 daljic. Za vrsto grafikona je izbran graf xy raztreseni, podatke pa je potrebno za vsak graf (dalljico) ponovno označevati. Tako za x os naprimer določim območje A2; C2, za y os pa območje B2 in D2. Excel nato ustrezni vrednosti x pripiše ustrezen y (prvemu x ustreza prvi y...). Tako dobim točke - točka 1: T1(A2,B2); točka 2: T2(C2,D2). Med njima nariše graf - daljico.

Vendar...
Območja podatkov se na tak način ne da poljubno povečevati. Ali pač?
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Če ste zadovoljni s tem, potem imate spodaj makro, ki vam bo izrisal takšen graf:

Koda: Izberi vse

Sub RisiDaljice()
'
' Napisal: Matjaž Prtenjak
'          www.matjazev.net
'
' Datum:   27.11.2008
'
  Dim obmocje As Range
  Set obmocje = Selection.CurrentRegion
  
  ' Območje mora imeti natanko 5 kolon.
  ' V prvi koloni je ime daljice
  ' V drugi in tretji koloni sta X in Y začetne točke daljice
  ' V tretji in četrti koloni sta X in Y končne točke daljice
  
  Dim list As String
  list = ActiveSheet.Name & "!"
      
  Charts.Add
  ActiveChart.ChartType = xlXYScatterLines
  ActiveChart.SetSourceData Source:=obmocje, PlotBy:=xlRows
  
  Dim daljica As Integer
  
  Dim ime As String, x As String, x1 As String, y As String, y1 As String
  For daljica = 1 To obmocje.Rows.Count - 1
    ime = obmocje.Cells(1, 1).Offset(daljica, 0)
    x = list & obmocje.Cells(1, 1).Offset(daljica, 1).Address(ReferenceStyle:=xlR1C1)
    y = list & obmocje.Cells(1, 1).Offset(daljica, 2).Address(ReferenceStyle:=xlR1C1)
    x1 = list & obmocje.Cells(1, 1).Offset(daljica, 3).Address(ReferenceStyle:=xlR1C1)
    y1 = list & obmocje.Cells(1, 1).Offset(daljica, 4).Address(ReferenceStyle:=xlR1C1)
    
    ActiveChart.SeriesCollection(daljica).Name = ime
    ActiveChart.SeriesCollection(daljica).XValues = "=(" & x & "," & x1 & ")"
    ActiveChart.SeriesCollection(daljica).Values = "=(" & y & "," & y1 & ")"
  Next
  
  With ActiveChart
      .HasTitle = False
      .Axes(xlCategory, xlPrimary).HasTitle = False
      .Axes(xlValue, xlPrimary).HasTitle = False
  End With
End Sub
Da bo makro deloval morate pripraviti tabelo s petimi kolonami v sledeči obliki:

Koda: Izberi vse

ime  x1   y1  x2  y2
t1   -3  -13  14   1
t2  -11   13  -4   4
t3   -7   10 -10   0
Torej 5(!) kolon s podatki: Ime daljica, X, Y, X1, Y1

Ko imate tabelo narejeno se postavite kamorkoli vanjo in izvedite makro.[/b]

Ker ste na forumu novi vas opozarjam, da lahko makro prosto uporabljate di ga delite naokoli, vendar mora zgoraj vedno ostati moje ime in ime spletišča www.matjazev.net!
lp,
Matjaž Prtenjak
Administrator
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

Saj vam nočem moriti... :?
storil sem kot ste naročili, ampak mi ne dela. Javi mi:

Run time error:
neveljavni parameter

in označi vrstico v kodi
ActiveChart.SeriesCollection(daljica).Name = ime

Koordinatni sistem se mi pokaže, ampak izriše se le graf t1, vendar napačno. Če se postavim na izrisani točki, napiše:
Niz "t1 " točka "-3" (1,0)
Niz "t2 " točka "14" (2,0)
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pa ste tabelo pripravili TOČNO tako kot sem napisal?
lp,
Matjaž Prtenjak
Administrator
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

Prav isto
5 kolon 4 vrstice... skoperu sm vašo in pretvoru tekst v stolpce
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

ha, sm zdle poskusu, če tabelo sam ustvarim (ne pretvarjam vaše) in je uspelo!!! :D
Najlepša vam hvala za pomoč!!!
Jure
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

Živjo!
Še eno vprašanje bi imel glede grafa. Kako lahko definiram barvo neke določene daljice?
Poskusil sem s podobnimi variantami kot je:

ActiveChart.SeriesCollection(daljica).Color = RGB(0, 255, 0)

ampak mi ni uspelo. :(

Hvala za pomoč
Lp Jure
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Spodnji makro vam bo vsako daljico pobarval tako, kot je barva šeste celice v tabeli:

Koda: Izberi vse

     x1   y1  x2  y2  barva
t1   -3  -13  14   1  <celico pobarvajte tako, kot zelite barvo črte>
t2  -11   13  -4   4  <celico pobarvajte tako, kot zelite barvo črte>
t3   -7   10 -10   0  <celico pobarvajte tako, kot zelite barvo črte>
Pa še makro:

Koda: Izberi vse

Sub RisiDaljice()
'
' Napisal: Matjaž Prtenjak
'          www.matjazev.net
'
' Datum:   27.11.2008
'
  Dim obmocje As Range
  Set obmocje = Selection.CurrentRegion
 
  ' Območje mora imeti natanko 6 kolon.
  ' V prvi koloni je ime daljice
  ' V drugi in tretji koloni sta X in Y začetne točke daljice
  ' V četrti in peti koloni sta X in Y končne točke daljice
  ' Šesta kolona mora biti pobarvana

  Dim list As String
  list = "'" & ActiveSheet.Name & "'!"
     
  Charts.Add
  ActiveChart.ChartType = xlXYScatterLines
  ActiveChart.SetSourceData Source:=obmocje, PlotBy:=xlRows
 
  Dim daljica As Integer
 
  Dim ime As String, x As String, x1 As String, y As String, y1 As String, ci As Integer
  For daljica = 1 To obmocje.Rows.Count - 1
    ime = obmocje.Cells(1, 1).Offset(daljica, 0)
    x = list & obmocje.Cells(1, 1).Offset(daljica, 1).Address(ReferenceStyle:=xlR1C1)
    y = list & obmocje.Cells(1, 1).Offset(daljica, 2).Address(ReferenceStyle:=xlR1C1)
    x1 = list & obmocje.Cells(1, 1).Offset(daljica, 3).Address(ReferenceStyle:=xlR1C1)
    y1 = list & obmocje.Cells(1, 1).Offset(daljica, 4).Address(ReferenceStyle:=xlR1C1)
    ci = obmocje.Cells(1, 1).Offset(daljica, 5).Interior.ColorIndex
   
    ActiveChart.SeriesCollection(daljica).Name = ime
    ActiveChart.SeriesCollection(daljica).XValues = "=(" & x & "," & x1 & ")"
    ActiveChart.SeriesCollection(daljica).Values = "=(" & y & "," & y1 & ")"
    ActiveChart.SeriesCollection(daljica).Border.ColorIndex = ci
  Next
 
  With ActiveChart
      .HasTitle = False
      .Axes(xlCategory, xlPrimary).HasTitle = False
      .Axes(xlValue, xlPrimary).HasTitle = False
  End With
End Sub
Opombi:
  1. V prvi tabeli, ki sem vam jo napisal ob makru je res napaka, saj mora biti gornja leva celica (tam kjer piše ime) prazna, sicer makro ne deluje pravilno
  2. Nov makro se od starega razlikuje v dveh podrobnostih - pozna barve in popravljen je hrošč, saj bi prvi makro ne deloval, je bi imeli v imenu lista presledek. Nov makro deluje pravilno tudi v takšnem primeru.
lp,
Matjaž Prtenjak
Administrator
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

Odgovor Napisal/-a jure121 »

Deluje, izvrstno deluje :wink: hvala

Zanima me pa samo še ena stvar:
A barve pri pogojnem oblikovanju niso polnilo celice?? Če sem namreč obarval celice v 6. stolpcu s pomočjo pogojnega oblikovanja, se mi daljice na grafu niso izrisale v skladu s temi barvami. Malo nenavadno...
a je rešitev problema pogojno oblikovanje celic v vb-ju ali je možno aplicirati barve pogojnega oblikovanja tudi na polnila.

Lp, Jure
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Ne, pogojno oblikovanje se izračunava sproti in barve pogojnega oblokovanja je precej težje dobiti.
lp,
Matjaž Prtenjak
Administrator
Odgovori