Nhờ giúp vẽ biểu đồ điều tiết lũ

Liên hệ QC

MicrosoftExcel

Thành viên chính thức
Tham gia
21/8/08
Bài viết
97
Được thích
30
Mình có 3 bảng dữ liệu như ở file gắn kèm theo dưới đây.
Mình muốn vẽ biểu đồ như hai hình ở dưới.

Hình số 1 theo bảng 1 (file kèm theo)

FZ.jpg

Hình số 2 theo bảng 2 (file kèm theo)
QdZ.jpg


Yêu cầu:

- Các hình vẽ đều có 3 trục tọa độ chung một đồ thị, khoảng chia giá trị hai trục tọa độ cùng hướng phải đều nhau. Đồ thị hình 1 giá trị gốc bắt đầu ngược lại từ vị trí max cho cột dữ liệu kia.
- Khi thay đổi dữ liệu thì hình vẽ và giá trị cũng thay đổi theo, khoảng chia cũng phải thay đổi đồng thời theo giá trị mới.
- Khi viết macro thì đặt ghi chú cho từng đường đồ thị đúng vị trí đường.

Rất mong được sự giúp đỡ của các bạn. Thanks!


-------------------------------
Lưu ý: bạn cần đặt tên tiêu đề rõ ràng nếu không bài của bạn sẽ bị dời vào khu vực vi phạm nội quy.
OverAC
 

File đính kèm

  • Dulieu.xls
    51 KB · Đọc: 130
Chỉnh sửa lần cuối bởi điều hành viên:
Xem thử đồ thị kèm theo. Cứ xem kỹ format của từng thành phần đồ thị: serie, X Axis, Y Axis, Secondary X Axis, Secondary Y Axis, nhất là tab Axes của serie và tab Scale của Axis.
 

File đính kèm

  • ChartXYPtm.zip
    19.8 KB · Đọc: 167
Xem thử đồ thị kèm theo. Cứ xem kỹ fortmat của từng thành phần đồ thị: serie, X Axis, Y Axis, Secondary X Axis, Secondary Y Axis, nhất là tab Axes của serie và tab Scale của Axis.

Mình đang xem xét nhưng vẫn chưa hiểu làm sao lại ngược chiều được, thật sự phần biểu đồ mình kém lắm. Bạn có thể hướng dẫn cụ thể nếu như vào phần biểu đồ thì vào đâu tiếp theo, chọn custom thế nào? Để mình xem lại tiếp rồi hỏi bạn sau vậy nhé, cảm ơn bạn rất nhiều. Biểu đồ thì mình có sẵn rồi, mình chụp hình lên để nhờ giải thích cách vẽ mà bạn. Nếu bạn có thời gian rỗi có thể giải thích bước làm cụ thể không? Mình chưa hiểu nên chưa viết code vẽ biểu đồ tự động cho nó được.

Thứ nhất mình muốn hiểu rõ cách vẽ biểu đồ.
Thứ hai sau đó mình sẽ viết code cho cách vẽ biểu đồ khi mình thay đổi dữ liệu cho công trình khác.

Nhờ bạn giải thích cụ thể hơn giúp mình với nhé. Thanks!

[/COLOR đã viết:
OverAC] Lưu ý: bạn cần đặt tên tiêu đề rõ ràng nếu không bài của bạn sẽ bị dời vào khu vực vi phạm nội quy.
OverAC.


Thành thật chưa hiểu mình sai tiêu đề ở chỗ nào? Xin bạn chỉ rõ hộ với, để rút kinh nghiệm.
 
Các biểu đồ sẽ tự thay đổi khi dữ liệu thay đổi, không cần code kiết gì đâu.
Tôi đã nói bạn cần xem kỹ format, chắc bạn cũng chưa xem, hoặc chưa biết cách mở lên xem.
Thế này nhé: Muốn xem format cái gì thỉ doubled-click cái đó, sẽ thấy hộp thoại format như sau:
I. Chart 1:
1. Secondary X Axis: Min là 0, Max là 250, Major unit là 50. Còn cái xoay ngược là Value in reverse order.

2ndAxisChart1.gif


2. Format trục Y: Min là 110, max là 280, Cross at là 110: Mục đích là để trục X cắt trục Y tại điểm Y = 110


YAxisChart1.gif


3. Format Serie F: mục chọn là secondary Axis


SerieFChart1.gif


II Chart 2:
1. Format X Axis: Max là 720, MajorUnit là 24 theo yêu cầu.


