Graph

Từ Excel 2007 trở đi chúng ta có một đối tượng mới, đó là Graph Object. Cùng với đó chức năng của Graph cũng có sự biến đổi.
Trong chủ đề này, chúng ta sẽ cùng tìm hiểu các thao tác với Graph bằng VBA. Ngoài ra chúng ta sẽ cùng kiểm chứng các đoạn code có thể sử dụng được cho phiên bản Excel 2003 hay không.
Nội dung cơ bản
  1. Chèn Graph
  2. Xóa Graph
  3. Thiết định vị trí cho Graph
  4. Thiết định độ lớn cho Graph
  5. Lấy hoặc thay đổi tên của Graph
  6. Thay đổi kiểu Graph
  7. Series Object
  8. Thay đổi vùng data cho Graph
  9. Thay đổi tên hạng mục, tên series
  10. Thiết định title
  11. Thiết định hướng dẫn sử dụng ( Usage Guide )
  12. Đặt trục giá trị
  13. Series and elements
Biểu đồ dạng cột
  1. Tạo biểu đồ cột
  2. Thiết định màu cho Series
  3. Thiết định nhãn cho dữ liệu
Biểu đồ đường kẻ
  1. Tạo biểu đồ đường
  2. Thay đổi độ dày mỏng của đường
  3. Thiết định điểm đánh dấu
  4. Thiết định nhãn cho dữ liệu
Biểu đồ đường tròn
  1. Tạo biểu đồ đường tròn
  2. Chia tách đường tròn
  3. Thiết định nhãn cho dữ liệu
Về màu sắc
  1. ColorIndex
  2. Thuộc tính Color và hàm RGB
  3. Về màu sắc chủ đề
Các phần trên sẽ lần lượt được chúng tôi dịch. Trong quá trình dịch, khi topic chưa kết thúc, chúng tôi mong muốn các bạn không xen vào giữa topic này. Nếu có câu hỏi hay thắc mắc nào, các bạn nên tạo lập chủ đề riêng trong các Box hỏi đáp.
Nguồn tham khảo và dịch:
 
B

bvtvba

Guest
Nội dung cơ bản
1. Chèn Graph

Phương thức mới từ Excel 2007 trở đi:
Mã:
Sub Sample()
    ActiveSheet.Shapes.AddChart
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Khi tạo Graph ở Excel 2007, bạn chỉ cần một dòng code như ở trên là đủ.
Trước khi chạy code, bạn dùng chuột select vùng range A1 : D4 và sau đó chạy dòng code trên là đủ để tạo ra được đồ thị như trên. Hoặc bạn chỉ cần active cells A1 (select vào cells A1) thì chương trình cũng tự nhận biết được vùng dữ liệu và tạo được biểu đồ. Biểu đồ sau khi tạo xong, bạn sẽ thấy nó đang ở trạng thái được select.
Phương thức AddChart của shapes collection được thêm mới kể từ Excel 2007. Khi thực thi phương thức này, nó sẽ lấy vùng dữ liệu là vùng Range đang được select để tạo ra biểu đồ dạng tiêu chuẩn (thường là biểu đồ dạng thanh) như ở trên. Ở hình trên bạn thấy biểu đồ được đặt ở bên trái của sheet, thực tế là nó được đặt ở giữa sheet, tôi đã di chuyển về bên trái để hình minh họa được gọn và đẹp hơn.

Đối với Excel 2003 thì ta cần phải viết code đầy đủ như sau:
Mã:
Sub Samplefull()
    With Charts.Add
        .ChartType = xlColumnClustered
        .SetSourceData Source:=Sheets("Sheet1").Range("A1:D4")
        .Location Where:=xlLocationAsObject, Name:="Sheet1"
    End With
End Sub
Tất nhiên code này cũng sẽ hoạt động trên Excel 2007 trở đi, và bạn sẽ không cần select vùng range dữ liệu trước khi chạy code, bởi trong code trên, các thông tin đã được chỉ định rất rõ ràng. Biểu đồ sau khi tạo xong, ta không thấy nó ở trạng thái đang được select như trường hợp trên.

