[リストへもどる]
一括表示

投稿時間:2003/07/22(Tue) 22:20
投稿者名:Taka
Eメール:
URL :
タイトル:
恐縮ですが・・・
ユーザー定義型のDRMという配列にデータを格納して、そのデータを
グラフに表示させることについて先ほど質問させていただいたのですが、
このようなコードを書いたのですが、これではインデックスが有効範囲
にないと言われてしまうのですが、大変初歩的なことですがご教授下さい
ますようお願いします。自分で考えた結果これ以上先に進めないので
お願いします。DRM().North, DRM().Eastというものをx、yとして
グラフが描けないかと思っているんですが・・・どうしてもわからない
のでお願いします。
コードは以下のとおりです↓

Private Sub sChartViewSet()
    RecordNum = RecordNum - 3        ’データ数
    ReDim dat(RecordNum, RecordNum) As Long
    Dim series As Object
    Dim j   As Long
        
    With MSChart                        
         .chartType = VtChChartType2dXY 'グラフタイプを散布図に設定
         .Plot.UniformAxis = False      
    
    For j = 1 To RecordNum            ’MSChartに読み込み(出来ていない)
         .Data = dat(DRM(j).North, DRM(j).East)
    Next j
    
    End With
    For Each series In MSChart.Plot.SeriesCollection
        series.ShowLine = True
    Next
End Sub

投稿時間:2003/07/23(Wed) 04:31
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: 恐縮ですが・・・
インデックスが有効範囲にないと言っているので、まずインデックスの
有効範囲と実際のインデックスの値を調べて見てください。

>     RecordNum = RecordNum - 3        ’データ数
>     ReDim dat(RecordNum, RecordNum) As Long

例えば、RecordNumの値が10だったら、dat(0, 0)〜dat(10, 10)となります。

>          .Data = dat(DRM(j).North, DRM(j).East)

この時、DRM(j).NorthとDRM(j).Eastの値が0〜10の範囲になければ、
有効範囲にないのでエラーになります。
また、DRM(j).Northでエラーになるなら、DRM()のインデックスの有効範囲と
jの値を同様に調べて見てください。

あと、2次元配列datをReDimしてますが、値を入れてるコードがみあたらない
のですが、単に省略してるだけ?

投稿時間:2003/07/23(Wed) 05:41
投稿者名:Taka
Eメール:
URL :
タイトル:
ありがとうございました!
LESIA様

どうもありがとうございました。インデックスが有効範囲にないと
いうことの意味が少しわかった気がします。そのエラーは解決した
んですが今度は .Data = (y2 - y1) / (x2 - x1) の行でどうしても
オーバーフローになってしまいます。自分なりに過去の質問を見たりし
て改善したつもりですがエラーを修正できませんでした。
コードはこのような感じです。オーバーフローはデータ型を変更したり
する以外に何か改善策はありますか?

Private Sub sChartViewSet()
    ReDim DRM(RecordNum) As DRMData
    Dim i    As Integer
    Dim x1, x2, y1, y2 As Integer
    Dim z    As Integer
    
    With MSChart
         .Visible = False
            
         .ChartType = VtChChartType2dXY          'グラフタイプを散布図に設定
         .Plot.UniformAxis = False               'グラフを横長に
        
         For i = 1 To RecordNum - 3
            x1 = DRM(i).East
            x2 = DRM(i - 1).East
            y1 = DRM(i).North
            y2 = DRM(i - 1).North
            
           .Data = (y2 - y1) / (x2 - x1)
          
         Next i
         .Visible = True
    End With
    
    For Each Series In MSChart.Plot.SeriesCollection   'すべての系列についてマーカーを非表示し、線を表示します
        Series.SeriesMarker.Show = False
        Series.ShowLine = True
    Next
    intChartType = 1
    MSChart.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub

投稿時間:2003/07/23(Wed) 07:40
投稿者名:文句たらたら
Eメール:
URL :
タイトル:
Re: ありがとうございました!
> んですが今度は .Data = (y2 - y1) / (x2 - x1) の行でどうしても
> オーバーフローになってしまいます。自分なりに過去の質問を見たりし
> て改善したつもりですがエラーを修正できませんでした。
> コードはこのような感じです。オーバーフローはデータ型を変更したり
> する以外に何か改善策はありますか?

