2016-08-25 20 views
4

Excelでグラフを描画することは可能ですか?どうやって? enter image description hereExcelの描画間隔チャート

+0

基礎となるデータがどのように見えるん何これらの長方形のカップルのために? –

+0

実際には、データは数字の間隔です。各インターバルの下限と上限は、Excelの隣のセルに配置されます – user1723583

+0

長方形の幅は何になりますか? –

答えて

1

これは楽しいものでした。 Excelで既存のボックス&ウィスカーチャートの機能を拡張する良い方法があるかどうかはわかりませんが、幸いなことに、すばやく汚い方法で、散布図を作成することができました。基本的には、間隔に沿って繰り返し、散布図に表示するのに十分なポイントを選択して、ボックスウィスカーと区別できないようにします。すべてのインターバルを異なるシリーズにするため、色分けなどの書式を設定して区別しやすくすることもできます。

ここに私のデータの一部(あなたは線の太さのようなものを変更するには根本的な散布図で使用されるマーカーを変更することができます)のための最終結果です:

Interval Chart Example

コードがでフォーマットされた表を探していますが、各シリーズの名前と各ディメンションの最小/最大の列を区切ります。ここで入力テーブルをフォーマットする方法は次のとおりです。

Interval Sheet

そして最後に、ここで私はそれを生成するために実行するマクロです:

' Build and display an "Interval Chart" 
Public Sub MakeIntervalChart() 
    Dim inRow As Long, outRow As Long, lastRow As Long, startRow As Long 
    Dim interX As Double, interY As Double, intervalAmt As Double 
    intervalAmt = 0.01 ' CHANGE ME 

    ' Source/Destination Worksheet Parameters (CHANGE ME) 
    Dim wsSource As Worksheet, wsDest As Worksheet 
    Set wsSource = Worksheets("Data") 
    Set wsDest = Worksheets.Add() 
    wsDest.Name = "IntervalChart" 

    ' Create output chart 
    Dim boxChart As Chart 
    Set boxChart = wsDest.Shapes.AddChart2(240, xlXYScatter).Chart 
    boxChart.HasLegend = True 

    outRow = 1 
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row 

    For inRow = 2 To lastRow 
     ' Retrieve current interval (CHANGE ME) 
     Dim seriesName As String 
     Dim minX As Double, maxX As Double, minY As Double, maxY As Double 
     seriesName = wsSource.Cells(inRow, 1) 
     minX = wsSource.Cells(inRow, 2) 
     maxX = wsSource.Cells(inRow, 3) 
     minY = wsSource.Cells(inRow, 4) 
     maxY = wsSource.Cells(inRow, 5) 

     startRow = outRow 

     'intervalAmt = (maxX - minX)/50.0 

     ' Top and Bottom of box 
     For interX = minX To maxX Step intervalAmt 
      wsDest.Cells(outRow, 1) = seriesName 
      wsDest.Cells(outRow, 2) = interX 
      wsDest.Cells(outRow, 3) = minY 
      outRow = outRow + 1 
      wsDest.Cells(outRow, 1) = seriesName 
      wsDest.Cells(outRow, 2) = interX 
      wsDest.Cells(outRow, 3) = maxY 
      outRow = outRow + 1 
     Next 

     'intervalAmt = (maxY - minY)/50.0 

     ' Left and Right of box 
     For interY = minY To maxY Step intervalAmt 
      wsDest.Cells(outRow, 1) = seriesName 
      wsDest.Cells(outRow, 2) = minX 
      wsDest.Cells(outRow, 3) = interY 
      outRow = outRow + 1 
      wsDest.Cells(outRow, 1) = seriesName 
      wsDest.Cells(outRow, 2) = maxX 
      wsDest.Cells(outRow, 3) = interY 
      outRow = outRow + 1 
     Next 

     ' Add new series (box) 
     With boxChart.SeriesCollection.newSeries() 
      .Name = seriesName 
      .XValues = wsDest.Range("B" & startRow & ":B" & outRow - 1) 
      .Values = wsDest.Range("C" & startRow & ":C" & outRow - 1) 
     End With 
    Next 
End Sub 

あなたは、入力/出力シート名のようなものを変更したいと思います入力テーブルの予想されるフォーマット(あなたが自分のフォーマットに縛られたくないと仮定して)。また、データの0.01パラメータを調整する必要があります。私はあなたのサンプルデータの種類と一緒に使用できるようになる、非常に小さな間隔でそれを残しました。この増分値を必要に応じて0.01以外の値に微調整するか、コメント行のコードintervalAmt = (maxX - minX)/50.0でコードを使用し、50.0の値を微調整します(これはボックスの各セグメントに描画するマーカーの数になります) 。これらの値を調整することに注意してください。直線を達成するために必要なマーカーよりも多くの時間を無駄にしてしまいます。

+0

ありがとう、これは私が探していたものです。 – user1723583

0

JavaScriptにはHighchartsやD3などの強力なライブラリがあり、このようなグラフを描くことができ、FunfunはExcelでJavaScriptをコード化することができます。ウェブサイト上Highchartsでこのソリューションを試してみてください、そして、それはあなたが望むものかどう教えてください:

https://www.funfun.io/1/edit/59f9d122ff5aa66c5ca8b9ee

あなたが解決策に満足したら、あなたは直接のおかげで、同じリンクであなたのExcelにそれを読み込むことができますthe Funfun Excel add-in。ここではスクリーンショットです:あなたが望むようもちろん

enter image description here

enter image description here

、Excelでデータとコードを編集することができます。

enter image description here

関連する問題