XAxisChart2.gif


2. Format Y Axis: Major unit là 5.000, nhưng Max là 49.000 không phải là bội số của 5.000 nên dòng trên cùng đồ thị nhỏ hơn các dòng chia khác. Theo phép chia 49.000/ 5.000 = 9,8 ta có 9 dòng nguyên và 0,8 dòng lẻ.

YAxisChart2.gif


3. Dùng kết quả tính toán 9,8 để làm cho trục Y thứ 2 cũng chia theo tỷ lệ này. Trong format Secondary Y Axis: Min là 210, cross at cũng 210 để trục X cắt trục Y tại điểm Y = 210. Major Unit là 1 vậy Max = 210 + (1 x 9,8) = 219,8


2ndYAxisChart2.gif


Nếu muốn serie Z nằm thấp xuống thì chọn lại Min 213, Max 222,8, Cross at 213

4. Format serie Z: chọn secondary Axis như chỉ dẫn ở trên.

Ghi chú: Không thể chỉ dẫn cặn kẽ hơn nữa, vì những chỉ dẫn trên là rất, rất cơ bản rồi.
 
Mình đã xem kỹ format rồi, mình cũng loay hoay mãi mới tìm ra được đúng như bạn nói. Cảm ơn bạn đã chỉ rất cặn kẽ, vẽ đồ thị này là một phần trong chương trình mà mình muốn viết code cho nó, để khi tính toán cho công trình khác với số liệu khác, thay đổi độ dài dữ liệu, trị số dữ liệu thì biểu đồ vẫn scan đúng tỉ lệ để in ra luôn mà không cần phải dùng chuột để kéo dãn hay co biểu đồ lại.

Mình đang viết code cho nó, nhưng không hiểu vì sao mỗi lần vẽ biểu đồ là cái biểu đồ nó cứ trình ình giữa màn hình, mà mình thì muốn đưa nó lên gần góc trên cùng bên trái để in. Vậy bạn có thể nói cho mình biết là khi vẽ đồ thị thì tọa độ của biểu đồ các góc mặc định là bao nhiêu, và nếu mình muốn in ra A4 thì nên scan biểu đồ thế nào cho vừa.

Một lần nữa cảm ơn bạn vì đã chỉ bảo tận tình!
 
Lần chỉnh sửa cuối:
Nếu cần làm cho 1 công trình khác mà không muốn thao tác nhiều:
1. copy nguyên sheet sang sheet khác hoặc file khác.
2. Thay đổi dữ liệu
3. Nếu dữ liệu mới nhiều dòng hoặc ít dòng hơn dữ liệu cũ, và không muốn sửa source data của biểu đồ, hãy đặt name động cho vùng dữ liệu, các serie, các X Value, Y value.
4. Nếu vẫn muốn dùng code điểu khiển vị trí biểu đồ, thì đây là thí dụ:

PHP:
Sub LocateChart()
' Định chiều rộng'
ActiveSheet.ChartObjects(1).Width = 350
' Định chiều cao'
ActiveSheet.ChartObjects(1).Height = 220
'Định vị trí cạnh trái bằng với cạnh trái cột B (cột 2)'
ActiveSheet.ChartObjects(1).Left = Cells(1, 2).Left
'Định vị trí cạnh trên bằng với cạnh trên dòng 5'
ActiveSheet.ChartObjects(1).Top = Cells(5, 1).Top
End Sub
 
Thành thật chưa hiểu mình sai tiêu đề ở chỗ nào? Xin bạn chỉ rõ hộ với, để rút kinh nghiệm.
Tiêu đề nguyên thủy do bạn đặt là "Nhờ giúp vẽ biểu đồ"
Bạn sai ở chỗ: Biểu đồ gì? Vì có đến hàng trăm loại biểu đồ khác nhau.
Cho nên tiêu đề này thuộc loại hỏi chung chung...

OverAC đã sửa lại cho bạn thành "Nhờ giúp vẽ biểu đồ điều tiết lũ"
Nó cụ thể hơn, rõ ràng hơn. Bạn hiểu chứ.

Cần phải đặt tiêu đề rõ ràng, để sau này, có thể là một năm sau, bạn nhớ rằng bạn có lần hỏi về chuyện vẽ biểu đồ điều tiết lũ trên diễn đàn này, và bạn quay lại tìm.
Nếu như chỉ dựa vào "Nhờ giúp vẽ biểu đồ" thì làm sao mà bạn tìm ra bài của bạn?

