半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■タテ方向の折線グラフ

2008-12-01 22:30:00 | VBA Tips
...「横棒グラフ」と「折れ線でつないだ散布図」の複合グラフの事です。
最近、一般操作質問掲示板でレス入れたんですが、文章で説明するのはたいへんだと思って中途半端な書込みに終ってしまいました。
でも手順を整理してちゃんとやったらそんなに難しくなかったです......反省。

▼こんなシートから


▼こんなグラフを作る場合。


基本的には一般操作の範疇です。
例の如く手抜きのようだけど、ちょっと多めにコメント入れてるから少しは親切ぽく見えるかな :D

Option Explicit

Sub pre() 'サンプルシート作成
  Const s = ". あなたは何が好きですか?   "
  Const m = "コーヒー 紅茶 緑茶 烏龍茶 抹茶 " _
      & "日本酒 焼酎 ビール 発泡酒 ワイン"
  Dim i As Long
  Dim v
  Dim w(1 To 10, 1 To 3)

  Randomize
  For Each v In Split(m)
    i = i + 1
    w(i, 1) = i
    w(i, 2) = Left$("Q" & Format$(i, "00") _
              & Replace$(s, "何", v), 20)
    w(i, 3) = CLng(Int(40 * Rnd)) / 10 + 1
  Next
  With Sheets.Add
    .Range("A1:C1").Value = Array("№", "Q", "Average")
    .Range("A2:C11").Value = w
    .Range("C2:C11").NumberFormat = "0.0"
    .Columns("A:C").AutoFit
  End With
  Call try
End Sub
'-------------------------------------------------
Sub try()
  Const x As Long = 5 '評価点MAX値
  Dim y  As Long   '設問数
  Dim r  As Range

  With ActiveSheet
    Set r = .Range("A1").CurrentRegion
    Set r = Intersect(r, r.Offset(1))
    y = r.Rows.Count
    With .ChartObjects.Add(r.Width, 0, 600, 300).Chart
      '■B:C列を元データに、まず横棒グラフを作成。(※)
      .ChartType = xlBarClustered
      .HasLegend = False
      .ChartArea.AutoScaleFont = False
      With .SeriesCollection.NewSeries
        .XValues = r.Columns(2)
        .Values = r.Columns(3)
      End With
      '■[元のデータ]-[系列]タブで系列を追加した後、
      '追加した系列だけ選択して右クリック[グラフの種類]で
      '「折れ線でつないだ散布図」に変更する。
      'その後[元のデータ]-[系列]タブで
      'yの値をA列に、xの値をC列にする。
      With .SeriesCollection.NewSeries
        .ChartType = xlXYScatterLines
        'y値
        .Values = r.Columns(1)
        'x値
        .XValues = r.Columns(3)
        .Border.Color = vbBlue
        .MarkerBackgroundColor = vbBlue
        .MarkerForegroundColor = vbBlue
      End With
      '■散布図のy軸(第2数値軸)[軸の書式設定]で
      '最小値-0.5、最大値+0.5に設定し、軸を反転後クリアする。
      With .Axes(xlValue, xlSecondary)
        .MinimumScale = 0.5
        .MaximumScale = y + 0.5
        .ReversePlotOrder = True
        .Delete
      End With
      '■横棒グラフの項目軸[軸の書式設定]で軸を反転する。
      With .Axes(xlCategory)
        With .TickLabels
          .Font.Name = "MS ゴシック"
          .Font.Size = 9
          .Orientation = xlHorizontal
        End With
        .HasMajorGridlines = True
        .ReversePlotOrder = True
      End With
      '■散布図のx軸(第2軸)をクリアする。
      On Error Resume Next '2007用
      .Axes(xlCategory, xlSecondary).Delete
      On Error GoTo 0
      '■横棒グラフの数値軸の最小値最大値を設定する。
      With .Axes(xlValue)
        .MinimumScale = 1
        .MaximumScale = x
        .MinorUnit = 1
        .MajorGridlines.Border.LineStyle = xlDot
      End With
      '■横棒グラフ[データ系列の書式設定]-[パターン]で
      '輪郭と領域を「なし」にする。
      '※作成時点でやっても良い。
      With .SeriesCollection(1)
        .Border.LineStyle = xlNone
        .Interior.ColorIndex = xlNone
      End With
    End With
  End With

  Set r = Nothing
End Sub

他にも色々やり方があるみたいです。勉強になりました。
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする