• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual Basic6.0を使ったプロファイル補正についてPart2)

Visual Basic6.0を使ったプロファイル補正についてPart2

このQ&Aのポイント
  • Visual Basic6.0を使用してプロファイル補正を行う方法について解説します。
  • プロファイル補正には、定数や配列を使用して値の処理を行います。
  • プロファイル補正の結果をテキストファイルに出力することも可能です。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.4

こんにちは。itohhといいます とりあえず、動くようになって良かったですね。 >このあとグラフ作成するので一列に表示されてほしい これって、縦一列ですよね? 横一列だと400個の数値を表示するのはムリがありますものね(^^; テキストボックス(Text1)のスクロールバーの表示は、 テキストボックス(Text1)のプロパティを変更します。 ScrollBars プロパティ:両方(縦だけでよいのでしたら「垂直」) MultiLine プロパティ:True これだけでOKです。 >MSDNに大量の情報が書かれているので思うように知りたいことを調べることができません。 >何か良い方法があるのでしょうか? ヘルプの使い方には、いろいろな方法があります。 1.ソースコードの調べたい単語にカーソルを持っていって、   左上にある[F1]キーを押下する。 2.プロパティウィンドウの調べたいプロパティにカーソルを持っていって、   左上にある[F1]キーを押下する。 3.VBのメニュー「ヘルプ」の中の「キーワード」または「検索」で調べたい単語を入力する。 ※これで、MSDNライブラリーの該当項目を表示してくれます。 この後、「使用例」をクリックすると、サンプルコードが表示されます。

seikoinst
質問者

お礼

MultiLineだったんですね(^。^)。Falseになっていました。だからスクロールバーが表示されなかったんですね。それとファンクションキーは結構役に立つんですね。どうも有難うございました。分かりやすい説明大変感謝いたします。 今回のプログラムでVBは面白いなーって実感しました。これからいろいろ勉強したいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 ファイルへの出力ですが、まずヒントだけ。 1.outputでファイルをオープンしましょう。 > Print CSng(z) 2.上記のPrint文では、どのファイルに出力したらよいかわかりません。   Inputのとき#1としたようにどのOpen文と関係するのかを明記しなければいけません。   (ファイル番号といいます) 3.出力がすべて終わったらClose文でファイルを閉じてください。 ※Input文のほうもCloseしましょう。 ※使用している変数は関数の最初にDim文で定義するようにしてください。 そして、必ずデータ型を指定するようにします。 そうすれば、CSng(z)などの変換が必要なくなるはずです。 まず、ヘルプを良く理解することです。ヘルプには、もっと細かいサンプルが載っていますよ。 あと、フォーム上に表示したいとのことですが、どのようにコードを書いたのでしょうか? できれば、そのコードを記載してください。 >スクロールバーの使い方もよく分かりません どういうときのスクロールバーでしょうか? > If (RecCnt > 401) Then 400までしかないので401ではなく400にしましょう。

seikoinst
質問者

補足

Private Sub Command1_Click() step = 0.25 ramda = 0.5 Open "C:\hosei1.txt" For Input As #1 Dim RecCnt As Integer Dim Data(1 To 400) RecCnt = 1 Do While Not EOF(1) If (RecCnt > 400) Then Exit Do End If Input #1, Data(RecCnt) RecCnt = RecCnt + 1 Loop Close #1 Open "C:\hosei2.txt" For Output As #2 surface = 1 l = 400 Do While surface < l g = 0 h = 0 i = surface Do While i < l h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2 g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda)))) i = i + 1 Loop Print #2, CSng(z) surface = surface + 1 Loop Close #2 End Sub このようなプログラムで補正計算を無事することができました(^o^)。 どうも有難うございました。 >フォーム上に表示したいとのことですが、どのようにコードを書いたのでしょうか? できれば、そのコードを記載してください 計算過程をテキストボックスに出したかったのでフォーム上にText1をつくり、      Text1.Text=Text1.Text & CSng(z) & vbCrLf というコード(これは私が持っているVBの参考書の例題にありました)を書いたのですが、実行後、Text1には横に続けて値が表示されて最初の値しか分からない(ドラッグして動かせば全ての値はみれますが)といったようになってしまいうまくいきませんでした(このあとグラフ作成するので一列に表示されてほしい)。   また、このText1にスクロールバーを付けて全ての値をスクロールにより見れるようにしたかった(計算の終了が分かると同時にコピーできる。)のですが、参考書にも説明が書かれておらず分かりませんでした。参考書の例題には、例題の実行結果の絵がフォーム上にスクロールバー付きのテキストボックスで表示されています(vbCrLfの説明もありません)。   どうすればテキストボックスにスクロールバー付きで表示できるのでしょうか? また、MSDNに大量の情報が書かれているので思うように知りたいことを調べることができません。何か良い方法があるのでしょうか? いろいろ教えて頂いて申し訳ないのですが、よろしくお願いします。

すると、全ての回答が全文表示されます。
  • nakashi
  • ベストアンサー率51% (21/41)
回答No.2

Textファイル一行に1データと仮定して Dim sBuf As String Dim hFile As Integer Dim dData() As Double Dim iNumbOfData As Integer Dim iCalcPtr As Integer hFile = FreeFile Open "c:\temp\hoge.txt" For Input As hFile Do  If EOF(hFile) <> False Then Exit Do  Line Input #hFile, sBuf  ReDim Preserve dData(iNumbOfData)  dData(iNumbOfData) = Val(sBuf)  iNumbOfData = iNumbOfData + 1 Loop For iCalcPtr = 0 To UBound(dData)  Debug.Print dData(iCalcPtr) Next iCalcPtr

すると、全ての回答が全文表示されます。
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 VBのヘルプ(MSDNライブラリー)は確認されました? とりあえず、こちらに回答します。 1.まずは、ファイルの読み込みについて > Data(399) = Input(400, #1) ファイルの入力のInput文では一気に全レコードを読み込めません。 レコード数分、繰り返し読み込みましょう。 (MSDNライブラリーのInputの説明にサンプルが載っていますよ) とりあえず、コードのサンプルを記載しますね。 Dim RecCnt As Integer RecCnt = 0 ' ファイルの終端までループを繰り返します。 Do While Not EOF(1) If(RecCnt > 399) Then ' 配列より大きくなったらループを抜ける ' (配列よりも多く設定しようとするとエラーになります) ' 必要ならエラー処理を書いてください Exit Do End If Input #1, Data(RecCnt) ' 配列n番目に読み込む RecCnt = RecCnt + 1 Loop 2.計算のループについて > Do While surface < l これって、以下のループのほうがシンプルではないでしょうか? For surface = 0 To l For i = surface To l ' 計算処理 Next i Next surface For文の使用方法の詳細はMSDNライブラリーで確認してください。 3.ファイルへの書き出し処理 読み込みと同じです、まず、ファイルをオープンしてからPrint文で出力します。 これも、MSDNライブラリーのPrintの説明にサンプルが載っていますよ! あえて、サンプルは書きません、ご自分で調べてみてください。

seikoinst
質問者

補足

どうも有難うございました。 無事走らせることはできたのですが、フォーム上にオブジェクトを作って、出力の値をテキストボックスに表示したいと思うのですが、うまく表示されません(スクロールバーの使い方もよく分かりません)。また、テキストファイルに出力する場合、ファイルをオープンしてからPrint文で出力する方法がうまくいきません(入力と同様にファイルを開いてそのファイルに書きこむとエラーがでる)。ヘルプを見てもテキストファイルにどうやって出力したらよいか分かりません。どうか出力方法を教えてください。 よろしくお願いします。 以下のプログラムでは出力がフォームに表示され値が重なり読み取ることができません。 Private Sub Command1_Click() step = 0.25 ramda = 0.5 Open "C:\hosei1.txt" For Input As #1 Dim RecCnt As Integer Dim Data(1 To 400) RecCnt = 1 Do While Not EOF(1) If (RecCnt > 401) Then Exit Do End If Input #1, Data(RecCnt) RecCnt = RecCnt + 1 Loop surface = 1 l = 400 Do While surface < l g = 0 h = 0 i = surface Do While i < l h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2 g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda)))) i = i + 1 Print CSng(z) Loop surface = surface + 1 Loop End Sub

すると、全ての回答が全文表示されます。

関連するQ&A