you could try
ActiveChart.SetSourceData Source:=Range("b5").CurrentRegion
Or resize the ranges once you determine the longest using the xlDown approach rather than xlUp.
dim lngMaxRow as long
Set a = Range("b5", ActiveSheet.Range("b5").End(xlDown))
Set b = Range("c5", ActiveSheet.Range("c5").End(xlDown))
Set c = Range("d5", ActiveSheet.Range("d5").End(xlDown))
lngMaxRow = Application.WorksheetFunction.Max(a.Rows.Count, b.Rows.Count, c.Rows.Count)
Union(a, b, c).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlCylinderColClustered
ActiveChart.SetSourceData Source:=Union(a.Resize(lngMaxRow, 1), b.Resize(lngMaxRow, 1), c.Resize(lngMaxRow, 1))
Bookmarks