• 締切済み

Visual Basicで作成したプログラムをExcelに出力したいです

Visual Basic. NET 2003を使っています。 「N期間(年間)と利子率(%)を入力し、1年目からN年目までの元金の価値の倍率のリストを作成するプログラムを作成し、出力データをMS-Excelのカッマ区切り形式(ファイル名.csv)に保存すること」を、授業の課題として出されました。大学の授業って大変ですね。。。 貯金した元金の価値の倍率は以下の式で表されます。 N年後の価値の倍率=(1+利子率)二乗 N期間 自分でここまではやってみました。 Dim principal As Integer Dim period As Integer Dim interest As Double Dim value As Double 'Input principal = Val(TextBox1.Text) period = Val(TextBox2.Text) interest = Val(TextBox3.Text) / 100 'Calculation value = principal * ((1 + interest) ^ period) 'Insurt data Const filename As String = "value.csv" FileOpen(1, filename, OpenMode.Output) WriteLine(1, period, interest, value) FileClose(1) お昼からずっと格闘しています。。。そろそろお腹がすいてきました(笑)もう困り果ててしまったので、ここに質問させていただきます!! どなたか回答してくださればうれしいです♪ よろしくお願いします!!

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

for を使って繰り返し処理ができるようにします

yumikochan
質問者

お礼

結局、Do...Whileを使って処理しました。「繰り返し処理」という発想が浮かばなかったので、為になりました。ありがとうございました。

回答No.1

参考になるのかな?

参考URL:
http://www.bcap.co.jp/hanafusa/VBHLP/Excel11.htm