Excel 2003 sẽ tạo ra graph và đưa graph đó vào sheet.
Còn Excel 2007 sẽ tạo ra Graph Sheet (việc này diễn ra rất nhanh) và sau đó đưa vào sheet. Đây là điểm khác biệt.
Tôi nghĩ có lẽ chúng ta không cần bàn sâu hơn về Excel 2003, bởi vì thực tế hiện nay, hầu hết mọi người đều sử dụng Office 2007 trở đi. Nhưng hiểu về nó cũng là kiến thức bổ ích.

Nguồn tham khảo:
 
Nội dung cơ bản
2. Xóa Graph

Tại sao phải xóa Parent?

Ta hãy xem xét việc xóa đồ thị dưới đây.
Bạn cần đăng nhập để thấy hình ảnh

Mã:
Sub xoa1()
    ActiveSheet.ChartObjects("Chart 1").Delete
End Sub
Đoạn code trên đây là đủ để xóa đồ thị ra khỏi sheet. Giả sử như trên sheet có rất nhiều đồ thị, khi đó ta sẽ code như sau:
Mã:
Sub xoaAll()
    Dim i As Long
    With ActiveSheet
        For i = .ChartObjects.Count To 1 Step -1
            .ChartObjects(i).Delete
        Next i
    End With
End Sub
Đoạn code trên hoạt động tốt. Nhưng bây giờ ta hãy thử nếu dùng chức năng record macro thì việc xóa sẽ tạo thành code như thế nào?
Tôi thu được code như sau:
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Parent.Delete
End Sub
Nhìn vào code trên, có một câu hỏi đặt ra, đó là tại sao lại là xóa Parent?
Để xác nhận rút cuộc Parent này là gì, ta hãy chạy thử đoạn code dưới đây.
Mã:
Sub Macro_thvba()
    Dim msg As String
    ActiveSheet.ChartObjects("Chart 1").Activate
    msg = msg & "Selection:" & vbCrLf
    msg = msg & TypeName(Selection) & "(" & Selection.Name & ")" & vbCrLf & vbCrLf
    msg = msg & "Selection.Parent:" & vbCrLf
    msg = msg & TypeName(Selection.Parent) & "(" & Selection.Parent.Name & ")" & vbCrLf & vbCrLf
    msg = msg & "ActiveChart:" & vbCrLf
    msg = msg & TypeName(ActiveChart) & "(" & ActiveChart.Name & ")" & vbCrLf & vbCrLf
    msg = msg & "ActiveChart.Parent:" & vbCrLf
    msg = msg & TypeName(ActiveChart.Parent) & "(" & ActiveChart.Parent.Name & ")"
    MsgBox msg
    ActiveChart.Parent.Delete
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Đến đây ta đã hiểu, có vẻ như thứ được xóa không phải là Selection.Parent mà là ActiveChart.Parent .
Bạn cần đăng nhập để thấy hình ảnh

Thân của Graph là Chart Object. Đó là các đường series nối các điểm trong đồ thị, là các trục tọa độ của Graph, là màu nền của Graph. Khi chúng ta chỉnh sửa đồ thị, chúng ta thao tác với nó.
Chứa Chart Object là ChartObject Object. Nói một cách đơn giản, ChartObject Object chỉ đơn thuần là đường bao bên ngoài của đồ thị.
Tự bản thân ChartObect Object không có phương thức hay thuộc tính gì. Tuy nhiên nếu muốn thao tác với Chart Object thì ta phải chỉ định thông qua đối tượng quản lý nó, đó là ChartObject Object.
Một đối tượng nữa đó chính là ShapeRange Object. Khi chúng ta điều chỉnh màu các cột dữ liệu trong đồ thị, chúng ta sẽ chỉnh sửa thông qua đối tượng này.

Nào, hãy quay lại câu chuyện chính của chúng ta, việc xóa đồ thị bằng code dưới đây:
Mã:
Sub xoa1()
    ActiveSheet.ChartObjects("Chart 1").Delete
End Sub
Thực chất là chúng ta đã xóa đường bao của đồ thị. Và tất nhiên khi xóa đường bao thì mọi thứ bên trong đường bao cũng sẽ bị mất đi.
Vậy thì cái code mà chúng ta thu được thông qua Record macro nó có ý nghĩa gì đây?
Tôi phân tích thông qua comment vào code dưới đây:
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ChartObjects("Chart 1").Activate
    'O day, chung ta dang select vao doi tuong duong bao cua do thi=>ChartObject Object
    'ActiveChart(cua do thi dang duoc select) => Chart Object nam ben trong ChartObject Object
    
    ActiveChart.Parent.Delete
    'Me cua do thi dang duoc select = ChartObject Object
    'Tuc la chung ta xoa ChartObject Object
