Nos nossos Scorecards ou Dashboards às vezes talvez seja interessante que estéticamente mantenhamos um gráfico de linhas simples em cada uma das linhas de um determinado conjunto de dados de uma planilha qualquer.
Esse efeito fica bom quando poucas linhas são utilizadas, como se fosse um pequeno resumo. Mas certamente a sua criatividade o ajudará a ampliar a utilização deste recurso.
A seguir descreverei como criar um gráfico em uma célula
O gráfico é criado usando uma função chamada ChartInCell. Você terá que digitar uma função no MS Excel, como qualquer outra função MÉDIA, SUM, ou VLOOKUP.Esta função não é uma função padrão disponível no MS Excel, deve ser criado pelo usuário usando VBA.
'Creates a new function called Cell ChartFunction ChartInCell (Plots As Range, Color As Long) As StringConst cMargin = 2Dim rng As Range, arr() As Variant, i As Long, j As Long, k As LongDim dblMin As Double, dblMax As Double, shp As ShapeSet rng = Application.CallerShapeDelete rngFor i = 1 To Plots.CountIf j = 0 Thenj = iElseIf Plots(, j) > Plots(, i) Thenj = iEnd IfIf k = 0 Thenk = iElseIf Plots(, k) < Plots(, i) Thenk = iEnd IfNextdblMin = Plots(, j)dblMax = Plots(, k)With rng.Worksheet.ShapesFor i = 0 To Plots.Count - 2Set shp = .AddLine( _cMargin + rng.Left + (i * (rng.Width - (cMargin * 2)) / (Plots.Count - 1)), _cMargin + rng.Top + (dblMax - Plots(, i + 1)) * (rng.Height - (cMargin * 2)) / (dblMax - dblMin), _cMargin + rng.Left + ((i + 1) * (rng.Width - (cMargin * 2)) / (Plots.Count - 1)), _cMargin + rng.Top + (dblMax - Plots(, i + 2)) * (rng.Height - (cMargin * 2)) / (dblMax - dblMin))
On Error Resume Nextj = 0: j = UBound(arr) + 1On Error GoTo 0ReDim Preserve arr(j)arr(j) = shp.NameNextWith rng.Worksheet.Shapes.Range(arr).GroupIf Color > 0 Then .Line.ForeColor.RGB = Color Else .Line.ForeColor.SchemeColor = -ColorEnd WithEnd WithCellChart = ""End FunctionSub ShapeDelete(rngSelect As Range)
Dim rng As Range, shp As Shape, blnDelete As BooleanFor Each shp In rngSelect.Worksheet.ShapesblnDelete = FalseSet rng = Intersect(Range(shp.TopLeftCell, shp.BottomRightCell), rngSelect)If Not rng Is Nothing ThenIf rng.Address = Range(shp.TopLeftCell, shp.BottomRightCell).Address Then blnDelete = TrueEnd IfIf blnDelete Then shp.DeleteNextEnd Sub
Referências: Automateexcel.com
Tags: VBA, Excel, cell, chart, gráfico, célula, display, user defined, workbook