excel-vba
चार्ट और चार्टिंग
खोज…
रेंज और एक निश्चित नाम के साथ एक चार्ट बनाना
चार्ट डेटा को परिभाषित करने वाली Series ऑब्जेक्ट के साथ सीधे काम करके चार्ट बनाया जा सकता है। ChartObject चार्ट के बिना Series आने के लिए, आप दिए गए Worksheet पर एक ChartObject बनाते हैं और फिर उससे Chart ऑब्जेक्ट प्राप्त करते हैं। Series वस्तु के साथ काम करने का उल्टा यह है कि आप Range ऑब्जेक्ट्स का संदर्भ XValues Values और XValues सेट कर सकते हैं। ये डेटा गुण Series को उन श्रेणियों के संदर्भ में ठीक से परिभाषित करेंगे। इस दृष्टिकोण के नकारात्मक पक्ष यह है कि Name सेट करते समय समान रूपांतरण को संभाला नहीं जाता है; यह एक निश्चित मूल्य है। यह मूल Range में अंतर्निहित डेटा के साथ समायोजित नहीं होगा। SERIES सूत्र की जाँच करना और यह स्पष्ट है कि नाम तय हो गया है। इसे सीधे SERIES सूत्र बनाकर संभाला जाना चाहिए।
चार्ट बनाने के लिए प्रयुक्त कोड
ध्यान दें कि इस कोड में Chart और Worksheet लिए अतिरिक्त चर घोषणाएं हैं। यदि उनका उपयोग नहीं किया जाता है तो इन्हें छोड़ा जा सकता है। यदि आप शैली या किसी अन्य चार्ट गुण को संशोधित कर रहे हैं तो वे उपयोगी हो सकते हैं।
Sub CreateChartWithRangesAndFixedName()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get reference to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
ser.Values = yData
ser.XValues = xData
ser.Name = serName
ser.ChartType = xlXYScatterLines
End Sub
मूल डेटा / पर्वतमाला और कोड रन के बाद Chart
ध्यान दें कि SERIES सूत्र एक भी शामिल है "B" श्रृंखला नाम के बजाय के लिए एक संदर्भ के लिए Range है कि यह बनाया।
एक खाली चार्ट बनाना
चार्टिंग कोड के विशाल बहुमत के लिए शुरुआती बिंदु एक खाली Chart बनाना है। ध्यान दें कि यह Chart डिफ़ॉल्ट चार्ट टेम्पलेट के अधीन है जो सक्रिय है और वास्तव में खाली नहीं हो सकता है (यदि टेम्पलेट को संशोधित किया गया है)।
ChartObject की कुंजी इसके स्थान का निर्धारण कर रही है। कॉल के लिए सिंटैक्स ChartObjects.Add(Left, Top, Width, Height) । एक बार जब ChartObject बनाया जाता है, तो आप वास्तव में चार्ट को संशोधित करने के लिए इसके Chart ऑब्जेक्ट का उपयोग कर सकते हैं। ChartObject शीट पर चार्ट को स्थिति के लिए Shape तरह अधिक व्यवहार करता है।
खाली चार्ट बनाने के लिए कोड
Sub CreateEmptyChart()
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (0, 0) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'additional code to modify the empty chart
'...
End Sub
परिणाम चार्ट
श्रृंखला सूत्र को संशोधित करके एक चार्ट बनाएं
एक नए Chart और Series ऑब्जेक्ट (विशेष रूप से एक डायनामिक Series नाम के लिए) पर पूर्ण नियंत्रण के लिए, आपको सीधे SERIES सूत्र को संशोधित करना होगा। Range ऑब्जेक्ट्स सेट करने की प्रक्रिया सीधी है और मुख्य बाधा केवल SERIES सूत्र के लिए स्ट्रिंग बिल्डिंग है।
SERIES सूत्र निम्न सिंटैक्स लेता है:
=SERIES(Name,XValues,Values,Order)
इन सामग्रियों को संदर्भ या डेटा आइटम के लिए सरणी मान के रूप में आपूर्ति की जा सकती है। Order चार्ट के भीतर श्रृंखला की स्थिति का प्रतिनिधित्व करता है। ध्यान दें कि डेटा के संदर्भ तब तक काम नहीं करेंगे जब तक कि वे शीट नाम के साथ पूरी तरह से योग्य न हों। कार्य सूत्र के उदाहरण के लिए, किसी भी मौजूदा श्रृंखला पर क्लिक करें और सूत्र पट्टी की जाँच करें।
एक चार्ट बनाने और SERIES सूत्र का उपयोग करके डेटा सेट करने के लिए कोड
ध्यान दें कि SERIES सूत्र का उपयोग करने के लिए स्ट्रिंग बिल्डिंग .Address(,,,True) । यह सुनिश्चित करता है कि बाहरी रेंज संदर्भ का उपयोग किया जाता है ताकि शीट नाम के साथ पूरी तरह से योग्य पता शामिल हो। यदि शीट नाम को बाहर रखा गया है, तो आपको एक त्रुटि मिलेगी ।
Sub CreateChartUsingSeriesFormula()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
'set the SERIES formula
'=SERIES(name, xData, yData, plotOrder)
Dim formulaValue As String
formulaValue = "=SERIES(" & _
serName.Address(, , , True) & "," & _
xData.Address(, , , True) & "," & _
yData.Address(, , , True) & ",1)"
ser.Formula = formulaValue
ser.ChartType = xlXYScatterLines
End Sub
मूल डेटा और परिणामस्वरूप चार्ट
ध्यान दें कि इस चार्ट के लिए, श्रृंखला नाम वांछित सेल में एक सीमा के साथ ठीक से सेट है। इसका मतलब है कि अपडेट Chart प्रचारित करेंगे।
एक ग्रिड में चार्ट की व्यवस्था करना
एक्सेल में चार्ट के साथ एक सामान्य कोर एक शीट पर कई चार्ट के आकार और लेआउट को मानकीकृत कर रहा है। यदि मैन्युअल रूप से किया जाता है, तो आप सेल सीमाओं के लिए चार्ट को "स्टिक" में बदलने या स्थानांतरित करते हुए एएलटी को दबाए रख सकते हैं। यह एक युगल चार्ट के लिए काम करता है, लेकिन एक VBA दृष्टिकोण बहुत सरल है।
एक ग्रिड बनाने के लिए कोड
यह कोड दी गई (टॉप, लेफ्ट) स्थिति में शुरू होने वाले चार्टों का एक ग्रिड बनाएगा, जिसमें परिभाषित संख्या में कॉलम और एक परिभाषित कॉमन चार्ट साइज होगा। चार्ट को उस क्रम में रखा जाएगा जो वे बनाए गए थे और एक नई पंक्ति बनाने के लिए किनारे के चारों ओर लपेटते हैं।
Sub CreateGridOfCharts()
Dim int_cols As Integer
int_cols = 3
Dim cht_width As Double
cht_width = 250
Dim cht_height As Double
cht_height = 200
Dim offset_vertical As Double
offset_vertical = 195
Dim offset_horz As Double
offset_horz = 40
Dim sht As Worksheet
Set sht = ActiveSheet
Dim count As Integer
count = 0
'iterate through ChartObjects on current sheet
Dim cht_obj As ChartObject
For Each cht_obj In sht.ChartObjects
'use integer division and Mod to get position in grid
cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
cht_obj.Width = cht_width
cht_obj.Height = cht_height
count = count + 1
Next cht_obj
End Sub
कई चार्ट के साथ परिणाम
ये चित्र चार्ट के मूल यादृच्छिक लेआउट और परिणामस्वरूप कोड को ऊपर कोड चलाने से दिखाते हैं।
इससे पहले
उपरांत