End Sub
Nếu như bỏ Parent đi, thì code trên có nghĩa là ta sẽ xóa Chart Object. Khi đó sẽ bị lỗi.
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Delete 'Error

End Sub
Vì đồ thị đang được select, tức là ChartObject Object đang được select cho nên ta có thể xóa bằng cách sau:
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ChartObjects("Chart 1").Activate
    Selection.Delete

End Sub
Code trên có thể xóa đồ thị, nhưng lưu ý rằng trong VBA, việc sử dụng Selection sẽ khiến tốc độ code trở nên chậm.
Câu chuyện ở trên là với Excel 2007 trở đi.

Bây giờ ta hãy xem với Excel 2003 thì cần phải làm thế nào để xóa đồ thị đây?
Hãy thử ghi macro xem sao:
Mã:
Sub Macro()
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartArea.Select
    ActiveWindow.Visible = False
    Selection.Delete
End Sub
Trước khi thực hiện xóa nó thực hiện 3 câu lệnh ở phía trên. Bây giờ ta sẽ phân tích các câu lệnh đó nghĩa là gì?
Mã:
Sub Macro()
    ActiveSheet.ChartObjects("Chart 1").Activate
        ''Selection => ChartArea(Chart 1)
        ''ActiveChart => Chart(Sheet1 Chart 1)
    
    ActiveChart.ChartArea.Select
        ''Selection => ChartArea(Chart 1)
        ''ActiveChart => Chart(Sheet1 Chart 1)
    
    ActiveWindow.Visible = False
        ''Selection => ChartObject(Chart1)
        ''ActiveChart => Chart(Sheet1 Chart 1)
    
    Selection.Delete
End Sub
Code trên hoạt động trên Excel 2003 nhưng sẽ không hoạt động trên Excel 2007. Câu chuyện bây giờ hoàn toàn khác với câu chuyện lúc trước rồi đấy.

Với Excel 2007 thì câu chuyện rất đơn giản:
Mã:
ActiveSheet.ChartObjects("Chart 1").Activate
Selection.Delete    ''Xoa OK
Với Excel 2003 thì sẽ xảy ra lỗi:
Mã:
ActiveSheet.ChartObjects("Chart 1").Activate
Selection.Delete    ''Error
Nguồn tham khảo:
 

Euler

Administrator
Thành viên BQT
3. Thiết định vị trí cho Graph
Thiết định vị trí cho Graph không khó, chúng ta sẽ ràng buộc nó vào một cells nào đó bằng cách sử dụng thuộc tính LeftTop.
Mã:
Sub vitri()
    With ActiveSheet.ChartObjects("Chart 1")
        .Top = Range("B6").Top
        .Left = Range("B6").Left
    End With
End Sub
Kết quả ta sẽ được:
Bạn cần đăng nhập để thấy hình ảnh
 

tuhocvba

Administrator
Thành viên BQT
Nội dung cơ bản
4. Thiết định độ lớn cho Graph

Để điều chỉnh độ lớn cho Graph ta sử dụng hai thuộc tính là Width , Height của ChartObject.
Mã:
Sub dieuchinhdolon()
    With Range("B7:E15")
        ActiveSheet.ChartObjects("Chart 1").Width = .Width
        ActiveSheet.ChartObjects("Chart 1").Height = .Height
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh


Nguồn tham khảo và dịch:
 
Nội dung cơ bản
5. Lấy hoặc thay đổi tên của Graph

Có hai tên:

Ta hãy xem code dưới đây:
Mã:
Sub Sample()
    With ActiveSheet.ChartObjects(1)
        .Name = "THVBA"
        MsgBox .Name & vbCrLf & _
               .Chart.Name
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh


Ta hãy xem lại mối liên hệ Graph với worksheet:
Bạn cần đăng nhập để thấy hình ảnh

