掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
データの平均値の計算について (ID:88495)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すみません、質問文があまり長くならないようにと思ったのですが、 肝心な部分がなければ本末転倒ですよね。お手間をお掛けします。 <プログラム全体の構成> ファイルからカンマで区切られている3つのデータを取得し換算後、別ファイルに保存する。また、計算後の結果の移動平均を更に別ファイルに出力する。 ・フォーム ソースファイル指定するTextBox:Text1 計算後のデータを保存するファイル指定するTextBox:Text2 移動平均回数を指定するTextBox:Text3 実行ボタン:Command1 ・モジュール CalcGファンクション:ファイルから取得したデータごとに計算を実行し 結果をファンクションの戻り値として返す MvAveファンクション:CalcGファンクションの計算結果について移動平均 を求め戻り値を返す(このファンクションでエラーが発生する) 下記ちょっと長いですが、問題のコードです。 'フォームの処理 Private Sub Command1_Click() Dim strSName As String '読み込みファイル名 Dim strDName As String '出力ファイル名 Dim intSNo As Integer Dim intDNo As Integer Dim strTextLine As String 'データ Dim intMvAv As Integer '移動平均回数 'ファイル名取得 strSName = Trim(Text1.Text) '読み込み側 strDName = Trim(Text2.Text) '出力側 '移動平均回数取得 intMvAv = Val(Trim(Text3.Text)) '計算結果出力ファイルオープン intDNo = FreeFile Open strDName For Output As #intDNo '読み込みファイルオープン intSNo = FreeFile Open strSName For Input As #intSNo 'データ処理ループ Do While Not EOF(intSNo) Line Input #intSNo, strTextLine '計算処理 strTextLine = CalcG(strTextLine, strSName, intMvAv) Print #intDNo, strTextLine Loop Close #intSNo Close #intDNo End Sub 'モジュールの処理 ''数値計算部 Public Function CalcG(Data As String, strFname As String, intMvAv As Integer) As String 'ファイルから読み出したデータ、ファイル名、移動平均回数 Dim Dat1 As Double Dim Dat2 As Double Dim Dat3 As Double Dim dobDat1 As Double Dim dobDat2 As Double Dim dobDat3 As Double Dim strVal As String Dim strAveFName As String Dim i As Integer Dim intDzNo As Integer '出力ファイル名設定 strAveFName = strFname & "_MvAve" 'カンマで区切られているデータを取得 strVal = Right(Data) i = InStr(Data, ",") Dat1 = Val(Mid$(strVal, 1, i - 1)) strVal = Right(strVal, Len(strVal) - i) i = InStr(strVal, ",") Dat2 = Val(Mid$(strVal, 1, i - 1)) strVal = Right(strVal, Len(strVal) - i) i = InStr(strVal, ",") Dat3 = Val(Mid$(strVal, 1, i - 1)) '取得データの計算 Dat1 = (Dat1 - Dat3) / 330 Dat2 = (Dat2 - Dat3) / 330 '計算結果を出力 CalcG = Data & ", ," & Round(Dat1, 3) & "," & Round(Dat2, 3) & "," & Round(Dat3, 3) '計算結果の移動平均を求める dobDat1 = MvAve1(Dat1, intMvAv) dobDat2 = MvAve2(Dat2, intMvAv) dobDat3 = MvAve3(Dat3, intMvAv) intDzNo = FreeFile Open strAveFName For Append As #intDzNo Print #intDzNo, Round(dobDat1, 3) & "," & Round(dobDat2, 3) & "," & dobDat3 Close #intDzNo End Function ''移動平均算出部 Function MvAve1(ByVal Value As Double, ByVal intMvAv as integer) As Double Static Buff(0 To intMvAv) As Double <- エラーの箇所 Static i As Long Static Sum As Double Dim Ave As Double i = i Mod intMvAv + 1 Sum = Sum - Buff(i) + Value Ave = Sum / intMvAv Buff(i) = Value MvAve = Ave End Function '--MvAve2、MvAve3と同様のコードを書く
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.