[[20100214172346]] 『ユーザフォームの計算』(tt) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザフォームの計算』(tt)
 いつも大変お世話になっています。税金計算なんですが
 ワークシートで
    =(価格*0.5/土地面積)*MIN(床面積*2,200*0.03)で求めていますが
 ユーザフォームで
  = Val(txtHyokaToti * 0.5 / txtTotiMenseki) * Min  
 (txtTatemonoMenseki * 2, 200) * 0.03  
 ^^^^^^^^^^                               ↑  反転します 
 よろしくお願いします。      

 > 反転します 

 どういう意味ですか?
 MsgBox txtTatemonoMenseki
 とすると、何と表示されるのですか?

 (VBAメンテ担当)

 有難うございます。
 コンバイルエラー 
 sub またはfunctionが定義されていません。
 が表示されます。
 (tt)

 > コンバイルエラー 
 > Sub または Functionが定義されていません。

 そういう情報は、最初から示しましょう。

 > =(価格*0.5/土地面積)*MIN(床面積*2,200*0.03)

 であるならば、

 = Val(txtHyokaToti * 0.5 / txtTotiMenseki) * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)
                                              ^^^^^^^^^^^^                            ^^^^^^^^^^^
 ではないでしょうか?

 (VBAメンテ担当)

 (VBAメンテ担当)さん 有難うございます。お蔭様でバッチリ計算が出来ました。
 計算結果 マイナスになった場合0表示は出来ますか?
 (tt)

 > 計算結果 マイナスになった場合0表示は出来ますか?

 できると思います。
 具体的な方法は、サンプルデータやコードの説明がないので、わかりません。
 セルの書式設定などではないでしょうか?

 (VBAメンテ担当)

 >計算結果 マイナスになった場合0表示は出来ますか?
 表示だけでなく、結果が「0」に成っても良いのなら
 MAX関数で下限を設ける手法が しばしば使われるのを見ます。

 例えばワークシート上でも =MAX(0,計算結果) としておけば
 計算結果がマイナスの時は 0,プラスの時は計算結果が返されますよね。

 VBAでも同じように書いてみられては?

 それにしても、最初の「Val」は不要に思いますが。。。
  有った方が良いのかな??

 (HANA)

  (VBAメンテ担当)さん
 今勉強中のコードです。
 Private Sub txtHyokaToti_Change()
    If CheckBox1.Value = True Then
        txtSyutokuzei = Val(txtHyokaToti * 0.5 * 0.03) - Val(txtHyokaToti *  
 0.5 / txtTotiMenseki) _
                       * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)

    ElseIf CheckBox1.Value = False Then
        txtTorokuToti = Val(txtHyokaToti) * 0.01

    End If
 End Sub
 txtHyokaToti=1800万円
 txtHyokaTaTemono=1500万円
 txtTotiMenseki=120u
 txtTatemonoMenseki=180

 この計算結果マイナス18万円になります。したがって税額は0円ということになります。
 (tt)

 (HANA)さん いつも有難うございます。
 >それにしても、最初の「Val」は不要に思いますが。。。
 >有った方が良いのかな??
 前回この学校でご指導頂いたときにこの方法を教えていただいたので