Khi bạn muốn xóa đồ thị, bạn làm việc với ChartObject Object.
Khi bạn muốn chỉnh sửa biểu đồ, chẳng hạn như tiêu đề, nhãn dữ liệu,... bạ cần làm việc với Chart Object (Thân của Graph) trở đi.
Ví dụ ChartObject(1).Chart .
Tên của Chart thì lấy để đọc được nhưng không thay đổi được. Ví dụ code dưới đây sẽ lỗi:
Mã:
Sub Sample()
    With ActiveSheet.ChartObjects(1)
        .Name = "THVBA"
        
        .Chart.Name = "tuhocvba.net 'Error
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Nguồn tham khảo và dịch:
 
Nội dung cơ bản
6. Thay đổi kiểu Graph

Sử dụng thuộc tính ChartType để thay đổi kiểu Graph

Mã:
Sub Sample()
    ActiveSheet.ChartObjects(1).Chart.ChartType = xlLine
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Dưới đây là bảng thuộc tính ChartType, các bạn thay đổi code trên và tự kiểm nghiệm nhé.
Hằng sốGiá trịÝ nghĩa
xl3DArea
-4098​
Hiển thị mặt 3D
xl3DAreaStacked
78​
Hiển thị mặt diện tích 3D
xl3DAreaStacked100
79​
Hiển thị mặt diện tích 3D khối vuông chữ nhật
xl3DBarClustered
60​
Biểu đồ cột 3D
xl3DBarStacked
61​
Chia tỉ lệ diện tích cột 3D
xl3DBarStacked100
62​
Tỉ lệ diện tích cột 3D
xl3DColumn
-4100​
Biểu thị số liệu dưới dạng cột 3D
xl3DColumnClustered
54​
Biểu thị cột 3D
xl3DColumnStacked
55​
Biểu thị cột 3D
xl3DColumnStacked100
56​
Biểu thị cột 3D
xl3DLine
-4101​
Đường gấp khúc 3D
xl3DPie
-4102​
Chia diện tích mặt tròn 3D
xl3DPieExploded
70​
Tách rời từng phần của đường tròn 3D
xlArea
1​
Mặt
xlAreaStacked
76​
Chia diện tích mặt
xlAreaStacked100
77​
Chia diện tích mặt chữ nhật
xlBarClustered
57​
Biểu đồ cột nằm ngang
xlBarOfPie
71​
Vòng tròn với biểu đồ cột phụ
xlBarStacked
58​
Thanh ngang xếp chồng lên nhau
xlBarStacked100
59​
Thanh ngang xếp chồng 100%
xlBubble
15​
bong bóng
xlBubble3DEffect
87​
Bong bóng với hiệu ứng 3 chiều
xlColumnClustered
51​
Cột dọc
xlColumnStacked
52​
Thanh dọc xếp chồng lên nhau
xlColumnStacked100
53​
100% thanh dọc xếp chồng lên nhau
xlConeBarClustered
102​
Đặt thanh ngang hình nón
xlConeBarStacked
103​
Thanh ngang hình nón xếp chồng lên nhau
xlConeBarStacked100
104​
Thanh ngang hình nón xếp chồng 100%
xlConeCol
105​
Thanh dọc hình nón 3 chiều
xlConeColClustered
99​
Lắp ráp thanh dọc
xlConeColStacked
100​
Thanh dọc hình nón xếp chồng lên nhau
xlConeColStacked100
101​
Thanh dọc hình nón xếp chồng 100%
xlCylinderBarClustered
95​
Thanh trụ loại thanh ngang
xlCylinderBarStacked
96​
Thanh ngang hình trụ xếp chồng lên nhau
xlCylinderBarStacked100
97​
Thanh ngang hình trụ xếp chồng 100%
xlCylinderCol
98​
Thanh dọc hình trụ 3 chiều
xlCylinderColClustered
92​
Lắp ráp thanh dọc
xlCylinderColStacked
93​
Thanh dọc hình nón xếp chồng lên nhau
xlCylinderColStacked100
94​
Cột dọc xếp chồng 100%
xlDoughnut
-4120​
Bánh vòng
xlDoughnutExploded
80​
Bánh rán chẻ
xlLine
4​
Đường gấp khúc
xlLineMarkers
65​
Đường gấp khúc với điểm đánh dấu
xlLineMarkersStacked
66​
Đường gấp khúc xếp chồng với điểm đánh dấu
xlLineMarkersStacked100
67​
Đường gấp khúc xếp chồng với điểm đánh dấu 100%
xlLineStacked
63​
Đường gấp khúc
xlLineStacked100
64​
Đường gấp khúc 100%
xlPie
5​
Đường tròn
xlPieExploded
69​
Chia tỉ lệ mặt tròn
xlPieOfPie
68​
Chia tỉ lệ mặt tròn có bổ trợ
xlPyramidBarClustered
109​
Đặt ngang kim tự tháp
xlPyramidBarStacked
110​
Thanh ngang xếp chồng lên nhau
xlPyramidBarStacked100
111​
Thanh ngang kim tự tháp xếp chồng 100%
xlPyramidCol
112​
Thanh đứng 3 kim tự tháp
xlPyramidColClustered
106​
Thanh dọc kim tự tháp
xlPyramidColStacked
107​
Thanh dọc xếp chồng lên nhau
xlPyramidColStacked100
108​
Thanh ngang kim tự tháp xếp chồng 100%
xlRadar
-4151​
Radar
xlRadarFilled
82​
Radar rắn
xlRadarMarkers
81​
Radar có đánh dấu dữ liệu
xlStockHLC
88​
Chưa rõ
xlStockOHLC
89​
Chưa rõ
xlStockVHLC
90​
Chưa rõ
xlStockVOHLC
91​
Chưa rõ
xlSurface
83​
Bề mặt 3 chiều
xlSurfaceTopView
85​
Bề mặt (nhìn từ trên xuống)
xlSurfaceTopViewWireframe
86​
Bề mặt (khung nhìn từ trên xuống)
xlSurfaceWireframe
84​
Bề mặt 3 chiều (khung dây)
xlXYScatter
-4169​
Phân tán bằng điểm
xlXYScatterLines
74​
Đường phân tán nối điểm
xlXYScatterLinesNoMarkers
75​
Đường phân tán gấp khúc
xlXYScatterSmooth
72​
Đường phân tán trơn
xlXYScatterSmoothNoMarkers
73​
Phân tán biểu đồ với các đường trơn (không có đánh dấu dữ liệu)
Nguồn tham khảo và dịch:
 
Nội dung cơ bản
7. Thay đổi kiểu của Series cũng làm thay đổi kiểu của đồ thị

Serie là một đường trong đồ thị. Đồ thị là tập hợp rất nhiều đường Serie.
Cụ thể trong các ví dụ biểu đồ tới nay, đồ thị mà các bạn xem có 3 đường Serie, gồm các đường serie của dữ liệu tháng 1, tháng 2, tháng 3.
Bây giờ tôi chỉ định thay đổi kiểu Serie của đồ thị tháng 1, kiểu đồ thị của dữ liệu tháng 1 sẽ từ dạng cột chuyển thành dạng đường.
Thật vậy:
Mã:
Sub Sample()
    ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).ChartType = xlLine
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Nguồn tham khảo và dịch:
 
B

bvtvba

Guest
Nội dung cơ bản
8. Thay đổi nguồn dữ liệu cho đồ thị

Ta có đồ thị như dưới đây:
Bạn cần đăng nhập để thấy hình ảnh

Nguồn dữ liệu của đồ thị trên là A1 : D4 . Bây giờ ta thay đổi nguồn dữ liệu cho đồ thị thành A1 : C3 :
Mã:
Sub Sample619()
    ActiveSheet.ChartObjects(1).Chart.SetSourceData Range("A1:C3")
End Sub
Bạn cần đăng nhập để thấy hình ảnh


Nguồn tham khảo:
 
Nội dung cơ bản
9. Thay đổi tên hạng mục, tên series

Chúng ta đang có đồ thị như thế này:
Bạn cần đăng nhập để thấy hình ảnh

Các đường series (đường đồ thị) được đặt tên là : Tổ 1, Tổ 2, Tổ 3.
Các hạng mục là: Tháng 1, Tháng 2, Tháng 3.
Bây giờ tôi sẽ đổi tên này bằng code:
Mã:
Sub vidu620()
    With ActiveSheet.ChartObjects(1).Chart
        .SeriesCollection(1).XValues = "={""A"",""B"",""C""}" 'Ten hang muc
        'Thay doi ten Series
        .SeriesCollection(1).Name = "=""tuhocvba"""
        .SeriesCollection(2).Name = "=""Euler"""
        .SeriesCollection(3).Name = "=""vbano1"""
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Trong code trên có lẽ điều khiến các bạn khó hiểu là các dấu ngoặc kép được sử dụng khá nhiều. Các bạn tham khảo để hiểu rõ hơn về tác dụng ý nghĩa của dấu ngoặc kép trong code nhé.

