phamvandunghp84
Thành viên thường trực




- Tham gia
- 5/3/20
- Bài viết
- 241
- Được thích
- 12
Phải bạn muốn như này không?Mình cần vẽ nhiều biểu đồ biểu diễn giá trị từng cột Biến 1, Biến 2, Biến 3... với 2 cột cố định trục thời gian và cột hằng số ( trong file mình có biểu đồ mẫu ) . Đây là file đính kèm nhờ các bạn viết code giúp mình. Cảm ơn diễn đàn !
Excel với BI cũng như nhau, không cần dùng VBAPhải bạn muốn như này không?
View attachment 241758
View attachment 241759
View attachment 241760
VBA tôi không thạo, cần power Bi thì tôi gửi cho bạn
Cảm ơn bạn đã xem giúp mình. trong file đính kèm mình đã có biểu đồ mẫu rồi đó bạn. mình cẫn vẽ biểu đồ đơn giản thôi. cần định dạng biểu đồ như trong file mà màu sắc cũng đúng như biểu đồ mẫu đó bạn ạ.Phải bạn muốn như này không?
View attachment 241758
View attachment 241759
View attachment 241760
VBA tôi không thạo, cần power Bi thì tôi gửi cho bạn
Tớ chưa hiểu lắm. nếu không dùng VBA thì sẽ phải làm như nào để tạo ra nhiều biểu đồ theo lần lượt các cột dữ liệu được?Excel với BI cũng như nhau, không cần dùng VBA
View attachment 241763
Đó là bạn chưa biết đó thôi, Power bi xử lý biểu đồ rất mạnh mẽ! VBA sẽ không theo được nó đâu bạn! Hình mình gửi có Slicer chữ "Biến" ý, bạn bấm vào biến nào nó nhảy biểu đồ biến đó, bấm đồng thời nhiều biến thì nó vẽ gộp nhiều biến. Nó không phải thủ công như bạn nghĩ đâu!Cảm ơn bạn đã xem giúp mình. trong file đính kèm mình đã có biểu đồ mẫu rồi đó bạn. mình cẫn vẽ biểu đồ đơn giản thôi. cần định dạng biểu đồ như trong file mà màu sắc cũng đúng như biểu đồ mẫu đó bạn ạ.
Vấn đề ở đây là trong file đầy đủ số lượng cột cần vẽ rất nhiều lên cần dùng VBA để vẽ hàng loạt chứ vẽ thủ công thì lâu lắm. hi mình k biết code như nào để gán được dữ liệu vào biểu đồ
mình k biết power Bi rồi. vậy bạn gửi cho mình xin file bạn làm như nào mình nghiên cứuĐó là bạn chưa biết đó thôi, Power bi xử lý biểu đồ rất mạnh mẽ! VBA sẽ không theo được nó đâu bạn! Hình mình gửi có Slicer chữ "Biến" ý, bạn bấm vào biến nào nó nhảy biểu đồ biến đó, bấm đồng thời nhiều biến thì nó vẽ gộp nhiều biến. Nó không phải thủ công như bạn nghĩ đâu!
Mình gửi ở đính kèm nhé!mình k biết power Bi rồi. vậy bạn gửi cho mình xin file bạn làm như nào mình nghiên cứu
Nếu có thể mình vẫn muốn dùng VBA vì nó có thể làm hàng loạt tốt hơn làm thủ công bạn ạ, tại mình không phải người hiểu code bạn có thể xem sửa giúp mình đoạn code sau thành biểu đồ giống trong file excel mà mình gửi không bạn?Mình gửi ở đính kèm nhé!
Bạn có thể tạo một slicer vẽ biểu đồ trong excel( như bạn ở bài #3) đã nói ở trên thì cũng xử lý được vấn đề của bạn. Yêu cầu chỉ thế thì không cần VBA đâu, không nên lạm dụng VBA.
Có thể không dùng unpivot mà vẫn tạo report như vậy được không bạn, unpivot với dữ liệu nhiều và sẽ làm chậm reportMình gửi ở đính kèm nhé!
Bạn có thể tạo một slicer vẽ biểu đồ trong excel( như bạn ở bài #3) đã nói ở trên thì cũng xử lý được vấn đề của bạn. Yêu cầu chỉ thế thì không cần VBA đâu, không nên lạm dụng VBA.
Thích thì cho bạn code, làm theo file mẫu, chưa format chart, bạn tự tìm hiểu thêmTớ không hiểu unpivot. tớ muốn dùng VBA. bạn có thể sửa được đoạn code kia để tạo ra mẫu biểu đồ như mình mong muốn được không? Mình muốn nó lằm lần lượt trên cùng 1 sheet như nàyView attachment 241770View attachment 241770
View attachment 241770
Sub a()
Dim chrt As Chart, i As Long
For i = 1 To 5
Set chrt = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 100 + (i - 1) * 500, 50, 400, 300).Chart
With chrt
.SetSourceData Source:=Range("a1:b22")
.SeriesCollection(1).ChartType = xlLine
.SeriesCollection(1).AxisGroup = 1
With .SeriesCollection.NewSeries
.Values = Range("b2:b22").Offset(, i)
.Name = [c1].Offset(, i)
.ChartType = xlColumnClustered
.AxisGroup = 2
End With
End With
Next
End Sub
Thích thì cho bạn code, làm theo file mẫu, chưa format chart, bạn tự tìm hiểu thêm
Mã:Sub a() Dim chrt As Chart, i As Long For i = 1 To 5 Set chrt = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 100 + (i - 1) * 500, 50, 400, 300).Chart With chrt .SetSourceData Source:=Range("a1:b22") .SeriesCollection(1).ChartType = xlLine .SeriesCollection(1).AxisGroup = 1 With .SeriesCollection.NewSeries .Values = Range("b2:b22").Offset(, i) .Name = [c1].Offset(, i) .ChartType = xlColumnClustered .AxisGroup = 2 End With End With Next End Sub
Đổi source lại là được bạnMình định tách làm hai phần. mình sẽ copy biểu đồ mẫu ra hàng loạt biểu đồ sau đó sẽ đổi công thức giá trị cho biểu đồ. Bạn ơi cho mình hỏi giờ làm thế nào để thay đổi được chữ D này nhỉ ? ( khi i =2 thì "=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1)". Khi i =3 thì "=SERIES(Data!$E$1;Data!$A$2:$A$22;Data!$E$2:$E$22;1)"
Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer
Dim dulieu As String ?
For i = 2 To 5
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Formula = "=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1)"
End Sub
Cảm ơn bạn đã hướng dẫnĐổi source lại là được bạn
ActiveChart.SeriesCollection(2).Values = ActiveSheet.Range("b2:b22").Offset(, i)
ActiveChart.SeriesCollection(2).Name = [c1].Offset(, i)
Mình thấy rồi khi mình thay đổi tiêu đề ở cột D, thì bên biểu đồ tên lại không tự động thay đổi theo bạn ạ. trong mục thông tin của biểu đồ bị mất phần Name. Bạn sửa giúp mình công thức trong code VBA trên để khắc phục tình trạng này nhé. Cảm ơn bạn !Cảm ơn bạn đã hướng dẫn
Mình xin viết lại code cho ai cần thì tham khảo:
Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer
Dim dulieu As String
For i = 1 To 5
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Values = Sheets("Data").Range("b2:b22").Offset(, i)
ActiveChart.SeriesCollection(1).Name = Sheets("Data").[c1].Offset(, i)
Next i
End Sub
Bạn cho mình hỏi thêm là kết quả sau khi chạy VBA code trên thì chỗ công thức của biểu đồ nó ra như này
=SERIES(;Data!$A$2:$A$22;Data!$D$2:$D$22;1)
Còn đây là công thức cũ ( khi mình vẽ biểu đồ thủ công )
=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1)
Cho mình hỏi không biết hai công thức khác nhau vậy có làm cho biểu đồ bị sai gì không bạn ?
Đã có dòng code thay đổi Name rồi mà:Cảm ơn bạn đã hướng dẫn
Mình xin viết lại code cho ai cần thì tham khảo:
Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer
Dim dulieu As String
For i = 1 To 5
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Values = Sheets("Data").Range("b2:b22").Offset(, i)
ActiveChart.SeriesCollection(1).Name = Sheets("Data").[c1].Offset(, i)
Next i
End Sub
Bạn cho mình hỏi thêm là kết quả sau khi chạy VBA code trên thì chỗ công thức của biểu đồ nó ra như này
=SERIES(;Data!$A$2:$A$22;Data!$D$2:$D$22;1)
Còn đây là công thức cũ ( khi mình vẽ biểu đồ thủ công )
=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1)
Cho mình hỏi không biết hai công thức khác nhau vậy có làm cho biểu đồ bị sai gì không bạn ?
Bài đã được tự động gộp:
Mình thấy rồi khi mình thay đổi tiêu đề ở cột D, thì bên biểu đồ tên lại không tự động thay đổi theo bạn ạ. trong mục thông tin của biểu đồ bị mất phần Name. Bạn sửa giúp mình công thức trong code VBA trên để khắc phục tình trạng này nhé. Cảm ơn bạn !
View attachment 241777
mình vừa nhầm c1, b1.Đã có dòng code thay đổi Name rồi mà:
ActiveChart.SeriesCollection(1).Name = Sheets("Data").[c1].Offset(, i)
bạn sữa lại thành
ActiveChart.SeriesCollection(1).Name = Sheets("Data").[b1].Offset(, i) thử xem, không được bạn gửi file nên tôi xem thử
Khi thay đổi bạn phải chạy lại code nó mới update lại, thôi để tôi chỉnh trong formula luôn, để update tự động, bạn nhận lại file!mình vừa nhầm c1, b1.
ý mình muốn nói là nếu ở chỗ công thức nếu là vẽ biểu đồ thủ công bằng tay thì
Còn đây là công thức cũ ( khi mình vẽ biểu đồ thủ công )
=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1) khi đó sau khi vẽ xong biểu đồ nếu ta thay đổi tên tiêu đề ở cột D thì tên trên biểu đồ cũng thay đổi.
nhưng khi mình vẽ biểu đồ bằng Code VBA kia thì nó gán giá trị của D1 làm tên của biểu đồ luôn. Khi thay đổi tên D1 thì tên trên biểu đồ nó không tự động thay đổi theo: ActiveChart.SeriesCollection(1).Name = Sheets("Data").[b1].Offset(, i)
dòng công thức khi vẽ bằng VBA nó là như này: =SERIES(;Data!$A$2:$A$22;Data!$D$2:$D$22;1)
nó bị thiếu mất chỗ bôi đỏ so với khi vẽ thủ công bạn ạ
View attachment 241778
hi, nó đã hoạt động rồi, Cảm ơn bạn !Khi thay đổi bạn phải chạy lại code nó mới update lại, thôi để tôi chỉnh trong formula luôn, để update tự động, bạn nhận lại file!
Thích thì cho bạn code, làm theo file mẫu, chưa format chart, bạn tự tìm hiểu thêm
Mã:Sub a() Dim chrt As Chart, i As Long For i = 1 To 5 Set chrt = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 100 + (i - 1) * 500, 50, 400, 300).Chart With chrt .SetSourceData Source:=Range("a1:b22") .SeriesCollection(1).ChartType = xlLine .SeriesCollection(1).AxisGroup = 1 With .SeriesCollection.NewSeries .Values = Range("b2:b22").Offset(, i) .Name = [c1].Offset(, i) .ChartType = xlColumnClustered .AxisGroup = 2 End With End With Next End Sub