Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1557 / 13645 ツリー ←次へ | 前へ→

【73532】テキストボックスの合計を桁区切りに さんたぱぱ 13/1/18(金) 22:30 質問[未読]
【73533】Re:テキストボックスの合計を桁区切りに ウッシ 13/1/18(金) 22:55 回答[未読]
【73536】Re:テキストボックスの合計を桁区切りに さんたぱぱ 13/1/19(土) 7:35 発言[未読]
【73534】Re:テキストボックスの合計を桁区切りに UO3 13/1/18(金) 23:00 発言[未読]
【73537】Re:テキストボックスの合計を桁区切りに さんたぱぱ 13/1/19(土) 7:43 発言[未読]
【73539】Re:テキストボックスの合計を桁区切りに ichinose 13/1/19(土) 8:29 発言[未読]
【73540】Re:テキストボックスの合計を桁区切りに UO3 13/1/19(土) 8:41 発言[未読]
【73541】Re:テキストボックスの合計を桁区切りに UO3 13/1/20(日) 8:05 発言[未読]
【73542】Re:テキストボックスの合計を桁区切りに さんたぱぱ 13/1/20(日) 8:16 発言[未読]
【73543】Re:テキストボックスの合計を桁区切りに UO3 13/1/20(日) 9:33 発言[未読]
【73553】Re:テキストボックスの合計を桁区切りに さんたぱぱ 13/1/20(日) 21:29 お礼[未読]
【73535】Re:テキストボックスの合計を桁区切りに kanabun 13/1/18(金) 23:52 発言[未読]
【73538】Re:テキストボックスの合計を桁区切りに さんたぱぱ 13/1/19(土) 7:45 発言[未読]

【73532】テキストボックスの合計を桁区切りに
質問  さんたぱぱ  - 13/1/18(金) 22:30 -

引用なし
パスワード
   ユーザーフォームにテキストボックスが並んでおり(txtBox4〜9、11、12、14、16〜19)、txtBox20に合計額を表示するようにしました。

各テキストボックスの書式を桁区切りにして、合計も桁区切りにしたいのですが、うまくいきません。

各テキストボックスに、

Private Sub txtBox4_Change()
  txtBox4 = Format(txtBox4, "###,###")
End Sub

Private Sub txtBox4_afterupdate()
 goukei
End Sub

のようにし、合計の計算と書式を

Private Sub goukei()
  
  On Error GoTo eh
  Dim Goukeigaku As Long
  
  On Error GoTo 0
  
  Goukeigaku = Val(txtBox4.Text) + Val(txtBox5.Text) + Val(txtBox6.Text) + Val(txtBox7.Text) + Val(txtBox8.Text) + Val(txtBox9.Text) + Val(txtBox11.Text) + Val(txtBox12.Text) + Val(txtBox14.Text) - Val(txtBox16.Text) - Val(txtBox17.Text) - Val(txtBox18.Text) + Val(txtBox19.Text)
  
  
  txtBox20.Text = Format(Goukeigaku, "###,###")
  
  
  Exit Sub
eh:  '処理なし

End Sub

このようにしました。
調べた結果、valを使うとカンマの前までしか加算されないことは分かったのですが、どうすればうまくいくのかが分かりません。

ご教授をお願い致します。

【73533】Re:テキストボックスの合計を桁区切りに
回答  ウッシ  - 13/1/18(金) 22:55 -

引用なし
パスワード
   こんばんは

Goukeigaku = CCur(txtBox4.Text) + CCur(txtBox5.Text)

とすると、どうですか?

【73534】Re:テキストボックスの合計を桁区切りに
発言  UO3  - 13/1/18(金) 23:00 -

引用なし
パスワード
   ▼さんたぱぱ さん:

こんばんは
以下はヒントになりますか?

Sub Test()
  Dim s1 As String
  Dim s2 As String
  Dim n As Long
  
  s1 = Format("123456", "###,###")
  s2 = Format("567890", "###,###")
  
  n = CLng(s1) + CLng(s2)
  MsgBox n
  
End Sub

【73535】Re:テキストボックスの合計を桁区切りに
発言  kanabun  - 13/1/18(金) 23:52 -

引用なし
パスワード
   ▼さんたぱぱ さん:こんにちは〜

>  Goukeigaku = Val(txtBox4.Text) + Val(txtBox5.Text) + Val(txtBox6.Text) + Val(txtBox7.Text) + Val(txtBox8.Text) + Val(txtBox9.Text) + Val(txtBox11.Text) + Val(txtBox12.Text) + Val(txtBox14.Text) - Val(txtBox16.Text) - Val(txtBox17.Text) - Val(txtBox18.Text) + Val(txtBox19.Text)
>  
>  
>  txtBox20.Text = Format(Goukeigaku, "###,###")


ダミーシート(作業用シート)のセルと各TextBoxとをリンクしておく方法です。

ダミーシートがこのBookの左から3番目のシートだとしますと、

Private Sub UserForm_Initialize()
 Dim idx
 
  With Worksheets(3)
    .Cells(20, 1).Formula = _
       "=A4+A5+A6+A7+A8+A9+A11+A12+A14-A16-A17-A18+A19"
    For Each idx In Array( _
         4, 5, 6, 7, 8, 9, 11, 12, 14, 16, 17, 18, 19)
      Me("TextBox" & idx).ControlSource = _
        .Cells(idx, 1).Address(External:=True)
    Next
  End With
End Sub
Private Sub TextBox4_Change()
  Call FormatText(4)
End Sub

  :
  :

Private Sub TextBox18_Change()
  Call FormatText(18)
End Sub
Private Sub TextBox19_Change()
  Call FormatText(19)
End Sub

Private Sub FormatText(i As Long)
  With Me("TextBox" & i)
    .Text = Format$(.Text, "###,###")
  End With
  TextBox20.Text = Format$(Worksheets(3).Cells(20, 1).Value, "###,###")
End Sub

【73536】Re:テキストボックスの合計を桁区切りに
発言  さんたぱぱ  - 13/1/19(土) 7:35 -

引用なし
パスワード
   ▼ウッシ さん:

ありがとうございます。

やってみましたが、型が一致しませんとエラーになりました。

【73537】Re:テキストボックスの合計を桁区切りに
発言  さんたぱぱ  - 13/1/19(土) 7:43 -

引用なし
パスワード
   ▼UO3 さん:

いつもありがとうございます。

桁区切りのフォーマットは文字列型になりますか?
その文字列型をCLngでロング型に変換すれば計算できるという
ことでしょうか…

すんなりとはいかなかったので、また夜に考えてみます。


>Sub Test()
>  Dim s1 As String
>  Dim s2 As String
>  Dim n As Long
>  
>  s1 = Format("123456", "###,###")
>  s2 = Format("567890", "###,###")
>  
>  n = CLng(s1) + CLng(s2)
>  MsgBox n
>  
>End Sub

【73538】Re:テキストボックスの合計を桁区切りに
発言  さんたぱぱ  - 13/1/19(土) 7:45 -

引用なし
パスワード
   ▼kanabun さん:

ありがとうございます。

今は時間がなくて解読できていませんが、ワークシート上で計算させて
テキストボックスに表示させるイメージでしょうか?

あとで挑戦してみます。

取り急ぎお礼まで。

【73539】Re:テキストボックスの合計を桁区切りに
発言  ichinose  - 13/1/19(土) 8:29 -

引用なし
パスワード
   おはようございます。


>桁区切りのフォーマットは文字列型になりますか?
>その文字列型をCLngでロング型に変換すれば計算できるという
>ことでしょうか…
>
>すんなりとはいかなかったので、また夜に考えてみます。

Sub aaa()
  Dim a As String, b As String
  a = "1,234": b = "2,345"
  MsgBox CLng(a) + CLng(b)
End Sub


Clng関数やCcur関数は、上記は、計算してくれますが、

 msgbox clng("")   

これが、型が一致しない というエラーになるので
テキストボックスは、初期設定が未入力ですから、エラーになります。
""のときや数字と認識できない文字("a","b"等)のチェックは必要です
isnumeric関数辺りを調べてみては?

【73540】Re:テキストボックスの合計を桁区切りに
発言  UO3  - 13/1/19(土) 8:41 -

引用なし
パスワード
   ▼さんたぱぱ さん:

おはようございます
ichinoseさんからもコメント有りますが、私のヒントコードの処理前には
(その編集がカンマ区切りであろうと無かろうと)テキストボックスに入っているものが
数値として妥当かどうかのチェックを行うというのは、ユーザーフォーム処理の
鉄則ですよ。

【73541】Re:テキストボックスの合計を桁区切りに
発言  UO3  - 13/1/20(日) 8:05 -

引用なし
パスワード
   ▼さんたぱぱ さん:

一応処理コード案をアップしておきますね。
なお、めったやたらと エラートラップを行うのはやめましょうね。

Private Sub goukei()
  Dim idx As Variant
  Dim Goukeigaku As Long
  Dim n As Long
  Dim d As Variant
  
  For Each idx In Array(4, 5, 6, 7, 8, 9, 11, 12, 14, 16, 17, 18, 19)
    n = 0
    d = Me.Controls("TxtBox" & idx).Value
    If IsNumeric(d) Then n = d
    Goukeigaku = Goukeigaku + n
  Next
  
  txtBox20.Value = Format(Goukeigaku, "###,###")

      
End Sub

【73542】Re:テキストボックスの合計を桁区切りに
発言  さんたぱぱ  - 13/1/20(日) 8:16 -

引用なし
パスワード
   ▼UO3 さん:

ありがとうございます!

あれこれ考えてテキストボックスに初期値として0を設定してみたのですが、
合計がオーバーフローしてしまい、また考えなおしているところでした。

出かける時間なのでまた夜に勉強させて頂きます。

いつもありがとうございます。

【73543】Re:テキストボックスの合計を桁区切りに
発言  UO3  - 13/1/20(日) 9:33 -

引用なし
パスワード
   ▼さんたぱぱ さん:

数字の桁数によってオーバーフローはありえますよね。
変数すべてについて、As Long を As Double あるいは
ウッシさんの回答のように As Currency でお試しください。

【73553】Re:テキストボックスの合計を桁区切りに
お礼  さんたぱぱ  - 13/1/20(日) 21:29 -

引用なし
パスワード
   ▼UO3 さん:

こんばんは。

教えていただいたコードでできました。
こんな短いコードでできるとは驚きです。

一度みなさんに教えていただいたコードを見直して
解読してみたいと思います。

また近いうちに先に進みたいと思いますのでご指導お願いします。

1557 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free