Nguồn tham khảo và dịch:
 
Nội dung cơ bản
10. Thiết định title

Ta hãy xem đoạn code dưới đây:
Mã:
Sub Sample621()
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = True
        .ChartTitle.Text = "tieu de: tuhocvba.net"
        With .ChartTitle.Format.TextFrame2.TextRange.Font
            .Size = 10
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2
        End With
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Nếu title không hiển thị thì bạn cần thiết định thuộc tính HasTitleTrue. Vì vậy để chắc ăn, hãy luôn thiết định thuộc tính này.
Tiếp theo, để thiết định nội dung hiển thị cho tiêu đề (title), chúng ta sử dụng thuộc tính ChartTitle.Text .
Đối tượng ChartTitle có rất nhiều thuộc tính. Ở trên ta mới chỉ sử dụng thuộc tính Text. Ngoài ra bạn có thể thiết định Font:
Mã:
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 10
Để cho các bạn dễ hình dung, ta hãy xem sơ đồ sau:
Bạn cần đăng nhập để thấy hình ảnh

Nguồn tham khảo:
 

vbano1

SMod
Thành viên BQT
Nội dung cơ bản
11. Thiết định hướng dẫn sử dụng ( Usage Guide )

Sau đây ta sẽ thiết định hướng dẫn (lời chú giải, lời hướng dẫn) cho đồ thị.
Mã:
Sub Sample622()
     With ActiveSheet.ChartObjects(1).Chart
        If .HasLegend = False Then .HasLegend = True    ''Hien thi chu giai
        .Legend.Position = xlLegendPositionTop          ''Dat chu giai len vi tri tren cung
        .Legend.IncludeInLayout = False                 ''Chu giai chen len tren do thi
        With .Legend.Format.Fill
            .Visible = msoTrue                          ''To mau cho chu giai
            .ForeColor.RGB = RGB(255, 0, 0)             ''Mau sac
            .ForeColor.TintAndShade = 0.5               ''Thiet dinh do sang/toi
        End With
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Về thuộc tính vị trí Chart.Legend.Position , xin hãy xem bảng giá trị hằng số dưới đây:
Hằng sốGiá trịÝ nghĩa
xlLegendPositionBottom
-4107​
Dưới đồ thị
xlLegendPositionCorner
2​
Góc phía trên bên phải của đồ thị
xlLegendPositionCustom
-4161​
Vị trí tùy ý
xlLegendPositionLeft
-4131​
Bên trái đồ thị
xlLegendPositionRight
-4152​
Bên phải đồ thị
xlLegendPositionTop
-4160​
Phía trên đồ thị

Về thuộc tính IncludeInLayout , nó được đưa vào bắt đầu từ Excel 2007. Nếu thiết định True, chú giải sẽ nằm lên trên đồ thị. Nếu thiết định False, máy tính sẽ tự điều chỉnh chú giải phù hợp với đồ thị.

Để tô màu cho chú giải, đầu tiên bạn cần thiết định True cho Legend.Format.Fill.Visible . Sau đó bạn sẽ thiết định màu cho ForColor .
Nguồn tham khảo và dịch:
 

tuhocvba

Administrator
Thành viên BQT
Nội dung cơ bản
12. Thiết định trục giá trị

Ta hãy xem đồ thị gấp khúc dưới đây. Ở phần dưới của đồ thị trông nó khá là trống trải.
Bạn cần đăng nhập để thấy hình ảnh

Nếu thiết định bằng tay, ta sẽ điều chỉnh như sau:

Bạn cần đăng nhập để thấy hình ảnh

Kết quả là ta sẽ được đồ thị như sau:
Bạn cần đăng nhập để thấy hình ảnh

Thao tác bằng tay ở trên tương đương với việc điều chỉnh bằng code như sau:
Mã:
Sub Sample623()
    With ActiveSheet.ChartObjects(1).Chart
        .Axes(xlValue).MinimumScale = 150
    End With