「Val」ナシで検証はしておりません
 (tt)

 > この計算結果マイナス18万円になります

 計算結果は、どの値なのでしょうか?

 計算結果 = Application.Max(0, 計算結果)
 とすれば?

 なお、Valは有ってもいいと思います。ただし文字列等、数値に変換できない文字が入力されると、
 誤計算される可能性がありますが・・・

 (VBAメンテ担当)

 >計算結果は、どの値なのでしょうか?
 上記のコードに下部のデータで計算した値です。
 (tt)

 >>計算結果は、どの値なのでしょうか?
 > 上記のコードに下部のデータで計算した値です。

 その計算結果は、どの値なのか?と聞いているのは、
 txtSyutokuzei なのか、txtTorokuToti なのか?
 そもそも、Max は試したのでしょうか?

 (VBAメンテ担当)


 おっと、衝突しちゃいましたが取りあえずそのまま載せておきます。

 Valを付けるなら、それぞれの変数に付けないと
 今回の場合意味が無いと思いますが。。。

 Val(txtHyokaToti) * 0.5 * 0.03
 こんな感じで。

 例えば、txtHyokaToti に値以外が入っていた場合
 Val(txtHyokaToti * 0.5 * 0.03)
     ~~~~~~~~~~~~~~~~~~~~~~~~~この計算をしようとした時点で
 エラーで止まるんじゃないかと。。。?

 それから、言葉を統一した方が良いと思いますよ。

 >この計算結果マイナス18万円になります。
  ↓
  txtSyutokuzeiがマイナス18万円になります。
 と言った感じで。 

 (HANA)

 > Valを付けるなら、それぞれの変数に付けないと

 たしかに・・
 要するに、付け方ですね。

 > 最初の「Val」は不要に思いますが

 では、意味がわかりませんでした。

 (VBAメンテ担当)

 (VBAメンテ担当)さん
 >txtSyutokuzei なのか、txtTorokuToti なのか?
 (HANA)さんのとおり「txtSyutokuzeiがマイナス18万円になります。」
 です。今後理解できるように気をつけます。

 >そもそも、Max は試したのでしょうか?
 試したのですが今のところ計算ミスが出ますのでゆっくり落ち着いて試してみるつもり 
 です。
 (tt)


 >>txtSyutokuzei なのか、txtTorokuToti なのか?
 >
 > 「txtSyutokuzeiがマイナス18万円になります。」

 であれば、
 txtSyutokuzei = Application.Max(0, txtSyutokuzei)
 ではないかと思うのですが、

 >>そもそも、Max は試したのでしょうか?
 > 試したのですが今のところ計算ミスが出ます

 どのような値で、どのように試しているのかきちんと説明していただければ、アドバイスがしやすいのですが・・・

 (VBAメンテ担当)

 (VBAメンテ担当)さん 有難うございます。
 >どのような値で、どのように試しているのかきちんと説明していただければ、アドバイ
 >スがしやすいのですが・・・
 出来ないからといって何でもお聞きするのも失礼だし自分でよく勉強してそれでも出来
 ないときに又ご指導願うと言うのが自分のスキル上達につながるのではないかと思いま
 す。
 教えて頂ながら大変失礼だと思いますがよろしくお願いします。
 (tt)


 >>どのような値で、どのように試しているのかきちんと説明していただければ、アドバイスがしやすいのですが・・・
 >
 > 出来ないからといって何でもお聞きするのも失礼だし自分でよく勉強してそれでも出来
 > ないときに又ご指導願うと言うのが自分のスキル上達につながるのではないかと思います。

 少し勘違いをされているかもしれないので、補足しておきます。

 > 試したのですが今のところ計算ミスが出ます

 は、どのように試して、どのようになってほしいところが、どのようになってしまうのかの説明がないので、
 アドバイスしている者の理解不足等により、間違ったことをアドバイスしている可能性もあります。

 それよりも、ご自身で考えてみるというのであれば、もちろん、がんばっていただきたいです。
 そのほうがよりチカラになると思います。

 (VBAメンテ担当) 

  (VBAメンテ担当)さん 有難うございます。
 この例題はまだ始まったばかりでご指導をお願いしたいことがたくさんあります。ひと
 つひとつ解決したいので今後よろしくお願いします。
 (tt)


 > この例題はまだ始まったばかりでご指導をお願いしたいことがたくさんあります。ひと
 > つひとつ解決したいので今後よろしくお願いします。

 はい。私でよければ、時間のあるときは、コメントさせていただきます。
 わからないことが出てきたときは、再現できるサンプルデータとコードを添えて、ご質問いただければよいかと思います。

 サンプルデータがシートの場合は、以下のような感じで、説明していただければ、助かります。

       [A]   [B]   [C]
 [1]
 [2]
 [3]

 がんばってください。

 (VBAメンテ担当)

 (VBAメンテ担当)さん 有難うございます。ユーザフォーム上で作業しています。
 概要は土地付建物の購入時の税金計算をしようとしています。
 TextBoxには名前を付けています
 
   txtTotiMenseki  txtHyokaToti    txtTorokuToti    txtTorokuTatemono
    (土地面積)  (土地評価額)    (土地登録免許税)   (建物登録免許税)

  txtTatemonoMenseki txtHyokaTatemono txtSyutokuToti  txtSyutokuTatemono
  (建物面積)   (建物評価額)   (土地取得税)    (建物取得税)

 今のところこのような形式です。(まだまだ追加される予定です。)

 txtSyutokuToti = Application.Max(0, txtHyokaToti * 0.5 * 0.03) -  
 Application.Max (0, txtHyokaToti * 0.5 / txtTotiMenseki) _			

                       * Application.Max(0, txtTatemonoMenseki * 2, 200 * 0.03)			
		              ^^^^^^^	
			    ↑Minに変更した場合マイナスがプラスになる
 プレビューでは(建物面積)(建物評価額)等は1段下に下がります。

 (tt)


 それで良いのですか?

 txtSyutokuTotiが、どの様な計算がされれば良いのか
 また、それぞれにどの様な値が入力されるのか分かりませんが。。。

 少なくとも、「txtHyokaToti」にマイナスが入力される事は無いと思うので
 なんだか正しく理解されて居られないように感じますが?

 もう一度、ワークシートに戻って 或いは
 分かりやすい「土地評価額」などの文字を使って
 どの様な計算がされればよいのか
 ゆっくり考えなおしてみられてはどうでしょう。

 (HANA)

 有難うございます。
 >「txtHyokaToti」にマイナスが入力される事は無いと思うので
 今txtSyutokuTotiを求めています。ここにマイナスが出ます。
 計算式 

 txtSyutokuToti = (txtHyokaToti * 0.5 * 0.03) - (txtHyokaToti * 0.5 /   
 txtTotiMenseki) * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)
 具体例
 txtTotiMenseki=120u txtTatemonoMenseki=180u
 txtHyokaToti=1800万円  としますと
 基本税率=1800万円*0.5*0.03=27万円
 軽減税率=(1800万円*0.5/120u)*200u*0.03=45万円
 txtSyutokuToti =27万円-45万円=-18万円
 txtSyutokuTotiにマイナスがでます。ここを0表示にさせたいのです。

 (HANA)さんご指摘のように(Val)をなくしても正しく計算されました
 (tt)


 返信は、下のコメント欄から行って下さい。

 また、ワークシート上で考えてみるとどうですか?

 具体的に想定すると
 A1セルに 10、B1セルに 20 と値が入っている状態で
 A2セルに =B1-A1 と式を入れると マイナスに成りますね?(-10)

 >>例えばワークシート上でも =MAX(0,計算結果) としておけば
 >>計算結果がマイナスの時は 0,プラスの時は計算結果が返されますよね。

 これを踏まえて考えると、A2セルの式はどの様な式にしますか?

 もう少し、実際の計算の様な物を想定してみます。
 A1セルに 10、B1セルに 20、C1セルに 30 と入っている状態で
  B1セルとC1セルの小さい方の値から、A1セルの値を引く
 この数式は出来ますか?
 そして、その結果がマイナスに成った時は「0」にする と言う条件を加えると
 どんな式にしますか?

 ====
 もう一つ違ったアプローチとしては
 計算結果を今は直接表示しているのではないかと思いますが
      ↓こんな1行のコード
        表示するボックス = 数式
   
 一度変数に入れて、IFを使って場合分けをしても良いと思いますよ。
      ↓こんな6行のコードに
   計算結果を入れる変数 = 数式
  IF 計算結果を入れる変数の値がマイナスだったら THEN
        表示するボックス = 0
   ELSE
        表示するボックス = 計算結果を入れる変数の値
   END IF

 って感じで。

 (HANA)

 ご提案有難うございます。
  If txtSyutokuToti.Value < 0 Then
        txtSyutokuToti.Value = 0
  End If
 このコードを追加でマイナスの場合0値が返ります。他にエラーが出るヶ所があります
 改めてご指導を願いします。
 (tt)


 > このコードを追加でマイナスの場合0値が返ります

 txtSyutokuToti.Value = Application.Max(0, txtSyutokuToti.Value)
 では、いけないのでしょうか?

 > 他にエラーが出るヶ所があります

 具体的には、どこのコードでどういうエラーが出るのでしょうか?

 あと、

 > 返信は、下のコメント欄から行って下さい。

 というお願いの意味はおわかりですか?

 [ 一覧(最新更新順) | 返信・編集 ] 

 の 返信・編集 をクリックして投稿するのではありません。

 (とおりすがり)

 有難うございます。 
 txtSyutokuToti.Value = Application.Max(0, txtSyutokuToti.Value)でも0値が帰りま
 す。
 エラーの件ですが
 txtSyutokuToti = (txtHyokaToti * 0.5 * 0.03) - (txtHyokaToti * 0.5 /   
 txtTotiMenseki) * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)
 の計算式があるため 「txtTotiMenseki」「txtTatemonoMenseki」を入力しないで「txtHyokaToti」に数値を入力又「txtTotiMenseki」「txtTatemonoMenseki」入力して  
 「txtHyokaToti」の数値を消去すすると」実行時エラー "13" 型が一致しませんのメ
  ッ セージが出ます。
 (tt)


 > 概要は土地付建物の購入時の税金計算をしようとしています。
 > TextBoxには名前を付けています
 > 
 >  txtTotiMenseki  txtHyokaToti    txtTorokuToti    txtTorokuTatemono
 >   (土地面積)  (土地評価額)    (土地登録免許税)   (建物登録免許税)
 >
 >  txtTatemonoMenseki txtHyokaTatemono txtSyutokuToti  txtSyutokuTatemono
 >  (建物面積)   (建物評価額)   (土地取得税)    (建物取得税)

 それぞれのTextBoxには、

 > txtTotiMenseki=120u txtTatemonoMenseki=180u
 > txtHyokaToti=1800万円

 と入力すると、

 > 基本税率=1800万円*0.5*0.03=27万円
 > 軽減税率=(1800万円*0.5/120u)*200u*0.03=45万円
 > txtSyutokuToti =27万円-45万円=-18万円
 > txtSyutokuTotiにマイナスがでます。ここを0表示にさせたい

 のですよね?
 "u"や、"万円"という文字も入力してあるのですか?
 数字だけ入力している場合

 txtSyutokuToti = (txtHyokaToti * 0.5 * 0.03) - (txtHyokaToti * 0.5 / txtTotiMenseki) * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)

 のコードですと、-18 となりませんか?
 試しに、その次の行に、
 txtSyutokuToti = Application.Max(0, txtSyutokuToti)
 を追加すると、どうなりますか?

 > 0値が返ります。

 txtSyutokuToti が マイナス値の場合、

 > 0表示にさせたい

 のではないですか?何か矛盾していませんか?

 > 実行時エラー "13" 型が一致しませんのメッセージが出ます。

 まずは、

 > txtTotiMenseki=120u txtTatemonoMenseki=180u
 > txtHyokaToti=1800万円

 の例で検証していただけませんか?
 途中で前提条件を変えるとややこしくなります。

 なお、入力しない場合、結果としてどうなればいいのかの説明がありませんので、アドバイスができません。
 たぶん、
 txtSyutokuToti = (Val(txtHyokaToti) * 0.5 * 0.03) - (Val(txtHyokaToti) * 0.5 / Val(txtTotiMenseki)) * Application.Min(Val(txtTatemonoMenseki) * 2, 200 * 0.03)
 としないといけないのではと思いますが、計算結果として期待しているものが得られるのかがわかりません。

 (VBAメンテ担当)


 >実行時エラー "13" 型が一致しませんのメッセージが出ます。
 このメッセージが出る原因は分かっているのですよね?

 >「txtTotiMenseki」「txtTatemonoMenseki」を入力しないで「txtHyokaToti」に数値を入力 又
 >「txtTotiMenseki」「txtTatemonoMenseki」入力して「txtHyokaToti」の数値を消去 
 でしたら、計算処理に進む条件が整っているかどうか
 先に確認すれば良いのではないでしょうか?

 「○○の時××をするとエラーが発生する」という考え方ではなく
 「何がそろっていた時計算されればよいのか」を考えてみられてはどうでしょう?
 また、その条件が整っていない時は、結果には何を表示させたいのでしょう?
  IF 条件を確認して、整っていたら THEN
        ・・・・・・・・・・・
        txtSyutokuToti = 計算結果
   ELSE
        txtSyutokuToti = 何を表示?
   END IF

 To,VBAメンテ担当さんへ
 一応、念のため・・・
 >このコードを追加でマイナスの場合0値が返ります。
 >txtSyutokuToti.Value = Application.Max(0, txtSyutokuToti.Value)でも0値が帰ります。
 は、「ちゃんと0が表示されるように成りました」って報告だと思います。

 (HANA)

 (VBAメンテ担当)さん 有難うございます。
 >"u"や、"万円"という文字も入力してあるのですか?
 > 数字だけ入力している場合

 "u"は入力していません。
 "万円"は10000で入力しています。
 のコードですと、-18 となりませんか?
 >txtSyutokuToti = Application.Max(0, txtSyutokuToti)
 >を追加すると、どうなりますか?
 は(HANA)さんがコメントして頂いているように0値がかえります。申し訳ありませんでし
 た。 
 (HANA)さん 有難うございます。

 >計算処理に進む条件が整っているかどうか
