Làm thế nào để tìm được giá trị Min rồi đặt nó cho tỉ lệ trên biểu đồ ?

Liên hệ QC

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
Bạn ơi cho mình hỏi mình muốn đổi tọa độ theo giá trị nhỏ nhất, trong tình huống cột giá trị không có giá trị #NA thì code này hoạt động tốt. nhưng trong trường hợp chuỗi srs1, srs2 có chứa giá trị #NA ? Mình muốn bỏ qua giá trị #NA để lấy giá trị nhỏ nhất làm tỉ lệ biểu đồ nhưng code này nó luôn ra =0.

Sub doitoadoMin()
Dim i As Integer
Dim srs1 As Series
Dim srs2 As Series

On Error Resume Next
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i)
ActiveSheet.ChartObjects(i).Activate
Set srs1 = ActiveChart.SeriesCollection(1)
Set srs2 = ActiveChart.SeriesCollection(2)

Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs1.Values)
Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs2.Values)
End With

Set srs1 = Nothing
Set srs2 = Nothing
Next i
On Error Resume Next
End Sub
 
Bạn ơi cho mình hỏi mình muốn đổi tọa độ theo giá trị nhỏ nhất, trong tình huống cột giá trị không có giá trị #NA thì code này hoạt động tốt. nhưng trong trường hợp chuỗi srs1, srs2 có chứa giá trị #NA ? Mình muốn bỏ qua giá trị #NA để lấy giá trị nhỏ nhất làm tỉ lệ biểu đồ nhưng code này nó luôn ra =0.

Sub doitoadoMin()
Dim i As Integer
Dim srs1 As Series
Dim srs2 As Series

On Error Resume Next
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i)
ActiveSheet.ChartObjects(i).Activate
Set srs1 = ActiveChart.SeriesCollection(1)
Set srs2 = ActiveChart.SeriesCollection(2)

Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs1.Values)
Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs2.Values)
End With

Set srs1 = Nothing
Set srs2 = Nothing
Next i
On Error Resume Next
End Sub
Code lạ quá, lấy tính toán thì lấy luôn từ ngoài sheet dữ liệu đi
Application.WorksheetFunction.Subtotal(105, srs1.Values)

thay srs1.Value --- thành Value từ vùng chứa dữ liệu của serries đó
 
Code lạ quá, lấy tính toán thì lấy luôn từ ngoài sheet dữ liệu đi
Application.WorksheetFunction.Subtotal(105, srs1.Values)

thay srs1.Value --- thành Value từ vùng chứa dữ liệu của serries đó
tình huống của mình là có biểu đồ trước rồi. vậy giờ mình muốn đọc từ biểu đồ ra vùng dữ liệu đó thì code như nào bạn nhỉ ?
mình giải thích rõ hơn như này:

đây là công thức để gán vùng B1:B5 vào biểu đồ,
Charts("Chart1").SeriesCollection(1).XValues = _ Worksheets("Sheet1").Range("B1:B5")

bây mình chỉ có biểu đồ trước rồi và muốn đọc lại giá trị B1:B5 kia vào thì viết lại như nào? mình thử như này nhưng k được:

Set cht = ActiveChart
Dim vung As Range
vung = cht.SeriesCollection(1).XValues
Sheets("Sheet4").Range("T4").Value = vung
Msgbox("phạm vi " & vung)
end sub
 
Và bạn đã hỏi nhiều thì phải hiểu là: với các bài có code thì nên đính kèm file, hỏi kiểu code thế này thì mọi người chỉ võ đoán đại, chệch trúng sao biết
 
Và bạn đã hỏi nhiều thì phải hiểu là: với các bài có code thì nên đính kèm file, hỏi kiểu code thế này thì mọi người chỉ võ đoán đại, chệch trúng sao biết
cảm ơn bạn. mình hỏi suốt mấy hôm thảo nào không tìm được câu trả lời, để mình gửi file cho bạn giúp mình với
 
Và bạn đã hỏi nhiều thì phải hiểu là: với các bài có code thì nên đính kèm file, hỏi kiểu code thế này thì mọi người chỉ võ đoán đại, chệch trúng sao biết
Gửi bạn file, Biểu đồ ở Sheet 3 bạn nhé
 

File đính kèm

  • Đổi tọa độ theo Min.xlsx
    277.6 KB · Đọc: 3
File xlsx làm gì code mà sửa,
Rồi tại sao lại dùng subtotal?
mình đang dùng code này
Sub doitoadoMin()
Dim i As Integer
Dim srs1 As Series
Dim srs2 As Series

On Error Resume Next
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i)
ActiveSheet.ChartObjects(i).Activate
Set srs1 = ActiveChart.SeriesCollection(1)
Set srs2 = ActiveChart.SeriesCollection(2)

Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs1.Values)
Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs2.Values)
End With

Set srs1 = Nothing
Set srs2 = Nothing
Next i
On Error Resume Next
End Sub
Bài đã được tự động gộp:

mình đang dùng code này
Sub doitoadoMin()
Dim i As Integer
Dim srs1 As Series
Dim srs2 As Series

On Error Resume Next
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i)
ActiveSheet.ChartObjects(i).Activate
Set srs1 = ActiveChart.SeriesCollection(1)
Set srs2 = ActiveChart.SeriesCollection(2)

Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs1.Values)
Sheets("Sheet3").ChartObjects(i).Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Subtotal(105, srs2.Values)
End With