End Sub
Ở đây chúng ta có hai thuộc tính, giá trị lớn nhất và nhỏ nhất của trục giá trị:
Giá trị nhỏ nhất: Thuộc tính MinimumScale
Giá trị lớn nhất:
Thuộc tính MaximumScale
Ngoài ra chúng ta có thể điều chỉnh tự động bằng thuộc tính:
MinimumScaleIsAuto : Thiết định là True, nó sẽ tự động lấy giá trị nhỏ nhất.
MaximumScaleIsAuto : Thiết định là True, nó sẽ tự động lấy giá trị lớn nhất.
Ví dụ:
Mã:
Sub Sample6232()
    With ActiveSheet.ChartObjects(1).Chart
        .Axes(xlValue).MinimumScaleIsAuto = True
    End With
End Sub
Nguồn tham khảo và dịch:
 

Euler

Administrator
Thành viên BQT
Nội dung cơ bản
13. Series and elements

Thật khó để diễn đạt bằng tiếng việt, vì vậy tôi để nguyên tiếng anh là Series và Elements.
Ta hãy nhìn vào đồ thị dưới.
Đường đồ thị tuhocvba gọi là Series. Tương tự như thế ta cũng có đường đồ thị Euler, đường đồ thị vbano1. Chúng đều là các Series.
Bạn cần đăng nhập để thấy hình ảnh

Trong đồ thị đó lại chia ra làm các điểm: Tháng 4, tháng 5, tháng 6. Điểm đồ thị tại mỗi tháng gọi là element.
Để các bạn dễ hình dung, tôi sẽ dùng biểu đồ gấp khúc để thuyết minh:
Bạn cần đăng nhập để thấy hình ảnh

(Còn nữa)
 

giaiphapvba

Administrator
Thành viên BQT
Nội dung cơ bản
13. Series and elements

(tiếp theo và hết)
Cùng suy nghĩ trên, bây giờ với đồ thị tròn, cũng tương tự như thế ta có:
Bạn cần đăng nhập để thấy hình ảnh


Từng phần cấu thành đường tròn được gọi là element.
Series được hiển thị ra là các Serie Object. Tập hợp các Serie Object là SeriesCollection. Khi cần làm việc với serie object ta sẽ chỉ định như sau:
  • SeriesCollection(1)
  • SeriesCollection(2)
Đối với biểu đồ cột, Series được hiển thị là các Point Object. Tập hợp các Point Object là PointsCollection. Khi cần làm việc với các point object ta sẽ chỉ định như sau:
  • Points(1)
  • Points(2)
Bạn cần đăng nhập để thấy hình ảnh

Khi cần làm việc với Points(2) ở trên, ta cần chỉ định chính xác như sau:
Bạn cần đăng nhập để thấy hình ảnh

Với biểu đồ hình tròn, cách suy nghĩ cũng tương tự:
Bạn cần đăng nhập để thấy hình ảnh

Nguồn:
 
Biểu đồ dạng cột
1. Tạo biểu đồ cột

Từ Excel 2007 trở đi, chúng ta đã biết code sau sẽ tạo ra biểu đồ cột nếu chúng ta đặt chuột vào vùng dữ liệu cần tạo biểu đồ:
Mã:
Sub Sample()
    ActiveSheet.Shapes.AddChart.Chart.ChartType = xlColumnClustered
End Sub
Như thế thì thật bất tiện, do đó ta có code đầy đủ như sau:
Mã:
Sub Sample_full()
    With ActiveSheet.Shapes.AddChart.Chart
        .ChartType = xlColumnClustered 'Chi dinh kieu'
        .SetSourceData Range("A1:D4")'Chi dinh vung du lieu'
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Nguồn tham khảo và dịch:
 
Biểu đồ dạng cột
2. Thiết định màu cho Series


Chúng ta đang có đồ thị mà các đường biểu diễn có màu như sau:
Bạn cần đăng nhập để thấy hình ảnh


Bây giờ tôi sẽ thay đổi màu của đường series(1) như sau:
Mã:
Sub Sample0507()
    ActiveSheet.ChartObjects(1).Chart. _
        SeriesCollection(1).Format.Fill. _
            ForeColor.ObjectThemeColor = msoThemeColorAccent6
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Về hằng số màu mà tôi sử dụng ở code trên, các bạn có thể thay đổi dựa theo bảng tham khảo dưới đây:
Bạn cần đăng nhập để thấy hình ảnh

