2017-08-17 12 views
0

まず、すべての助けをありがとう、このサイトは祝福であり、あなたはすべて聖人です。今すぐダウンしてくださいVBA - 不正なグラフコード

私のテストデータセットに問題がありますが、他のグラフは正しく表示されていますが、このデータセットによってグラフが正しく表示されません。私は問題を見つけたと思うが、それを修正する方法がわからない。私のコードがグラフの範囲を作成するとき、数学的な誤差のために正しい範囲を取得していません。参考のために、DataLength = 102と、これはグラフとデータの一部がどのように見えるかです。 graphグラフは"CZ"にする必要がありますが、Dに行くのはfRemainder = 0なので、ここでは駄目なコードです。

Dim iAlpha As Integer, fAlpha As Integer 
    Dim iRemainder As Integer, fRemainder As Integer 
    Dim ConvertToLetter As String 
    Dim fConvertToLetter As String 

    iAlpha = Int((DataLength)/26) '26 for the letters 
    fAlpha = Int((DataLength + 2)/26) 'for the average and sd functions, since they start at C not A 
    iRemainder = DataLength - (iAlpha * 26) 
    fRemainder = DataLength + 2 - (fAlpha * 26) 
    If iAlpha > 0 Then 
     ConvertToLetter = Chr(iAlpha + 64) 
    End If 
    If iRemainder > 0 Then 
     ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) 
    End If 
    If fAlpha > 0 Then 
     fConvertToLetter = Chr(fAlpha + 64) 
    End If 
    If fRemainder > 0 Then 
     fConvertToLetter = fConvertToLetter & Chr(fRemainder + 64) 
    End If 

さらに、これは実際のグラフコードです。最初の行は"C13"からオフセットされていますが、セルはグループごとに変更されます。 "C13" "C49" "C85"など

ActiveCell.Offset(-7, -2).Select 
ActiveCell.Range("A1:" & fConvertToLetter & "4").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
ActiveCell.Activate 
Range(Selection, Selection.End(xlToRight)).Select 
ActiveSheet.Shapes.AddChart.Select 
With ActiveChart 
    .ChartType = xlLine 
    .Axes(xlCategory).Select 
    .HasTitle = True 
    .ChartTitle.Text = Range("B" & (12 * x - 5)).Value 
End With 
With ActiveChart.Parent 
    .Top = 153 * x + 12.75 * 2 ' reposition cells are 12.75 high and there are 36 cells between 
    .Left = 50 ' reposition 
End With 

答えて

2

チャートに使用する範囲を定義する方法はいくつかあります。次の例では、最初のチャートを作成する方法と新しいグラフをチャートに追加する方法の2通りを示します。マクロレコーダーが使用するselection.selectのようなステートメントを削除し、その代わりに範囲変数を定義するのが最善です。これらの範囲変数は、必要に応じて.offset関数を使用して微調整することができます。コードをステップ実行して、アニメーション化された.gifで表示して、動作の仕方を理解し、必要に応じてアプリケーションに合わせて調整します。私は少しここに途方に暮れていますので、あなたは、私のグラフのコードを編集して推薦する方法

enter image description here

Option Explicit 
Sub chartRange() 
Dim r As Range, chObj As ChartObject, ser As Series 
Set r = ActiveSheet.Range("A1:B5") 
Set chObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225) 
    With chObj 
    .chart.ChartType = xlXYScatterLines 
    .chart.SetSourceData Source:=r 
    End With 
    If MsgBox("Plot y2 also?", vbYesNo) Then 
     Set ser = chObj.chart.SeriesCollection.NewSeries 
     Set r = ActiveSheet.Range("A1:A5") 
     ser.XValues = r 
     ser.Values = r.Offset(0, 2) 
     ser.Name = "y2" 
    End If 
End Sub 
+0

。私が必要とする範囲は決して有限ではなく、使用ごとに変化します。私はそれが一連​​のデータセットで動作することを保証する必要があります。 –

+1

ここにその一例があります。 Set r = Range( "A1")。end(xlDown)は、長さが不明な連続データの列の範囲を定義する1つの方法です。あなたが範囲機能について学ぶために時間を取るなら、私はそれが今と長期的にあなたにかなり役立つと思う。 –

+1

修正:r = Range( "A1")を設定するend(xlDown)の範囲にある。連続する範囲をA1からその底部までを定義するには、Set r = Range( "A1")を1行のコードとして使用し、次の行に設定します。Set r = Range(r、r.end(xlDown)) –