関連するQ&A

  • VB.NETで階乗を求めるプログラムを作成する

    再帰を使わず、For文による繰り返しにより、階乗を求めるプログラムを作成したいのです。 ↓ここからどうすれば良いか、ご教授お願い致します。 Dim n , i As Integer n = Textbox1.Text For i = 1 To n n = n * ( n - 1 ) Next Textbox2.Text = n

  • エクセルVBA 計算の繰り返し処理?

    エクセルのVBA フォーム内にて 下記、各テキストボックスの数値を変更することにより Label27にLabel28*TextBox12+TextBox13+TextBox14 Label33にLabel34*TextBox16+TextBox17+TextBox18 Label27、Label33に計算の答えを書き込みたいため 下記のように書き込みました。 Private Sub TextBox12_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox13_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox14_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox16_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox17_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox18_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub 計算は出来るのですが計算ラベル50程あるため、修正を考えて ももう少し簡素化して書き込みたいため 調べましたがヒント項目がずれているせいか回答を検索できませんでした。 どのようにすれば宜しいかご教示の程宜しくお願いいたします。

  • テキストボックスの数値を3桁ごとに区切りたい。

    テキストボックスの数値を3桁ごとに区切りたい。 エクセルのユーザーフォームにテキストボックスを1~7まで並べています。 テキストボックス1~6の合計を7に入れるようにしています。 テキストボックスに記入するVBAは以下のように投入しています。 合計は上手く表示されるのですが、3桁ごとに「,」の区切りを入れたいと思っています。 どのように記述したらよいのか、教えていただけないでしょうか。 -------------------------------------- Private Sub TextBox1_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox2_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox3_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox4_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox5_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox6_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub -------------------------------------- #次の文字を書くテキストボックスの情報に加えてみましたが、 合計が狂ってうまくいきませんでした。 TextBox1.Text = Format(TextBox1.Value, "#,##0") TextBox7.Text = Format(TextBox7.Value, "#,##0")

  • VBのプログラムの質問です。

    VBのプログラムの質問です。 100点満点のテストで10人分の点数を一次元配列で読み込み、各人の偏差値を含めて表示するプログラムを作りなさい。 知恵袋で一度同じような質問をしましたが、似たようなエラーが出てきてしまうために 今一度力をお貸しください、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Integer = CInt(TextBox3.Text)  ←ここ Dim p(n) As Integer 'データの取得と平均計算 Dim s As Double = 0 For i As Integer = 0 To n - 1 p(i) = CInt(TextBox1.Lines(i)) s = s + p(i) Next Dim m As Double = s / n '標準偏差の計算 Dim sx As Double = 0 For i As Integer = 0 To n - 1 sx = sx + (p(i) - m) ^ 2 Next Dim sd As Double = (sx / n) ^ (1 / 2) '偏差値の表示 For i As Integer = 0 To n - 1 Dim dv As Double = 50 + 10 * (p(i) - m) / sd TextBox2.Text = TextBox2.Text & Format(dv, "##.#0") & vbCrLf Next End Sub String "" から型 'Integer' への変換は無効です。 と Dim n As Integer = CInt(TextBox3.Text)からでてしまいます。 詳しい方よろしくお願いします

  • htmlソースをテキストボックスに表示させて20行目の10文字の数字を取得したい。

    恐れ入ります。 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/WebClient/ このページのコードを使わせてもらって htmlソースをテキストボックスに表示することはできました。表示させたテキストボックスの20行目の10文字の数字を取得したいのですが、どのようにすれば取得できるんでしょうか?val関数も1行目だけみたいですし・・・。ちなみに20行目は var strReqHomeID = "0000100012"; という具合になっていて  0000100012 を取得したいのです。 -------------------以下コード---------------- Imports System Imports System.Text Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim download As New Net.WebClient() Dim temp As Byte() = download.DownloadData(TextBox1.Text) Dim change As Text.Encoding = Encoding.Default TextBox2.Text = change.GetString(temp) Dim filename As String = System.IO.Path.GetFileName(TextBox1.Text) If filename = "" Then filename = "Temp.html" End If Dim strPath = My.Computer.FileSystem.SpecialDirectories.Desktop strPath = strPath + "\" + filename download.DownloadFile(TextBox1.Text, strPath) WebBrowser1.Navigate(TextBox1.Text) Catch ex As Exception Throw End Try End Sub

  • 『Microsoft Visual Basic 2010 Expres

    『Microsoft Visual Basic 2010 Express』という体験版をインストールして 独学でVisual Basic の勉強を始めてみましたが、DOSプロンプトへの 標準出力を変数・配列に代入する方法がわかりませんでしたので、お詳しい かたがいらっしゃいましたら、お願いいたします。 <作成しているffmpegを動作させるというプログラム> Dim Prog_path As String Dim Dir_mini As String Private Sub TextBox1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = "" 'ドロップされた内容を表示する Dim idx() As String = e.Data.GetData(DataFormats.FileDrop, False) Dim FileName_1 As String Dim FileName_2 As String Dim OutFile_mini As String For i = 0 To idx.Length - 1 TextBox1.Text = "" For j = i + 1 To idx.Length - 1 ' 順番待ちファイル表示の為、j = i + 1 から開始 FileName_1 = IO.Path.GetFileName(idx(j)) ' Pathを除いたファイル名の取得 TextBox1.Text = TextBox1.Text + (FileName_1 & vbNewLine) Next TextBox1.Refresh() ' 順番待ちファイル情報更新 FileName_2 = IO.Path.GetFileNameWithoutExtension(idx(i)) ' ファイル名の拡張子無し 'ffmpeg 実行 OutFile_mini = Dir_mini & "\" & FileName_2 & ".MP4" ' 出力Pathとファイル名 TextBox6.Text = OutFile_mini TextBox6.Refresh() ' 処理中ファイル情報更新 CreateObject("WScript.Shell").Run(Prog_path & "\cores\ffmpeg -y -maxfr 30 -i """ & idx(i) & """ -bitexact -vcodec h264 -coder 1 -bufsize 128 -g 250 -s 160x120 -b 10 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 """ & OutFile_mini & """", 0, True) ' 第2パラメータは0で非表示1で通常表示2で最小化3で最大化、第3パラメータはTrueで順次、Falseで前処理の終了待たず Next TextBox6.Text = "" TextBox6.Refresh() ' 全て処理後、TextBox6の内容をクリア End Sub 複数ファイルを処理する場合に単純に『Shell』を使ってしまいますと非同期で どんどん処理されてしまいますので『CreateObject("WScript.Shell").Run』と いうもので、処理の順番待ちをしてくれるようにしていますが、この中に書かれて います『Prog_path & "\cores\ffmpeg"』というプログラムは、DOS窓表示を させますと、処理の進捗状況を表示してくれます。 複数ファイルを処理するという前提で、ffmpegの実行は順番待ちをして、しかも 個々のffmpegの標準出力結果は非同期に参照をして、変数に代入をして処理する (若しくはTextBox7などを作成して表示させる)という方法にしたいのですけれど…

  • visual basicのプログラミングについて

    体重が標準体重の0.9倍以下の時は痩せすぎ、0.9倍を超えて、1.1倍以下の時は標準、1.1倍を超えた時は太りすぎと表示したいんですけど、できないんです。 Dim sintyo, taiju, hyojun As Integer sintyo = Val(TextBox1.Text) taiju = Val(TextBox2.Text) hyojun = (sintyo - 100) * 0.9 Label5.Text = hyojun Select Case taiju Case taiju <= hyojun * 0.9 Label6.Text = "やせ過ぎ" Case hyojun * 0.9 < taiju <= hyojun * 1.1 Label6.Text = "標準" Case hyojun * 1.1 < taiju Label6.Text = "太り過ぎ" End Select 自分でこう入力したんですけど、label6が変化しません。わかる人がいたら至急回答お願いします。

  • 1+(1+2)+(1+2+3)....+(1+2+...+N)の計算式をVBで・・

    表すにはどうしたらいいでしょうか。 もう3時間くらい格闘しているのですが、 答えを出せません。 Dim S AS LONG DIm N As Integer Dim i As Integer N = Val(TextBox1.Text) S = 0 i = 1 For i = 1 To N Step 1 S = S + i Next Label4.Text = Format(S, "#,##0") で、1+2+3+...+Nはいけるのですが、 上記の式は、Nが1づつ増えていくにしたがって、 Sの値が1 4 10 20 ...となっていくために、…。 どなたか、回答していただける方がおりましたら、 非常に助かります。 よろしくお願いいたします。。

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • VB.NETで素因数分解のプログラムを作成する

    2以上の整数が与えられたとき、それを素数の積に分解するプログラムを作成したいのです。 例えば、TextBox1に24と打ち込んで、Button1をクリックすると、TextBox2に2×2×2×3が表示されるといった具合です。 ↓ここからどうすれば良いか、ご教授お願い致します。 Private Sub IntegerButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, a As Integer n = TextBox1.Text Do back: If n Mod 2 = 0 Then n = n Mod 2 = 0 Else n = n Mod 3 = 0 End If GoTo back Loop Until n = n + 1 TextBox2.Text = n & "×" End Sub End Class

専門家に質問してみよう