Excel VBA質問箱 IV

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

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


2548 / 13646 ツリー ←次へ | 前へ→

【67348】変数を認識してくれません。 八家九僧陀 10/11/27(土) 1:03 質問[未読]
【67350】Re:変数を認識してくれません。 Abyss 10/11/27(土) 1:44 発言[未読]
【67351】Re:変数を認識してくれません。 ichinose 10/11/27(土) 2:11 発言[未読]
【67361】Re:変数を認識してくれません。 八家九僧陀 10/11/28(日) 0:55 発言[未読]
【67362】Re:変数を認識してくれません。 八家九僧陀 10/11/28(日) 0:58 発言[未読]
【67363】Re:変数を認識してくれません。 SK63 10/11/28(日) 1:57 発言[未読]
【67364】Re:変数を認識してくれません。 SK63 10/11/28(日) 2:00 発言[未読]
【67366】Re:変数を認識してくれません。 八家九僧陀 10/11/28(日) 11:19 回答[未読]

【67348】変数を認識してくれません。
質問  八家九僧陀  - 10/11/27(土) 1:03 -

引用なし
パスワード
   Public kiso As Currency

kiso = Val(Range(A1").Value)

Private Sub 基礎控除_1算出()
Dim huyou_1 As Currency
If Text氏名_1.Value = "" Then
  huyou_1 = 0
Else
 huyou_1 = kiso
End If
Text計.Value = huyou_1 + syougai_1 + tokutei_1 
End Sub

年末調整事務をしています。
扶養控除処理のため、扶養家族の控除額算出用に組んだVBAの一部ですが、同様な変数定義を他の部分にもしていますが、どれも認識してくれません。

上記例では、一人目の扶養家族欄のText氏名に入力があれば、必然的に基礎控除額である380,000円(kiso)を計上するようにしており、当然入力があればText計欄には「380,000」と計上されるはずなのですが、[0]としか計上してくれません。
If Text氏名_1.Value = "" Then部分を「<>」にしたり、[.Value]を[.Text]にしたり、[huyou_1 = kiso]を[huyou_1 = 380000]としたり、いろいろと試しましたが全く思うとおりにいきません。
ちなみに[ Text計.Value = huyou_1 + syougai_1 + tokutei_1 ]を[ Text計.Value = kiso + syougai_1 + tokutei_1 ]とするとText計には[380000]と計上されるのでkiso = 380000と変数kisoはちゃんと認識されていると思います。

この定義方法を他にも書き込んでいるので、これさえ解決できれば他も同様に改良できると思っています。

どなたか改良策、改善策をご教示ください。年末調整の時期も迫りあせっています。
どうぞお願いします。

【67350】Re:変数を認識してくれません。
発言  Abyss  - 10/11/27(土) 1:44 -

引用なし
パスワード
   話の前後が分かりませんが、頭部の

> Public kiso As Currency
> kiso = Val(Range(A1").Value)

はFunctionなり、Subプロシージャ内部に宣言されていますか?
要するに、初期化はどこで行っていますか?

基礎控除額 \380,000は税法で決まっていますから、
複数のSubプロシージャから参照したいのなら、

Const Kiso = 380000@

にするか、どうしてもRange("A1")値として参照したいのなら、
プロパティ宣言として例えば、

public property get Kiso() as currency
  Kiso = Range("A1").value
end property

とするのもありかも知れませんね。

【67351】Re:変数を認識してくれません。
発言  ichinose  - 10/11/27(土) 2:11 -

引用なし
パスワード
   こんばんは。
再現できる記述をきちんとされたほうがよいですよ!!


>Public kiso As Currency
↑これは、どこに記述しているのですか?


>kiso = Val(Range(A1").Value)
↑これは、どこに記述しているのですか?
少なくともこれだけでは、作動しませんよね?


同じような現象になる一例です。

新規ブックにて試してください。

標準モジュール(Module1)に
'=======================================================
Option Explicit
Public kiso As Currency
'=======================================================
Sub test1()
  kiso = 380000
End Sub

別の標準モジュール(module2)に

Option Explicit
Public kiso As Currency
'========================================================
Sub test2()
  MsgBox kiso
End Sub

test1を実行後、
test2を実行してください。

以前、上記のコードでtest1、test2と実行したら、
test2で380000ではなく、0と表示された

というご質問を受けたことがあります。

こんなコードになっていませんか?

【67361】Re:変数を認識してくれません。
発言  八家九僧陀  - 10/11/28(日) 0:55 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。
>再現できる記述をきちんとされたほうがよいですよ!!
>
>
>>Public kiso As Currency
>↑これは、どこに記述しているのですか?
>
>
>>kiso = Val(Range(A1").Value)
>↑これは、どこに記述しているのですか?
>少なくともこれだけでは、作動しませんよね?
>
すみません。
ご指摘のコードは以下の部分に記述しています。

UserForm(コード)Moduleの
最上部のDeclarations部に

Public kiso As Currency
Public kasan_1 As Currency
 ・
 ・
 ・

Private Sub UserForm_Initialize()

kiso = Val(Range("A1").Value)
kasan_1 = Val(Range("A2").Value)
 ・
 ・
 ・
以下同じUserForm Moduleに次のコードを記述しています。

Public kiso As Currency

kiso = Val(Range(A1").Value)

Private Sub 基礎控除_1算出()
Dim huyou_1 As Currency
If Text氏名_1.Value = "" Then
  huyou_1 = 0
Else
 huyou_1 = kiso
End If
Text計.Value = huyou_1 + syougai_1 + tokutei_1 
End Sub

変数宣言する記述箇所がおかしいのでしょうか?

ほんとにあせっています。どうか解決法をご教示ください。

【67362】Re:変数を認識してくれません。
発言  八家九僧陀  - 10/11/28(日) 0:58 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。
>再現できる記述をきちんとされたほうがよいですよ!!
>
>
>>Public kiso As Currency
>↑これは、どこに記述しているのですか?
>
>
>>kiso = Val(Range(A1").Value)
>↑これは、どこに記述しているのですか?
>少なくともこれだけでは、作動しませんよね?
>
すみません。
ご指摘のコードは以下の部分に記述しています。

UserForm(コード)Moduleの
最上部のDeclarations部に

Public kiso As Currency
Public kasan_1 As Currency
 ・
 ・
 ・

Private Sub UserForm_Initialize()

kiso = Val(Range("A1").Value)
kasan_1 = Val(Range("A2").Value)
 ・
 ・
 ・
以下同じUserForm Moduleに次のコードを記述しています。

Private Sub 基礎控除_1算出()
Dim huyou_1 As Currency
If Text氏名_1.Value = "" Then
  huyou_1 = 0
Else
 huyou_1 = kiso
End If
Text計.Value = huyou_1 + syougai_1 + tokutei_1 
End Sub

変数宣言する記述箇所がおかしいのでしょうか?

ほんとにあせっています。どうか解決法をご教示ください。

【67363】Re:変数を認識してくれません。
発言  SK63  - 10/11/28(日) 1:57 -

引用なし
パスワード
   ▼八家九僧陀 さん:
>▼ichinose さん:
一つ一つ確認してみてはどうでしょうか。
ウオッチしてみたり、、です。
いまだに、確認していないでしょうか??

【67364】Re:変数を認識してくれません。
発言  SK63  - 10/11/28(日) 2:00 -

引用なし
パスワード
   ▼SK63 さん:
>▼八家九僧陀 さん:
>>▼ichinose さん:
>一つ一つ確認してみてはどうでしょうか。
>ウオッチしてみたり、、です。
>いまだに、確認していないでしょうか??
Text計.Value = huyou_1 + syougai_1 + tokutei_1 
これは、どこにあるのでしょうか???
私には、いまだに解りませんです??
syougai_1 + tokutei_1 
どこでせんげんしていますか??

【67366】Re:変数を認識してくれません。
回答  八家九僧陀  - 10/11/28(日) 11:19 -

引用なし
パスワード
   ▼SK63 さん:
>▼SK63 さん:
>>▼八家九僧陀 さん:
>>>▼ichinose さん:
>>一つ一つ確認してみてはどうでしょうか。
>>ウオッチしてみたり、、です。
>>いまだに、確認していないでしょうか??
>Text計.Value = huyou_1 + syougai_1 + tokutei_1 
>これは、どこにあるのでしょうか???
>私には、いまだに解りませんです??
>syougai_1 + tokutei_1 
>どこでせんげんしていますか??

Text計.Value = huyou_1 + syougai_1 + tokutei_1 を各Private Subに同じコードを記述していましたが、「どこに」「どこで」というご指摘を受けてよくよく調べてみると、huyou_1 、 syougai_1 、 tokutei_1をそれぞれのPrivate Subで宣言していました。
すべてDimからPublicに修正して、思うとおりの結果がでました。

ご迷惑をお掛けしました。
皆様、ありがとうございました。

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