2012-05-13 15 views
15

रेंज से नहीं चार्ट (उदा। डबल वाई-एक्सिस लाइन चार्ट) बनाना संभव है, लेकिन ऐरे डेटा से? यदि हां, तो कैसे?ऐरे डेटा से चार्ट बनाएं और

+0

संभावित डुप्लिकेट [रनटाइम पर एक्सेल चार्ट के गतिशील डेटा को सेट करने के लिए और Excel नहीं। श्रेणी] (http://stackoverflow.com/questions/7380266/to-set-dynamic-data-of-excel-chart-at -रंटिम-एंड-न-एक्सेल-रेंज) – assylias

+1

@ वासिलियास: यह एक स्पष्ट डुप्लिकेट नहीं है ... भाषा सी # है, वीबीए नहीं। अवधारणाएं काफी समान हैं, लेकिन एक कामकाजी उदाहरण बिल्कुल वैसा नहीं दिखता है। –

+0

@ वासिलियास प्लस मैंने दूसरे प्रश्न को नहीं देखा क्योंकि वास्तव में उत्तर दिया जा रहा है – brettdj

उत्तर

13

हां। आप चार्ट पर Series ऑब्जेक्ट के XValues और Values गुणों के लिए सरणी असाइन कर सकते हैं। उदाहरण:

Dim c As Chart 
Dim s As Series 
Dim myData As Variant 

Set c = ActiveChart ' Assumes a chart is currently active in Excel... 
Set s = c.SeriesCollection(1) 

myData = Array(9, 6, 7, 1) ' or whatever 
s.Values = myData 
+0

यह डेटा के आकार पर एक सीमा है जो आप इस तरह कर सकते हैं। मुझे याद नहीं है कि यह क्या है, लेकिन यह छोटा है। – ja72

+4

@ ja72: "छोटा" परिभाषित करें? ... मैंने अभी इसे 16,000 अंकों के साथ परीक्षण किया है। –

+0

बहुत बढ़िया। मुझे सही साबित होना है। – ja72

8

आप एक्सेल 2007 के बाद में, लेकिन पिछले संस्करणों में श्रृंखला चार्ट बनाने के लिए सरणियों असाइन कर सकते हैं मेरा मानना ​​है कि प्रत्येक श्रृंखला की लंबाई के लिए एक 255 वर्ण सीमा नहीं है। एक विधि मैं इस प्रतिबंध को हल करने के लिए प्रयोग किया जाता है निम्नलिखित यादृच्छिक टहलने के उदाहरण में दिखाया गया है:

Sub ChartArray() 

Dim x(0 To 1000, 0 To 0) As Double 
Dim y(0 To 1000, 0 To 0) As Double 
x(0, 0) = 0 
y(0, 0) = 0 
For i = 1 To 1000 
    x(i, 0) = i 
    y(i, 0) = y(i - 1, 0) + WorksheetFunction.NormSInv(Rnd()) 
Next i 

Charts.Add 
ActiveChart.ChartType = xlXYScatterLinesNoMarkers 
With ActiveChart.SeriesCollection 
    If .Count = 0 Then .NewSeries 
    If Val(Application.Version) >= 12 Then 
     .Item(1).Values = y 
     .Item(1).XValues = x 
    Else 
     .Item(1).Select 
     Names.Add "_", x 
     ExecuteExcel4Macro "series.x(!_)" 
     Names.Add "_", y 
     ExecuteExcel4Macro "series.y(,!_)" 
     Names("_").Delete 
    End If 
End With 
ActiveChart.ChartArea.Select 

End Sub 

एक वैकल्पिक पद्धति सरणियों के नाम (ऊपर वैकल्पिक हल के समान) आवंटित करने के लिए और उसके बाद श्रृंखला का उल्लेख करने के लिए सेट है निर्दिष्ट नाम। जब तक आप xls प्रारूप में सहेजते हैं, तब तक यह सभी संस्करणों में ठीक काम करता है, लेकिन नए xlsx/xlsm/xlsb प्रारूपों को सहेजते समय 8192 वर्णों के नामित सरणी के लिए लंबाई सीमा दिखाई देती है।

+0

का उपयोग करके असीमित संख्या को हैक करने की आवश्यकता नहीं है जिज्ञासा से, क्या 'ExecuteExcel4Macro' चाल 2007 और बाद में काम नहीं करती है? इसने Excel 2007 में इसे आज़माया और चार्ट में कोई डेटा नहीं है। –

+0

कोई पुराना एक्सेल 4 आदेश बाद के संस्करणों में चार्ट पर काम नहीं कर रहा है जो परेशान है। –

+0

ठीक है, धन्यवाद। दिलचस्प/भयानक दृष्टिकोण के लिए +1! –