Quy định này của diễn đàn tuy có vẻ khắt khe một tí, nhưng cũng là để giúp các bạn, các thành viên, dễ dàng tìm một đề tài đã có trên diễn đàn mà thôi. Bạn rút kinh nghiệm nhé.

Thân.
 
Vẽ biểu đồ trong VBA

Mình có một đoạn code vẽ biểu đồ trong VBA cho mấy biểu đồ đã nói ở trên, nhưng không hiểu sao nó ko chạy được. Tôi post code lên mọi người xem dùm và chỉ ra lỗi code hộ với! Các mảng đều là mảng động và tác động trên workbook. Xin cảm ơn!

PHP:
Sub VedothiZFW()
'
' Vedothi ZFW Macro
' Macro recorded 8/29/2008 by Hoang Tuan Minh
'

'
'Ve do thi Z~F~W
Dim Z, F, W, Td, Qd, Qx As Range
Dim Tdt, Qdt, Qxdt, Wdt, Zdt As Range
Dim Fn As WorksheetFunction
Set Fn = Application.WorksheetFunction


    'Ve do thi
    Charts.Add
    
    'Chon kieu do thi Scatter
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    
    'Ve do thi F~Z
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=Dauvao!F"
    ActiveChart.SeriesCollection(1).Values = "=Dauvao!Z"
    ActiveChart.SeriesCollection(1).Name = "F"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="ChartZFW"
    With ActiveChart
        .HasAxis(xlCategory, xlPrimary) = True
        .HasAxis(xlValue, xlPrimary) = True
    End With
    ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
    
    'Ve do thi W~Z
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).XValues = "=Dauvao!W"
    ActiveChart.SeriesCollection(2).Values = "=Dauvao!Z"
    ActiveChart.SeriesCollection(2).Name = "W"
    
    ' Hien truc toa do cho chuoi du lieu thu 2 la W
    ActiveChart.SeriesCollection(2).Select
    ActiveChart.SeriesCollection(2).AxisGroup = 2
    ActiveChart.ChartArea.Select
    
    'Them truc toa do cho chuoi du lieu thu 2
    With ActiveChart
        .HasAxis(xlCategory, xlPrimary) = True
        .HasAxis(xlCategory, xlSecondary) = True
        .HasAxis(xlValue, xlPrimary) = True
        .HasAxis(xlValue, xlSecondary) = True
    End With
    ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
    ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlAutomatic
    ActiveChart.Axes(xlCategory, xlSecondary).Select
    'ActiveWindow.Visible = False
    
    ' Dao chieu cot du lieu cho truc thu 2
    With ActiveChart.Axes(xlCategory, xlSecondary)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = True
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
    ' Dinh dang khoang cach gia tri cot du lieu theo truc tung Z ~F
        ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    With ActiveChart.Axes(xlValue)
        .MinimumScale = Fn.Min(Z)
        .MaximumScale = Fn.Max(Z)
        .MinorUnitIsAuto = True
        .MajorUnit = 10
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
    ' Dinh dang khoang cach gia tri cot du lieu theo truc tung Z ~W
    ActiveChart.Axes(xlValue, xlSecondary).Select
    With ActiveChart.Axes(xlValue, xlSecondary)
        .MinimumScale = Fn.Min(Z)
        .MaximumScale = Fn.Max(Z)
        .MinorUnitIsAuto = True
        .MajorUnit = 10
        .Crosses = xlMaximum
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    'ActiveWindow.Visible = False
    
    ' Dinh dang lai co font chu cho tung truc toa do
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    Selection.TickLabels.AutoScaleFont = True
    With Selection.TickLabels.Font
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    ActiveChart.Axes(xlCategory).Select
    Selection.TickLabels.AutoScaleFont = True
    With Selection.TickLabels.Font
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    
    ' Doi lai font nen cho do thi thanh mau trang
    With Selection.Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
    
    ' Dinh vi vi tri bieu doi
    ' Dinh chieu rong'
    ActiveSheet.ChartObjects(1).Width = 350
    ' Dinh chieu cao'
    ActiveSheet.ChartObjects(1).Height = 220
    'Dinh vi tri canh trai bang voi canh trai cot B (cot 2)'
    ActiveSheet.ChartObjects(1).Left = Cells(1, 2).Left
    'Dinh vi tri canh tren bang voi canh tren dong 5'
    ActiveSheet.ChartObjects(1).Top = Cells(5, 1).Top
    
    
End Sub
 
Web KT
Back
Top Bottom