Tôi giải thích về đoạn code sau:
Mã:
ActiveSheet.ChartObjects(1).Chart. _
        SeriesCollection(1).Format.Fill. _
            ForeColor.ObjectThemeColor
Đồ thị của chúng ta được coi là ChartObject. Phương thức SeriesCollection sẽ trả về Series Object.
Thuộc tính Format Property của Series Object sẽ trả về ChartFormat Object.
Thuộc tính Fill của ChartFormat Object sẽ trả về FillFormat Object.
Thuộc tính ForeColor Property của FillFormat Object sẽ trả về ColorFormat Object.
Thuộc tính ObjectThemeColor Property của ColorFormat Object là thuộc tính sẽ thiết định màu cho theme.



Bạn cần đăng nhập để thấy hình ảnh


Ở trên ta đã dùng thuộc tính ObjectThemeColor để thiết định màu, tôi nghĩ tiện nhất là các bạn sử dụng RGB.
Mã:
Sub Sample15()
    ActiveSheet.ChartObjects(1).Chart. _
        SeriesCollection(1).Format.Fill. _
            ForeColor.RGB = RGB(128, 54, 205)
End Sub
Nguồn tham khảo:
 
B

bvtvba

Guest
Biểu đồ dạng cột
3. Thiết định nhãn cho dữ liệu
Phương pháp 1: Sử dụng thuộc tính HasDataLabels

Mã:
Sub Sample()
    Dim i As Long
    With ActiveSheet.ChartObjects(1).Chart
        For i = 1 To .SeriesCollection.Count
            .SeriesCollection(i).HasDataLabels = True
        Next i
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Với code trên, ta xử lý từng đường Series.
Khi thiết định thuộc tính HasDataLabels là True, ta có thể cho hiển thị tên đường dữ liệu (SeriesName), tên trường dữ liệu (CategoryName), giá trị.
Thuộc tínhÝ nghĩa
ShowSeriesNameThiết định là True, sẽ hiển thị tên đường Series
ShowCategoryNameThiết định là True, sẽ hiển thị tên trường dữ liệu
ShowValueThiết định là True, sẽ hiển thị giá trị
Mã:
Sub Sample2()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowSeriesName = True
        .DataLabels.ShowCategoryName = True
        .DataLabels.ShowValue = True
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

(Còn nữa)
 

Euler

Administrator
Thành viên BQT
Biểu đồ dạng cột
3. Thiết định nhãn cho dữ liệu
Phương pháp 1: Sử dụng thuộc tính HasDataLabels

(tiếp theo)
Như vậy ta thấy các thông số đã được ghi ra và thể hiện trên đồ thị. Các thông số này mặc định được ngăn cách bởi dấu phẩy ",".
Bây giờ nếu như chúng ta muốn ngăn cách bởi khoảng trống thì làm thế nào?
Mã:
.DataLabels.Separator = " "
Với việc thêm dòng code trên vào chương trình, các thông số sẽ được viết cách nhau bởi khoảng trống.
Bạn cần đăng nhập để thấy hình ảnh


Ta cũng có thể thiết định vị trí cho Label. Hãy tham khảo bảng dưới đây:
Hằng sốGiá trịÝ nghĩa
xlLabelPositionCenter
-4108​
Chính giữa
xlLabelPositionInsideBase
4​
Ở phía dưới, bên trong
xlLabelPositionInsideEnd
3​
Ở phía trên, bên trong
xlLabelPositionOutsideEnd
2​
Ở phía trên, bên ngoai

Mã:
Sub Sample718()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(3)
        .HasDataLabels = True
        .DataLabels.ShowValue = True
        .DataLabels.Position = xlLabelPositionCenter
    End With
End Sub
(Còn nữa)
 

tuhocvba

Administrator
Thành viên BQT
Biểu đồ dạng cột
3. Thiết định nhãn cho dữ liệu
Phương pháp 2: Sử dụng phương thức SetElement

Từ Excel 2007 trở đi, chúng ta còn có thể sử dụng phương thức SetElement để thiết định Label cho đồ thị.
Mã:
Sub Sample()
    With ActiveSheet.ChartObjects(1).Chart
        .SetElement msoElementDataLabelOutSideEnd
    End With
End Sub
Về hằng số sử dụng trong phương thức này, các bạn tham khảo thêm .
 
Top