そんなわけで・・
なかなか楽しそうだったので、ちょっとだけ考えてみました。
添付図と合わせてご覧ください。
ちなみに図は「ボタンにマクロを登録した例」です。
Sub SparkLine_Sample1()
Dim SLX As Long, SLY As Long
Dim TCW As Long, TCH As Long, TCL As Long, TCT As Long
Dim CCount As Long, VCount() As Variant, myCell As Range
Dim SLMax As Single, SLMin As Single
Dim i As Long
CCount = Selection.Cells.Count
With Selection.End(xlToRight).Offset(0, 1)
TCL = .Left: TCT = .Top: TCW = .Width: TCH = .Height
End With
SLMax = 10000 'WorksheetFunction.Max(.Value)
SLMin = 0 'WorksheetFunction.Min(.Value)
For Each myCell In Selection
ReDim Preserve VCount(i)
VCount(i) = (myCell.Value - SLMin) / SLMax
i = i + 1
Next
SLX = TCL: SLY = TCT + TCH - TCH * VCount(0)
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, SLX, SLY)
For i = LBound(VCount) + 1 To UBound(VCount)
SLX = TCL + TCW / (CCount - 1) * i
SLY = TCT + TCH - TCH * VCount(i)
.AddNodes msoSegmentLine, msoEditingAuto, SLX, SLY
Next
.ConvertToShape
End With
End Sub
連続したデータ入力範囲(1行×複数列)を選択した状態で走らせると
(図で言うと、B2:F2の範囲)
連続データが途切れるセル(図で言うとG2セル)の左下角を基準(0,0)にした
スパークライン(折れ線)風のフリーフォームを描きます。
注意事項として、
・セルに対する上下左右の余白は一切考慮していない
・1行ずつしか処理できない
・途中に空白セルがあると微妙におかしくなる
・最大値・最小値などの設定が手動
などが挙げられます(他にもあるかも)。
当方、手元に2007が無いので、2010及び2003での検証しかしておりません。
(一応、どちらでも動きました。)
大したモノでは参考までにどうぞ。
お礼
すごい! スパークライン風のグラフができました! すごいものです! ありがとうございました。