Set srs1 = Nothing
Set srs2 = Nothing
Next i
On Error Resume Next
End Sub
nhưng nó chưa giải quyết được vấn đề khi gặp những giá trị lỗi #NA ..vv
Bài đã được tự động gộp:

File xlsx làm gì code mà sửa,
Rồi tại sao lại dùng subtotal?
Mình muốn biểu đồ khi cập nhật dữ liệu vào thì nó tự động đặt tỉ lệ trục tọa độ trên biểu đồ theo giá trị nhỏ nhất
 
Không phải code gì đâu hãy làm như sau

- Ở vùng dữ liệu,
+ gõ vào 1 ô trống
=NA()
+ rồi copy ô đó dán giá trị (value) vào các vị trí #NA của vùng dữ liệu (N . A đúng là #N/A)

- Tại đồ thị hãy nháy đúp vào trục số chọn Minimize Unit là Auto

là xong
 
Không phải code gì đâu hãy làm như sau

- Ở vùng dữ liệu,
+ gõ vào 1 ô trống
=NA()
+ rồi copy ô đó dán giá trị (value) vào các vị trí #NA của vùng dữ liệu (N . A đúng là #N/A)

- Tại đồ thị hãy nháy đúp vào trục số chọn Minimize Unit là Auto

là xong
hic. có 2800 biểu đồ.. và thường xuyên cần phải cập nhật nữa. file mình gửi là mẫu thôi nên mình xóa bớt cho nhẹ chứ để nguyên nó tới 50M.
 
hic. có 2800 biểu đồ.. và thường xuyên cần phải cập nhật nữa. file mình gửi là mẫu thôi nên mình xóa bớt cho nhẹ chứ để nguyên nó tới 50M.
Thì cứ thay hết thế, #NA của bạn đang sai, làm đồ thị vẽ sai luôn (vẽ về 0), nên phải sửa #NA trước, #NA sửa tay hay code thì cứ làm thay thế là được thay thành #N/A
nếu sửa thế thì cái min kia chắc cũng tự được, lúc đó muốn chỉnh min thế nào thì tùy (Auto là 1 giải pháp tôi đề xuất, còn tùy )
 
Không phải code gì đâu hãy làm như sau

- Ở vùng dữ liệu,
+ gõ vào 1 ô trống
=NA()
+ rồi copy ô đó dán giá trị (value) vào các vị trí #NA của vùng dữ liệu (N . A đúng là #N/A)

- Tại đồ thị hãy nháy đúp vào trục số chọn Minimize Unit là Auto

là xong
nếu cần chuyển thành Auto thì 2 dòng code này là xong rồi bạn ạ

ActiveChart.Axes(xlValue, xlSecondary).MinimumScaleIsAuto = True
ActiveChart.Axes(xlValue).MinimumScaleIsAuto = True
 
nếu cần chuyển thành Auto thì 2 dòng code này là xong rồi bạn ạ

ActiveChart.Axes(xlValue, xlSecondary).MinimumScaleIsAuto = True
ActiveChart.Axes(xlValue).MinimumScaleIsAuto = True
vậy thì làm thế đi, bạn muốn sao nữa,
quan trọng là #NA cũ là không đúng với định dạng #N/A chuẩn, vậy thôi
 
Thì cứ thay hết thế, #NA của bạn đang sai, làm đồ thị vẽ sai luôn (vẽ về 0), nên phải sửa #NA trước, #NA sửa tay hay code thì cứ làm thay thế là được thay thành #N/A
nếu sửa thế thì cái min kia chắc cũng tự được, lúc đó muốn chỉnh min thế nào thì tùy (Auto là 1 giải pháp tôi đề xuất, còn tùy )
chết thật. cái #NA đó là mình nhập tay đó . vùng trên file k có dữ liệu nào bị lỗi #NA làm mình nhập tay vào để gửi cho bạn đó
 
Vậy là nhập sai còn kêu gì,
Nếu đúng chuẩn của nó, thì có chi phải thắc mắc
k bạn ơi, mình k thể dùng được hàm này Application.WorksheetFunction.Subtotal(105, srs2.Values) mình đã thử như này vẫn không được:
Application.WorksheetFunction.Subtotal(105,(IsError(srs1.Values)))
 
Min thì lúc mình cần lọc thời gian.. thì nó luôn lấy Min, mình muốn dùng Subtotal để nó tự động cập nhật tỉ lệ theo Min ( của vùng dữ liệu hiển thị )
Bài đã được tự động gộp:

Min thì lúc mình cần lọc thời gian.. thì nó luôn lấy Min, mình muốn dùng Subtotal để nó tự động cập nhật tỉ lệ theo Min ( của vùng dữ liệu hiển thị )
1584544863896.png
 
Min thì lúc mình cần lọc thời gian.. thì nó luôn lấy Min, mình muốn dùng Subtotal để nó tự động cập nhật tỉ lệ theo Min ( của vùng dữ liệu hiển thị )
Bài đã được tự động gộp:


View attachment 233584
Loằng ngoằng quá, hàm MIN() như thế này

Mã:
.Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Min(srs1.Values)
.Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Min(srs2.Values)
 
Loằng ngoằng quá, hàm MIN() như thế này

Mã:
.Chart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Min(srs1.Values)
.Chart.Axes(xlValue, xlSecondary).MinimumScale = Application.WorksheetFunction.Min(srs2.Values)
Cái này sẽ lấy Min toàn bộ cột dữ liệu? hay sẽ chỉ lấy Min những dữ liệu sau khi lọc theo thời gian bạn nhỉ?
 
Web KT
Back
Top Bottom