先に確認すれば良いのではないでしょうか?
 はい 検証させていただきます
 (tt)

 「txtTotiMenseki」「txtTatemonoMenseki」に数値入力がないときメッセージを出そう 
 とするのですがメッセージも出ない、計算もされないのですが
 間違いを教えてください
 (「txtHyokaToti」→「txtTotiSyutokuZei」
 「txtSyutokuTatemono」→[txtTotiSyutokuZei]に変更しています。

 Private Sub txtHyokaToti_Change()
    If txtTotiMenseki.Value = "" Then Exit Sub
        MsgBox "土地面積を入力してください"
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 If txtTatemonoMenseki.Value = "" Then Exit Sub
        MsgBox "建物面積を入力してください"
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
 txtTotiTorokuZei.Value = txtHyokaToti.Value * 0.004

    If CheckBox1.Value = False Then
        txtTotiTorokuZei.Value = txtHyokaToti.Value * 0.01
    End If

        txtTotiSyutokuZei.Value = (txtHyokaToti.Value * 0.5 * 0.03) -   
 (txtHyokaToti.Value * 0.5 / txtTotiMenseki.Value) _
                       * Application.Min(txtTatemonoMenseki.Value * 2, 200 *  
 0.03)
        txtTotiSyutokuZei.Value = Application.Max(0, txtTotiSyutokuZei.Value)

 End Sub 
 (tt)

 >If txtTotiMenseki.Value = "" Then Exit Sub
 こんな風に書いてあるので、その通りの動きに成っていると思います。

   IF 条件 THEN
       処理
   END IF
 が基本ですから、まずはその様になさっておかれては?

 >Exit Sub
 は、そのマクロを終了します。

 やりたいことは
   条件が成立したら
    メッセージを表示して
    マクロを終了
 ですから

    If txtTotiMenseki.Value = "" Then
        MsgBox "土地面積を入力してください"
        Exit Sub
    End If
 で、どうでしょう?

 (HANA)

 (HANA)さん いつもいつも有難うございます。気持ちよく動いてくれます。
 (tt)

 動くように成りましたか。良かったです。
 でも、↑の部分は ttさんが載せておられるコードから
 コピペして作った物で、私が入力した部分はありません。

 後一歩を乗り越える為の糧として
 ステップインで実行しながら
 コードの動きを確認出来るように成ると良いかもしれません。

 例えば
 >    If txtTotiMenseki.Value = "" Then Exit Sub
 の行にブレークポイントを設けます。
  コードを書く白い部分の左側に灰色の部分が有りますね?
  そこをクリックすると 茶色い●が表示されると思います。
    行も茶色くハイライトされます。
  或いは、ツールバーの手のマークのボタンを押しても良いと思います。
 マクロはブレークポイントが設定されている行で一旦止まります。

 又は、一旦止めたい所の前に一行挿入して「Stop」と書いておきます。
 やはり、コードはこの行で一旦止まります。

 マクロが実行されて止まっている行は、黄色くハイライトされていると思います。
 [F8]キーを押すと、コードの実行に伴い ハイライトの位置も変わって行きます。

 最初に書いて居られたコードだと、
 まず、If txtTotiMenseki.Value = "" Then が黄色くなって止まります。
 [F8]を押すと、Exit Sub が黄色くなって
 もう一度押すと、マクロが終了してしまうのが
 分かると思います。

 すると、「Exit Sub する前にメッセージを表示しないと!!」と
 気づけたかも知れません。

 デバッグ技術も身につけて、頑張ってください。

 (HANA)

 有難うございます。デバッグ技術も身に付けたいと思います。
 コードを変更しました。前のコードではチェックを入替え再計算していましたが
 変更後のコードはチェックを入れ代えるだけで再計算してくれます。
 Private Sub CheckBox1_Click()
    If txtTotiMenseki.Value = "" Then
        MsgBox "土地面積を入力してください"
        Exit Sub
    End If

    If CheckBox1.Value = True Then
        txtTotiTorokuZei.Value = txtHyokaToti.Value * 0.004
    Else
        txtTotiTorokuZei.Value = txtHyokaToti.Value * 0.01
    End If
    If txtTatemonoMenseki.Value = "" Then
        MsgBox "建物面積を入力してください"
        Exit Sub
    End If
    If CheckBox1.Value = True Then
        txtTatemonoTorokuZei.Value = txtHyokaTatemono.Value * 0.0015
    Else
        txtTatemonoTorokuZei.Value = txtHyokaTatemono.Value * 0.003
    End If

        txtTotiSyutokuZei = (txtHyokaToti * 0.5 * 0.03) - (txtHyokaToti *
  0.5 /  txtTotiMenseki) _
                       * Application.Min(txtTatemonoMenseki * 2, 200 * 0.03)
        txtTotiSyutokuZei = Application.Max(0, txtTotiSyutokuZei.Value)
 End Sub
 コード的にはおかしいヶ所ところはないでしょうか?
 (tt)

 コード的には。。。無さそうですが
  (.Value が抜けている所が有るみたいですが。)
 処理の流れ等は違和感が有ります。

  なんで、「CheckBox1_Click」でマクロを実行するのか とか
  土地面積が入力されてなかったら、txtTatemonoTorokuZeiも計算されない とか
  場合に依ってはすぐに消す事に成るかもしれない値が txtTotiSyutokuZei に入ってしまう とか

 が、使用方法等は分からないので
 それでよいのかもしれません。

 (HANA)

 有難うございます。
 (tt)

 次の課題ですがよろしくお願いします。
 sheet2に中古住宅課税標準軽減額 範囲指定 B4:E9

 昭和2年1月1日	〜	昭和50年12月31日	0万円
 昭和51年1月1日	〜	昭和56年6月30日	350万円
 昭和56年7月1日	〜	昭和60年6月30日	420万円
 昭和60年7月1日	〜	平成1年3月31日	450万円
 平成1年4月1日	〜	平成9年3月31日	1000万円
 平成9年4月1日	〜		1200万円
 sheet1(textbox)
 txtNengetu=年月日
 txtGenzeigaku.Value=中古住宅課税標準軽減額
 CheckBox1
 CommandButton1
 を設定しています。

 Private Sub CommandButton1_Click()
   If CheckBox1.Value = True Then

   txtGenzeigaku.Value = "=IF(txtNengetu.Value ="""","""",VLookup  
 (txtNengetu.Value , 中古住宅課税標準軽減額, 4, True)"
    End If
 End Sub
 txtGenzeigakuに値が返らず数式が返ります。間違いを教えてください。
 (tt)


 > txtGenzeigakuに値が返らず数式が返ります。

 以下のようにしてはいかがでしょうか?

    If txtNengetu.Value = "" Then
        txtGenzeigaku.Value = ""
    Else
        txtGenzeigaku.Value = _
            Application.WorksheetFunction.VLookup(txtNengetu.Value, Range("中古住宅課税標準軽減額"), 4, True)
    End If

 あと、他の方もおっしゃっていますが、

 >> 返信は、下のコメント欄から行って下さい。
 >
 > というお願いの意味はおわかりですか?
 >
 > [ 一覧(最新更新順) | 返信・編集 ] 
 >
 > の 返信・編集 をクリックして投稿するのではありません。

 の意味はおわかりですか?反応を示していただけませんか?

 (VBAメンテ担当)


 衝突しちゃいましたが、そのまま載せておきます。

 まず。。。

 変数 = "あ"  と書いたら、変数には「あ」と言う文字が入りますね。
 変数 = "=1+1" と書いたら、変数には「=1+1」という文字が入ります。

 それから、
  変数 = 1+1 と書いたら、変数は「2」になりますが
 同じように
  変数 = if(・・・・)
 と書いても計算してくれません。

 最初にMIN関数を使おうと思った時も、同じように書いたのでは出来ませんでしたよね。

 使おうと思った関数が、VBAで使えるのかどうか 確認されるのが良いと思います。
 ヘルプで「ワークシート関数」などのワードで検索すると
 VBAで使えるワークシート関数の一覧が見つかると思います。

 (HANA)

 (VBAメンテ担当)さん
 >  返信・編集 をクリックして投稿するのではありません。
 > の意味はおわかりですか?反応を示していただけませんか?

 ご指摘がありましたので(VBAメンテ担当)さん宛てにコメントからメッセージをしました
 がごらんいただけたのでしょうか?
 > 返信・編集 をクリックして投稿するのではありません。

 とありますが質問の一環でコメントではないと考えております。もし私の勘違いでした
 らごめんなさい。またどの部分がコメントなんでしょうか?ご指摘いただければ幸甚で
 す。
 (VBAメンテ担当)さんのコードでは
「worksheetFunctionクラスのVlookup1プロパティを取得できません」のエラーメッセー 
 ジが表示されます。
 (HANA)さん ワークシートで
 Range("C17").Formula = "=IF(C16="""","""",VLOOKUP(C16,中古住宅課税標準減税 
 額,4,TRUE)*10000)" (C16=年月日)で値は帰ります。
 ご存知でしたら「ユーザフォーム」の詳しい書籍がありましたら教えていただけません 
 か?
 (tt)


 まず、質問の本題に入る前に、投稿の方法ですが・・・

 > ご指摘がありましたので(VBAメンテ担当)さん宛てにコメントからメッセージをしました
 > がごらんいただけたのでしょうか?

 どの文章のことをおっしゃっているのかわかりませんが、拝見はしています。

 > 返信・編集 をクリックして投稿するのではありません。

 というように、今回指摘がされているのは、

 > 表示された書き込みの一番下[コメント:]の下の枠にコメントを書き込んで

 という方法で書き込みがされていないように見えます。
 書き込みの全体を見ていただければ、わかると思いますが、横一直線に線が引かれている
 部分があり、投稿内容の区切りとなっていて、会話のやりとりがわかるようになっています。
 ところが、返信・編集 をクリックして投稿 されると、
 ----
 という表示では、横一直線の区切り線にならず、投稿の区切りがパッと見て、よくわからないわけです。

 さて、質問の本題ですが。

 > (VBAメンテ担当)さんのコードでは
 > 「worksheetFunctionクラスのVlookup1プロパティを取得できません」のエラーメッセー 
 > ジが表示されます。

 コードを示してみてください。
 Vlookup1プロパティ
 とは何ですか?1が余計では?
 あと、txtNengetu.Value が、中古住宅課税標準減税額 の左端列にない場合、
 そのようなメッセージが出ます。
 なお、データ型をあわせておく必要がありますので、
 Val(txtNengetu.Value)
 とすると、いかがですか?

 (VBAメンテ担当)


 >ところが、返信・編集 をクリックして投稿 されると、
 知らなかったです。今まで「返信・編集」で投稿していました。以降コメントから投稿します。
 >Vlookup1プロパティ
 > とは何ですか?1が余計では?
 1は不必要でタイプミスです
 Val(txtNengetu.Value)を各ヶ所追加したのですが
 コンバイルエラー
 代入式の左辺の関数の呼出しは、バリアント型又はオブジェクト方の値をかえさなければなりません
 と表示されます。
 (tt)

 > Val(txtNengetu.Value)を各ヶ所追加したのですが
 > コンバイルエラー
 > 代入式の左辺の関数の呼出しは、バリアント型又はオブジェクト方の値をかえさなければなりません

 各ヶ所追加が気になるのですが、アドバイスが悪かったのかもしれませんが、
 VLookup(Val(txtNengetu.Value)
         ^^^^^              ^^^
 ここだけです。

 Val(txtGenzeigaku.Value) = _

 などとしてしまうと、おっしゃっているようなエラーになります。

 Val関数が何をしているのかをーるぷで調べるなど確認して、考えてみてください。

 (VBAメンテ担当)


 ユーザフォームでのVlookupプロパティは結局理解できず私なりにユーザフォームで日時
 を入力しワークシートにその値を代入しtxtGenzeigakuを計算しその値をユーザフォーム
 に代入するという遠周りで求めました。
 以前みやほりんさんが回答されたものを応用し
 200u以下txtHyokaTotiの1/6
 200u以上txtHyokaTotiの1/3 の計算

 txtKoteiSisanKeigen.Value = Format(Val(txtHyokaToti.Value * 1 / 6 +   
 txtHyokaToti.Value _
                                        * ((1 - 200 / txtTotiMenseki) * 1 / 6)
  *(txtTotiMenseki > 200)))
 上記のコードはワークシートでは正しく値が返りますがユーザフォームでは200u以上で
 は間違った値が返ります。よろしくお願いします。
 (tt) 

 *(txtTotiMenseki > 200)
 この部分。
 ワークシートに =(1>0)*1
 VBAで msgbox (1>0)*1
 (semm)

 素直に
 If txtTotiMenseki.Value > 200 Then
  ・・・・
 Else
   ・・・・
 End If
 って書いて分けた方が後で読んだときも
 分かりやすいのではないかと思いますが。。。

 (HANA)

 (semm)さん 有難うございます。
 > msgbox (1>0)*1を代入しますと「true」がかえりmsgboxを省くと200u超える部分値が小さくなりま
 す。
 例えば 
 txtTotiMenseki 200u txtHyokaToti1800万円 txtKoteiSisanKeigen 300万円です
 txtTotiMenseki 300u txtHyokaToti1800万円 txtKoteiSisanKeigen 400万円が正答ですが
 200万円になります。これは今の式のカッコを移動させて計算しても同様の数値が出ます。

 (HANA)さん 有難うございます。なかなかレスがなかったのでおっしゃるとおりにやろうかなと
 考えておりました。
 (tt)

 新しいシートで
 こんなコードを実行すると、何か分かるかもしれません。

 '------
Sub TEST03031300()
    Range("A1").Value = "=(100>0)*100"
        Range("B1").Value = "=(100>0)*1"
        Range("C1").Value = "B1=(100 > 0) *1 :数式入力"
    Range("A2").Value = (100 > 0) * 100
        Range("B2").Value = (100 > 0) * 1
        Range("C2").Value = "B2  (100 > 0) *1 :計算結果入力"
    Range("A3").Value = "=(100<0)*100"
        Range("B3").Value = "=(100<0)*1"
        Range("C3").Value = "B3=(100 < 0) *1 :数式入力"
    Range("A4").Value = (100 < 0) * 100
        Range("B4").Value = (100 < 0) * 1
        Range("C4").Value = "B4  (100 < 0) *1 :計算結果入力"
End Sub
 '------

 (HANA)

 (HANA)さん 有難うございます。出来そうでなかなか出来ない。もう少し根気よく試してみます。
 (tt)

 皆さん 有難うございました。
 txtKoteiSisanKeigen.Value = Format(Val(txtHyokaToti.Value * 1 / 6) - ((txtHyokaToti.Value _
             * (1 - 200 / txtTotiMenseki) * 1 / 6) * (txtTotiMenseki > 200)), "#,##0")        
 このコード変更で解決いたしました。
 (tt)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.