関数

タグの編集
投稿者 おさむ  (高校生) 投稿日時 2011/6/9 13:15:37
とある関数の存在についておききしたいのですが
テキストボックス内に入力してある、数値を合計する関数はありますか?

○○ = 関数名(Text1) みたいな感じにしたいのですが
投稿者 shu  (社会人) 投稿日時 2011/6/9 13:20:20
Text1.Textの内容はどんなパターンがあり、どういう結果を求めてますか?
投稿者 おさむ  (社会人) 投稿日時 2011/6/9 13:27:19
例えばですが、
テキストボックス内に
5
6
7
と入力してあり、その合計18を別の計算に使うために求めたいのです
投稿者 shu  (社会人) 投稿日時 2011/6/9 13:32:31
MultiLine=Trueで改行区切りで各行の値を
合計したいということでよろしいですか?

Dim Sum as Integer = 0

For Each linVal In TextBox1.Lines
        Dim Tmp As Integer = 0
        If Integer.TryParse(linVal, Tmp) Then
            Sum += Tmp
        End If
Next

これでSumに合計が計算されます。
投稿者 おさむ  (社会人) 投稿日時 2011/6/9 13:40:00
そうです!ありがとうございます。
早速試してみます。
投稿者 おさむ  (高校生) 投稿日時 2011/6/9 13:55:45
すいません
試してみたのですが、うまくいきませんでした。
Dim Sum as Integer = 0 ← 修正候補:ステートメントの最後と出ました。

For Each linVal In TextBox1.Lines
        Dim Tmp As Integer = 0 ← 修正候補:ステートメントの最後と出ました。

        If Integer.TryParse(linVal, Tmp) Then ←修正候補:式で、Integerにチェック
            Sum += Tmp ←修正候補:式で    =にチェック
    End If
Next

こんな感じです。
ちなみにいい忘れてましたが使っているのは6.0のやつなのです、関係ありますか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/6/9 14:01:42
> 投稿者 おさむ   (高校生) 
> 投稿者 おさむ   (社会人)
あれ? (๑・‿・๑)


> ○○ = 関数名(Text1) みたいな感じにしたいのですが 
TextBox1 ではなく Text1 と記述していることから、
実は  だったと仮定して別案。

Option Explicit

Private Sub Command1_Click()
    Dim result As Double
    result = Total(Text1)
    
    MsgBox result
End Sub

Public Function Total(ByVal txt As TextBox) As Double
    Dim value As Variant
    For Each value In Split(txt.Text, vbCrLf)
        Total = Total + Val(value)
    Next
End Function
投稿者 shu  (社会人) 投稿日時 2011/6/9 14:16:28
6.0でしたか^^;

もし高校生なら6.0よりVB.NETを使うことを薦めます。
知識としては6.0も多少あってもいいでしょうけど、
古いものをこれからの人がやってもどうかと思います。

コードは魔界の仮面弁士  さんが提示されていますね。
観察力がすごいですね。
投稿者 (削除されました)  () 投稿日時 2011/6/9 14:33:40
(削除されました)
投稿者 おさむ  (社会人) 投稿日時 2011/6/9 15:44:36
shuさん、魔界の仮面弁士さんありがとうございます。
うまくいきそうです。

> 投稿者 おさむ   (高校生) 
> 投稿者 おさむ   (社会人)
これは僕も読み返して気づきましたwうっかりミスです。

>もし高校生なら6.0よりVB.NETを使うことを薦めます。
そうですね
とりあえず家にあるのを使ってるって感じです。

投稿者 おさむ  (高校生) 投稿日時 2011/6/9 15:47:21
もうひとつ質問させてください。
今度は入力した行数を数える方法を知りたいです。

5
6
7

の場合は 3 見たいな感じです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/6/9 15:58:29
先のコードの、ループ回数を数えるコードを記述してやるだけで OK です。

あるいは、
Dim s() As String, count As Integer
s = Split(Text1.Text, vbCrLf)
count = UBound(s) - LBound(s) + 1
のようにする手もありますね。
ただし、この方法では
 「」                は 『0』行
 「5」               は 『1』行
 「5{改行}」         は 『2』行
 「5{改行}6」        は 『2』行
 「5{改行}6{改行}」  は 『3』行
とカウントされることになります。

もし、何も記述されていない空行や、数値以外が書き込まれた行では
行数のカウント方法を変更したいといった条件がつくような場合は、
ループ処理の回数をカウントする方式を採った方が便利でしょう。
投稿者 おさむ  (高校生) 投稿日時 2011/6/9 16:02:39
ありがとうございます

投稿者 おさむ  (高校生) 投稿日時 2011/6/9 16:33:02
すいません
ループ回数を数えるコードを教えてください
投稿者 shu  (社会人) 投稿日時 2011/6/9 16:57:46
>Dim result As Double
>    result = Total(Text1)

Dim result As Double
Dim cnt as Integer
    result = Total(Text1, cnt)




> Public Function Total(ByVal txt As TextBox) As Double
Public Function Total(ByVal txt As TextBox, ByRef Cnt As Integer) As Double


>    Dim value As Variant

この間に Cnt =0 を追加

>    For Each value In Split(txt.Text, vbCrLf)
>        Total = Total + Val(value)

この間に
If Value <> "" then
    Cnt = Cnt + 1
End If
などを追加

>    Next
>End Function

これでどうでしょう?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/6/9 22:24:35
>>もし高校生なら6.0よりVB.NETを使うことを薦めます。
>そうですね
「DreamSpark」 は御存知ですか?
学生(高校生以上)であれば、最新版の Visual Studio や Windows Server を無償で利用できますよ。
http://www.microsoft.com/japan/academic/dreamspark/default.mspx



> とりあえず家にあるのを使ってるって感じです。

念のために確認。御家族が所有されている VB6 開発環境を
貴方が使うのはライセンス違反ですが、その点は大丈夫でしょうか。

Office Home and Student Edition などのように、製品によっては
自宅居住者間での共有が認められている場合もあるのですが、
少なくとも Visual Basic 6.0 のライセンスは、そうなってはいません。


VB6 のライセンス:
・設計、開発、テスト目的に限られる。
・利用権があるのは、所有者1名のみ。(いわゆる開発者ライセンス)
・インストール可能な台数に制限は無い。何台にでもインストール可能。
・ライセンスの譲渡は可能。ただし対価を得てはならない。(オークション等は不可)
・委託による譲渡は不可。また、譲渡権があるのは最初のユーザーのみ。(再譲渡は不可)
・譲渡時には、CD-ROMやマニュアル等を含む構成物全てが譲渡されねばならない。
投稿者 おさむ  (高校生) 投稿日時 2011/6/10 12:42:58
ありがとうございました。
無事完成することが出来ました。

>貴方が使うのはライセンス違反ですが、その点は大丈夫でしょうか。
後で親に確認してみようと思います