>     Dim x1, x2, y1, y2 As Integer
>            .Data = (y2 - y1) / (x2 - x1)

Integer を他のデータ型に変えてテストしたのですか?
聞く前に自分で試す...と皆さんが何回も言っていますが。
データ型はどんなのがありますか? ..とまた聞くのでしょうか?

投稿時間:2003/07/23(Wed) 08:11
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^2: ありがとうございました!
自分でデータ型は変更してみたのですがうまくいかなかったので質問させて頂きました。
自分なりにHPもしっかりみて何度もコードを改善したのですがこの結果になったので
・・・オーバーフローになる原因はデータ型などが原因だとはわかっていても出来なか
ったので掲示板に書きました。自分では悩んだ結果聞いています。皆さんのように知識
もないので少しでもヒントやアドバイスが頂けたらと思っていました・・・

投稿時間:2003/07/23(Wed) 08:59
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: ありがとうございました!
> 自分なりにHPもしっかりみて何度もコードを改善したのですがこの結果になったので

何度も改善しなければならないコードを載せていて申し訳ありません。
(でも、1桁の引き算位はちゃんとしていたつもりですが)

私が書いたコードを改善できるなら、ここで質問されても意味がない(する必要もない)のでは。


又、先の質問や、貴方の回答はどうなったのですか?配列がどうのこうのと書いておきながら
自分で理解できないなら、自分で理解できる範囲のコードでプログラムを組めばいいのでは

> サンプルに目を通したんですがX,Yを与えてグラフを描いているのが
> 見当たらなくて自分のデータに適応出来そうになかったので聞いて
> みました。

そのものズバリのサンプルじゃないですか?

> MSChatに描くのにX,Yと個別にデータを与えることは可能ですか?
> みんな配列に格納していたように思えたのですがあまりわからない
> ので皆さんから何か参考になるようなことをご教授頂けたらと思い
> 掲示板に書かせて頂きました。
そうしたらなぜ、解らない配列をより複雑にして使うのです。(どこかのパクリですか)


> もっと考える必要があると自分で感じてます。
> 時間がなくて焦ってしまって・・・
> もっと自分なりに考えてみて、質問するのは
> もっと煮詰まってからにします。

???????。


以前からの質問も皆これですか?
>今課題提出まで時間がなくてかなり

投稿時間:2003/07/24(Thu) 02:15
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^4: ありがとうございました!
理由のひとつに課題に追われていた部分もありましたが、
VBを少しずつ勉強していこうと考えていたので、質問
したのですが、自分なりにもっと勉強するべきだと感じ
ました。皆様から何度も自分で考えるように言われてき
ましたが、変な質問ばかりしてすいませんでした。
これから自分のペースで勉強していこうと思います。
色々とありがとうございました。

投稿時間:2003/07/23(Wed) 09:02
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: ありがとうございました!
> 自分でデータ型は変更してみたのですがうまくいかなかったので質問させて頂きました。

データ型は何に変更してみたのですか?
あと、x1, x2, y1, y2には何が入っていますか?
x1とx2、y1とy2が同じだと(y2 - y1) / (x2 - x1)は、0 / 0になるので
オーバーフローになります。

>     Dim x1, x2, y1, y2 As Integer

ちなみにこれだと、y2だけがInteger型で、x1, x2, y1はVariant型になります

Dim x1 As Integer, x2 As Integer, y1 As Integer, y2 As Integer

もしくは

Dim x1 As Integer
Dim x2 As Integer
Dim y1 As Integer
Dim y2 As Integer

としてください。

投稿時間:2003/07/24(Thu) 02:20
投稿者名:Taka
Eメール:
URL :
タイトル:
Re^4: ありがとうございました!
オーバーフローの原因は0 / 0になっていたようです。
データ型も変更したらなんとか動きました。
色々とありがとうございました。自分なりに勉強して
また頑張ろうと思います。