Làm thế nào để bỏ được các giá trị 0 trong đồ thị

Liên hệ QC

PVT

Thành viên mới
Tham gia
11/12/07
Bài viết
38
Được thích
21
Thân gửi các bạn trong GPE,

Mình có 1 tình huống khi vẽ đồ thị, với dữ liệu của đthị được tính toán từ công thức. Trong cthức, các dữ liệu liên quan = 0 hoặc ô trống thì đồ thị tự hiểu là giá trị 0, điều này không mong muốn. Xin xem file ví dụ đính kèm.

Các bạn có cách nào để xử lý tình huống này không?

Xin cám ơn.
PVT
 

File đính kèm

  • Dthi du lieu ko lien tuc.xls
    16.5 KB · Đọc: 54
Bản thân cột ngày là 1 tiêu chí để vẽ đồ thị, và dữ liệu về sản lượng phải đầy đủ cho các ngày.
Nếu bạn xác định là ngày nghỉ không sản xuất thì không ghi các ngày đó trong bảng dữ liệu (Bạn có thể xóa các dòng đó)
 
Đúng như bạn nói, nhưng trường hợp này là 1 ví dụ nhỏ, với bảng biểu dữ liệu lớn (1000 hàng) thì để xử lý thủ công thì rất mất công. Còn cột "Ngày" mình cần phải giữ liên tục, và cột "Slượng" có khi phải gián đoạn như tình huống đã nêu ra.

Thân,
PVT
 
Yên tâm, mình cũng phải xử lý dữ liệu với vài ngàn dòng rồi.
Chỉ việc lọc các ngày thỏa mãn điều kiện (NonBlanks) ra vùng mới rồi vẽ đồ thị.
 
Ko biết quá trình lọc nhanh ko: thủ công hay dùng filter hay cách nào khác? File mà mình gửi trước là phần rút gọn cho dễ hiểu, thường tụi mình làm thì theo mẫu sẵn có, dữ liệu tính theo giờ x 24g/ngày x 365 ngày/năm = 8760 hàng.

Cám ơn bạn
PVT
 
Các cao thủ ơi, ra tay giúp mình với !
 
Sửa công thức C3 như sau:
=IF(B3<>"",B3*10,NA())
 
Cám ơn ptm0412 đã gợi ý cho mình đi 1 hướng khác, nhưng vấn đề vẫn chưa ổn khi đồ thị tạo thành 1 đường liên tục chứ ko để trống như mình nêu ban đầu.

Ý mình muốn đthị tự để trống để người đọc đthị biết ngay đây là vùng ko có dữ liệu.

Bạn xem thêm file đính kèm.
 

File đính kèm

  • theo ptm0412 dthi se nhu the nay.jpg
    theo ptm0412 dthi se nhu the nay.jpg
    74.8 KB · Đọc: 14
  • Dthi du lieu ko lien tuc_1.xls
    17 KB · Đọc: 48
Lần chỉnh sửa cuối:
Vấn đề này có thể giải quyết được bằng VBA.
Trước mắt tôi có thể thiết lập thuộc tính Border.LineStyle bằng xlLineStyleNone, khi đó sẽ dấu đi các đường không có dữ liệu.
Đang tiếp tục hoàn thiện, sẽ trở lại khi đã hoàn chỉnh.
Cũng hy vọng các anh chị ở GPE ra tay giúp!
-hvl-
 
Do không gửi file được, nên gửi code ra đây:

Sub chart1()
Dim sh As Worksheet
Dim ch As ChartObject
Dim c1 As Chart
Dim se As Series
Dim ar()
Dim cp As Long
On Error Resume Next
Set sh = ActiveSheet
Set ch = sh.ChartObjects(1)
Set c1 = ch.Chart
Set se = c1.SeriesCollection(1)
cp = se.Points.Count
ReDim ar(cp)

ar = se.Values
For i = 1 To cp
If ar(i) > 0 Then
Else
se.Points(i).Border.LineStyle = xlLineStyleNone
If i < cp Then se.Points(i + 1).Border.LineStyle = xlLineStyleNone
'''''''''''po.Border.LineStyle = xlContinuous
'''''''''''po.MarkerStyle = xlMarkerStyleAutomatic
End If
Next
End Sub

>>> Lưu ý: thay lại công thức tính ở sheet, như sau: IF(B3<>"",B3*10,"") (không dùng hàm NA() )

 
Sau khi làm như hướng dẫn, Run thì mình lại được kết quả như thế này đây (xem hình đính kèm). Hoangvuluan kiểm tra lại dùm.

Theo mình, để đơn giản bạn có thể viêt giúp mình đoạn mã: nếu "ô bên trái (Slượng) ko có giá trị", then "xoá ô dữ liệu bên TTiền" để đthị tự động ngắt quãng.

Mình rất kém về VBA, nhưng thấy anh chị em GPE làm VBA mạnh & đưa ra nhiều giải pháp đơn giản. Chắc mình phải tham gia khóa học VBA for Excel online, các cao thủ hướng dẫn nhé: Thả cho mình mấy đường link vào đây, bắt đầu từ căn bản trước đã.

Xin cám ơn.
 

File đính kèm

  • Dthi du lieu ko lien tuc - dung VBA.jpg
    Dthi du lieu ko lien tuc - dung VBA.jpg
    43.5 KB · Đọc: 30
Đồ thị không liên tục

Mình xin lỗi, vì muốn để lại dấu vết của dữ liệu trống nên vẫn cho các điểm nút hiện lên. Giờ thì sửa lại theo như thủ tục dưới đây :

Sub chart1()
Dim sh As Worksheet
Dim ch As ChartObject
Dim c1 As Chart
Dim se As Series
Dim ar()
Dim cp As Long
Dim noDat As Boolean
On Error Resume Next
Set sh = ActiveSheet
Set ch = sh.ChartObjects(1)
Set c1 = ch.Chart
Set se = c1.SeriesCollection(1)
cp = se.Points.Count
ReDim ar(cp)
ar = se.Values
noDat = False
For i = 1 To cp
If (ar(i) > 0) Then
se.Points(i).MarkerStyle = xlMarkerStyleAutomatic
If Not noDat Then se.Points(i).Border.LineStyle = xlContinuous
noDat = False
Else
noDat = True
se.Points(i).Border.LineStyle = xlLineStyleNone
If i < cp Then se.Points(i + 1).Border.LineStyle = xlLineStyleNone
se.Points(i).MarkerStyle = xlMarkerStyleNone
End If
Next
End Sub

>>> xóa dữ liệu bên tiền khi không có số lượng vẫn như công thức tính mà mình đề nghị lúc trước:

=IF(B3<>"",B3*10,"")


>>> Hôm nay đã gửi được file đính kèm, nhân đây cảm ơn các mod luôn!

-hvl-
 

File đính kèm

  • Dthi du lieu ko lien tuc_1.xls
    34.5 KB · Đọc: 52
Rất hay. Cám ơn bạn

Như vậy cần dùng thủ thuật VBA chứ trong Excel ko có sẵn tùy chọn cho mình.
 
Web KT
Back
Top Bottom