Excel VBA質問箱 IV

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

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


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

【67778】もっと簡単にできないでしょうか? bakadeus 11/1/7(金) 19:50 質問[未読]
【67782】Re:もっと簡単にできないでしょうか? かみちゃん 11/1/7(金) 23:18 発言[未読]
【67787】Re:もっと簡単にできないでしょうか? bakadeus 11/1/8(土) 14:55 発言[未読]
【67790】Re:もっと簡単にできないでしょうか? かみちゃん 11/1/8(土) 17:01 発言[未読]
【67799】Re:もっと簡単にできないでしょうか? bakadeus 11/1/10(月) 14:40 発言[未読]
【67791】Re:もっと簡単にできないでしょうか? UO3 11/1/8(土) 17:42 発言[未読]
【67798】Re:もっと簡単にできないでしょうか? bakadeus 11/1/10(月) 14:16 発言[未読]
【67800】Re:もっと簡単にできないでしょうか? neptune 11/1/10(月) 14:58 発言[未読]
【67804】Re:もっと簡単にできないでしょうか? UO3 11/1/10(月) 18:28 発言[未読]
【67908】Re:もっと簡単にできないでしょうか? bakadeus 11/1/15(土) 17:46 お礼[未読]

【67778】もっと簡単にできないでしょうか?
質問  bakadeus E-MAIL  - 11/1/7(金) 19:50 -

引用なし
パスワード
   年末調整処理のプログラムを作り何とか事務を終えましたが、扶養家族の部分のコードをもっと簡単にできないかと悩んでいます。
フォーム上で一人一行のtextbox,comboboxを扶養家族6人分設定し、同じ値、同じ表を参照しているにも関わらず、ひとつひとつ下記のとおり定義づけしています。

6人全員を入力するわけではありません。1人も入力しない場合もありますが、なんとか簡単にできるコードはないでしょうか? ご教示お願いします。


Dim TBL(1 To 149) As Control
Dim データ範囲 As Range

Public myID As Range

Public 年調給与額 As Currency
Public 控除後給与額 As Currency
Public 課税所得額 As Currency

Public kiso As Currency '基礎控除額
Public kiso_2 As Currency '老人控除対象配偶者控除加算額
Public kasan_1 As Currency '同居特別障害者
Public kasan_2 As Currency '特別障害者
Public kasan_3 As Currency '一般障害者
Public kasan_4 As Currency '特別寡婦
Public kasan_5 As Currency '寡婦又は寡夫
Public kasan_6 As Currency '特定扶養親族
Public kasan_7 As Currency '老親
Public kasan_8 As Currency '老親の場合の同居加算
Public kasan_9 As Currency '勤労学生

'家族一人目変数定義
Public huyou_1 As Currency
Public tokutei_1 As Currency
Public doukyo_1 As Currency
Public kahu_kouzyo_1 As Currency
Public syougai_kouzyo_1 As Currency
'家族ニ人目変数定義
Public huyou_2 As Currency
Public tokutei_2 As Currency
Public doukyo_2 As Currency
Public kahu_kouzyo_2 As Currency
Public syougai_kouzyo_2 As Currency
'家族三人目変数定義
Public huyou_3 As Currency
Public tokutei_3 As Currency
Public doukyo_3 As Currency
Public kahu_kouzyo_3 As Currency
Public syougai_kouzyo_3 As Currency
'家族四人目変数定義
Public huyou_4 As Currency
Public tokutei_4 As Currency
Public doukyo_4 As Currency
Public kahu_kouzyo_4 As Currency
Public syougai_kouzyo_4 As Currency
'家族五人目変数定義
Public huyou_5 As Currency
Public tokutei_5 As Currency
Public doukyo_5 As Currency
Public kahu_kouzyo_5 As Currency
Public syougai_kouzyo_5 As Currency
'家族六人目変数定義
Public huyou_6 As Currency
Public tokutei_6 As Currency
Public doukyo_6 As Currency
Public kahu_kouzyo_6 As Currency
Public syougai_kouzyo_6 As Currency


Private Sub UserForm_initialize()

Worksheets("年調DATA").Select

kiso = Val(Range("扶養控除!c6").Value) '基礎控除額
kiso_2 = Val(Range("扶養控除!d8").Value) '老人控除対象配偶者控除加算額
kasan_1 = Val(Range("扶養控除!d14").Value) '同居特別障害者
kasan_2 = Val(Range("扶養控除!d13").Value) '特別障害者
kasan_3 = Val(Range("扶養控除!d12").Value) '一般障害者
kasan_4 = Val(Range("扶養控除!d15").Value) '特別寡婦
kasan_5 = Val(Range("扶養控除!d16").Value) '寡婦又は寡夫
kasan_6 = Val(Range("扶養控除!d11").Value) '特定扶養親族
kasan_7 = Val(Range("扶養控除!e9").Value) '老親の場合の同居加算
kasan_8 = Val(Range("扶養控除!d10").Value) '老親
kasan_9 = Val(Range("扶養控除!d17").Value) '勤労学生

Combo家族続柄_1.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_1.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_1.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_1.List = Sheets("辞書").Range("月表").Value
Combo家族生日_1.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_1.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_1.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_1.List = Sheets("辞書").Range("同居別居表").Value

Combo家族続柄_2.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_2.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_2.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_2.List = Sheets("辞書").Range("月表").Value
Combo家族生日_2.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_2.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_2.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_2.List = Sheets("辞書").Range("同居別居表").Value

Combo家族続柄_3.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_3.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_3.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_3.List = Sheets("辞書").Range("月表").Value
Combo家族生日_3.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_3.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_3.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_3.List = Sheets("辞書").Range("同居別居表").Value

Combo家族続柄_4.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_4.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_4.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_4.List = Sheets("辞書").Range("月表").Value
Combo家族生日_4.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_4.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_4.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_4.List = Sheets("辞書").Range("同居別居表").Value

Combo家族続柄_5.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_5.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_5.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_5.List = Sheets("辞書").Range("月表").Value
Combo家族生日_5.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_5.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_5.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_5.List = Sheets("辞書").Range("同居別居表").Value

Combo家族続柄_6.List = Sheets("辞書").Range("続柄表").Value
Combo家族元号_6.List = Sheets("辞書").Range("元号表").Value
Combo家族生年_6.List = Sheets("辞書").Range("年数表").Value
Combo家族生月_6.List = Sheets("辞書").Range("月表").Value
Combo家族生日_6.List = Sheets("辞書").Range("日表").Value
Combo寡婦別_6.List = Sheets("辞書").Range("寡婦別表").Value
Combo障害別_6.List = Sheets("辞書").Range("障害別表").Value
Combo同居別_6.List = Sheets("辞書").Range("同居別居表").Value

spin移動.Max = レコード数取得 + 1

Set TBL(1) = Combo社員ID
 ・
 ・
Set TBL(76) = Combo家族続柄_1
Set TBL(77) = Combo家族元号_1
Set TBL(78) = Combo家族生年_1
Set TBL(79) = Combo家族生月_1
Set TBL(80) = Combo家族生日_1
Set TBL(81) = Text特定別_1
Set TBL(82) = Combo同居別_1
Set TBL(83) = Combo寡婦別_1
Set TBL(84) = Combo障害別_1
Set TBL(85) = Text家族控除額_1
Set TBL(86) = Text家族氏名_2
Set TBL(87) = Combo家族続柄_2
Set TBL(88) = Combo家族元号_2
Set TBL(89) = Combo家族生年_2
Set TBL(90) = Combo家族生月_2
Set TBL(91) = Combo家族生日_2
Set TBL(92) = Text特定別_2
Set TBL(93) = Combo同居別_2
Set TBL(94) = Combo寡婦別_2
Set TBL(95) = Combo障害別_2
Set TBL(96) = Text家族控除額_2
Set TBL(97) = Text家族氏名_3
Set TBL(98) = Combo家族続柄_3
Set TBL(99) = Combo家族元号_3
Set TBL(100) = Combo家族生年_3
Set TBL(101) = Combo家族生月_3
Set TBL(102) = Combo家族生日_3
Set TBL(103) = Text特定別_3
Set TBL(104) = Combo同居別_3
Set TBL(105) = Combo寡婦別_3
Set TBL(106) = Combo障害別_3
Set TBL(107) = Text家族控除額_3
Set TBL(108) = Text家族氏名_4
Set TBL(109) = Combo家族続柄_4
Set TBL(110) = Combo家族元号_4
Set TBL(111) = Combo家族生年_4
Set TBL(112) = Combo家族生月_4
Set TBL(113) = Combo家族生日_4
Set TBL(114) = Text特定別_4
Set TBL(115) = Combo同居別_4
Set TBL(116) = Combo寡婦別_4
Set TBL(117) = Combo障害別_4
Set TBL(118) = Text家族控除額_4
Set TBL(119) = Text家族氏名_5
Set TBL(120) = Combo家族続柄_5
Set TBL(121) = Combo家族元号_5
Set TBL(122) = Combo家族生年_5
Set TBL(123) = Combo家族生月_5
Set TBL(124) = Combo家族生日_5
Set TBL(125) = Text特定別_5
Set TBL(126) = Combo同居別_5
Set TBL(127) = Combo寡婦別_5
Set TBL(128) = Combo障害別_5
Set TBL(129) = Text家族控除額_5
Set TBL(130) = Text家族氏名_6
Set TBL(131) = Combo家族続柄_6
Set TBL(132) = Combo家族元号_6
Set TBL(133) = Combo家族生年_6
Set TBL(134) = Combo家族生月_6
Set TBL(135) = Combo家族生日_6
Set TBL(136) = Text特定別_6
Set TBL(137) = Combo同居別_6
Set TBL(138) = Combo寡婦別_6
Set TBL(139) = Combo障害別_6
Set TBL(140) = Text家族控除額_6

Set データ範囲 = Range("a1").CurrentRegion
If データ範囲.Columns.Count = 1 Then
Else
データ表示 2
End If

End Sub

【67782】Re:もっと簡単にできないでしょうか?
発言  かみちゃん E-MAIL  - 11/1/7(金) 23:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>6人全員を入力するわけではありません。1人も入力しない場合もありますが、
>なんとか簡単にできるコードはないでしょうか?

とりあえず、ヒントだけ。
配列変数やCollection、繰り返し処理を使えば短くなりますが、
コードは、見た目簡単ではなくなるような感じがしますが、
簡単というのは、短くするという意味でしょうか?

【67787】Re:もっと簡単にできないでしょうか?
発言  bakadeus E-MAIL  - 11/1/8(土) 14:55 -

引用なし
パスワード
   ▼かみちゃん さん:
早速のご教示ありがとうございます。

同じ値、同じ表を参照しているにも関わらず、ひとつひとつ定義づけし、長々と記述しています。

>>6人全員を入力するわけではありません。1人も入力しない場合もありますが、
>>なんとか簡単にできるコードはないでしょうか?

今後の勉強のためにも、”短く”できるコードがあるなら、ご教示をお願いします。

>とりあえず、ヒントだけ。
>配列変数やCollection、繰り返し処理を使えば短くなりますが、
>コードは、見た目簡単ではなくなるような感じがしますが、
>簡単というのは、短くするという意味でしょうか?


【67790】Re:もっと簡単にできないでしょうか?
発言  かみちゃん E-MAIL  - 11/1/8(土) 17:01 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>今後の勉強のためにも、”短く”できるコードがあるなら

たとえば、以下のような感じのコードになります。

Option Explicit

Dim TBL(1 To 149) As Control
Dim データ範囲 As Range

Public myID As Range

Public 年調給与額 As Currency
Public 控除後給与額 As Currency
Public 課税所得額 As Currency

Public kiso(1 To 2) As Currency
'kiso(1)…基礎控除額
'kiso(2)…老人控除対象配偶者控除加算額
Public kasan(1 To 9) As Currency
'kasan(1)…同居特別障害者
'kasan(2)…特別障害者
'kasan(3)…一般障害者
'kasan(4)…特別寡婦
'kasan(5)…寡婦又は寡夫
'kasan(6)…特定扶養親族
'kasan(7)…老親
'kasan(8)…老親の場合の同居加算
'kasan(9)…勤労学生

'家族変数定義(最大六人分)
Public huyou(1 To 6) As Currency
Public tokutei(1 To 6) As Currency
Public doukyo(1 To 6) As Currency
Public kahu_kouzyo(1 To 6) As Currency
Public syougai_kouzyo(1 To 6) As Currency
'huyou(1)…一人目
'huyou(2)…二人目
'huyou(3)…三人目

Private Sub UserForm_initialize()
 Dim i As Long
 Dim v As Variant

 With Worksheets("扶養控除")
  v = .Range("A1:E9").Value
 End With
 kiso(1) = Val(v(6, 3))  '基礎控除額
 kiso(2) = Val(v(8, 4))  '老人控除対象配偶者控除加算額
 kasan(1) = Val(v(14, 4)) '同居特別障害者
 kasan(2) = Val(v(13, 4)) '特別障害者
 kasan(3) = Val(v(12, 4)) '一般障害者
 kasan(4) = Val(v(15, 4)) '特別寡婦
 kasan(5) = Val(v(16, 4)) '寡婦又は寡夫
 kasan(6) = Val(v(11, 4)) '特定扶養親族
 kasan(7) = Val(v(9, 5)) '老親の場合の同居加算
 kasan(8) = Val(v(10, 4)) '老親
 kasan(9) = Val(v(17, 4)) '勤労学生

 For i = 1 To 6
  With Worksheets("辞書")
   Controls("Combo家族続柄_" & i).List = .Range("続柄表").Value
   Controls("Combo家族続柄_" & i).List = .Range("続柄表").Value
   Controls("Combo家族元号_" & i).List = .Range("元号表").Value
   Controls("Combo家族生年_" & i).List = .Range("年数表").Value
   Controls("Combo家族生月_" & i).List = .Range("月表").Value
   Controls("Combo家族生日_" & i).List = .Range("日表").Value
   Controls("Combo寡婦別_" & i).List = .Range("寡婦別表").Value
   Controls("Combo障害別_" & i).List = .Range("障害別表").Value
   Controls("Combo同居別_" & i).List = .Range("同居別居表").Value
  End With
 Next

 spin移動.Max = レコード数取得 + 1

 Set TBL(1) = Combo社員ID
 
 For i = 1 To 6
  If i > 1 Then
   Set TBL(64 + i * 11) = Controls("Text家族氏名_" & i)
  End If
  Set TBL(65 + i * 11) = Controls("Combo家族続柄_" & i)
  Set TBL(66 + i * 11) = Controls("Combo家族元号_" & i)
  Set TBL(67 + i * 11) = Controls("Combo家族生年_" & i)
  Set TBL(68 + i * 11) = Controls("Combo家族生月_" & i)
  Set TBL(69 + i * 11) = Controls("Combo家族生日_" & i)
  Set TBL(70 + i * 11) = Controls("Text特定別_" & i)
  Set TBL(71 + i * 11) = Controls("Combo同居別_" & i)
  Set TBL(72 + i * 11) = Controls("Combo寡婦別_" & i)
  Set TBL(73 + i * 11) = Controls("Combo障害別_" & i)
  Set TBL(74 + i * 11) = Controls("Text家族控除額_" & i)
 Next
 
 Set データ範囲 = Worksheets("年調DATA").Range("A1").CurrentRegion
 If データ範囲.Columns.Count <> 1 Then
  データ表示 2
 End If
End Sub

数多くのコントロールを持つUserFormを再現させるのが、少々面倒だったので、
再現検証はしていません。

【67791】Re:もっと簡単にできないでしょうか?
発言  UO3  - 11/1/8(土) 17:42 -

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

よく読んでいないので的外れかもしれませんが。

・1組のコントロールがあり、それがフォーム上に6組あるような場合は
 TabStripが扱いやすいと思います。よく似たコントロールでMultiPageがありますが
 後者はページ毎に独立したコントロールを配置しますので、結局数多くのコントロールと
 なりますが、TabStripでは、1組分のコントロールだけでOKですから、今回の場合には
 適していると思われます。
 コンボボックスへのリスト設定も1組分だけで済みます。
 1組分のコントロールのAfterUpdateイベントあたりで、その内容を、その時の
 TabstripのValueに関連づけて、それぞれの変数域に格納します。

・6組分の情報を格納する変数域については Private Type による定義と、それを
 1から6までの要素を持つ1次元配列をTypeで規定した名前で宣言して使うのが便利だと思います。

 

【67798】Re:もっと簡単にできないでしょうか?
発言  bakadeus E-MAIL  - 11/1/10(月) 14:16 -

引用なし
パスワード
   ▼UO3 さん:
>▼bakadeus さん:
>
>よく読んでいないので的外れかもしれませんが。
>
>・1組のコントロールがあり、それがフォーム上に6組あるような場合は
> TabStripが扱いやすいと思います。よく似たコントロールでMultiPageがありますが
> 後者はページ毎に独立したコントロールを配置しますので、結局数多くのコントロールと
> なりますが、TabStripでは、1組分のコントロールだけでOKですから、今回の場合には
> 適していると思われます。
> コンボボックスへのリスト設定も1組分だけで済みます。
> 1組分のコントロールのAfterUpdateイベントあたりで、その内容を、その時の
> TabstripのValueに関連づけて、それぞれの変数域に格納します。
>
>・6組分の情報を格納する変数域については Private Type による定義と、それを
> 1から6までの要素を持つ1次元配列をTypeで規定した名前で宣言して使うのが便利だと思います。
>
ご指摘いただいていることが、VBA低レベルの私にはいまひとつ理解できません。
別のプログラムでTabStripを使ったことはありますが、いずれにしてもどのようにコードを記述すればよいかわかりません。
くわしく教えていただけますか?

ちなみに、MultiPageは、年調DATA入力formにMultiPage「本人情報」「家族情報」「生命保険料等情報」「税情報」の4ページを設定し、この6人分の扶養家族入力は、「家族情報」ページにひとりづつフレームを利用して入力しています。

【67799】Re:もっと簡単にできないでしょうか?
発言  bakadeus E-MAIL  - 11/1/10(月) 14:40 -

引用なし
パスワード
   ▼かみちゃん さん:
早速のご教示ありがとうございます。
返事が遅れて申し訳ありません。

ご教示いただいたコードを試そうと思っているのですが、その変数定義に関係した各扶養家族の計算式等のコードを下記のとおり記述しています。
ご教示いただいたコードにした場合、下記のコードをどう修正すればよいのでしょうか?

以下が一人分の関係コードです。
2人目以降も「●●●●● 一人目扶養家族控除額算出」以下を「_1」が「_2」「_3」・・・「_6」としているだけで、その他の構文は全く同じです。


'●●●●● 一人目扶養家族控除額算出

Private Sub 一人目扶養家族控除額算出()

基礎控除_1算出
特定扶養控除_1算出
同居加算額_1算出
寡婦加算額_1算出
障害者加算額_1算出
Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1
家族控除額総計計算
扶養控除額総計算出

End Sub
'/////1.氏名に入力された場合、基礎控除額を計上
Private Sub 基礎控除_1算出()

If Text家族氏名_1.Value = "" Then
  huyou_1 = 0

Else
  huyou_1 = kiso

End If

Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1
家族控除額総計計算
扶養控除額総計算出

End Sub

'/////2.生年月日から特定扶養者か老人かを判定し、特定扶養控除額又は老人扶養控除額を算出する
Private Sub 特定又は老人判定_1()

Dim m1 As Date
On Error Resume Next
m1 = Range("扶養控除!H11").Value
If Err.Number Then
On Error GoTo 0
m1 = DateValue(Replace(Range("扶養控除!H11").Value, ".", "/"))
Range("扶養控除!H11").Value = m1
End If
On Error GoTo 0

Dim mybirthday As Date
mybirthday = DateValue(Combo家族元号_1.Value & Trim(Combo家族生年_1.Value) & "/" & Trim(Combo家族生月_1.Value) & "/" & Trim(Combo家族生日_1.Value))

'MsgBox mybirthday

If mybirthday <= Range("扶養控除!g9").Value Then
Text特定別_1.Value = "老人"

ElseIf mybirthday >= Range("扶養控除!g11").Value And mybirthday <= Range("扶養控除!h11").Value Then
 Text特定別_1.Value = "特定"

Else
 Text特定別_1.Value = "一般"

End If

特定扶養控除_1算出

End Sub
Private Sub 特定扶養控除_1算出()

If Text特定別_1.Value = "老人" Then
tokutei_1 = kasan_7

ElseIf Text特定別_1.Value = "特定" Then

tokutei_1 = kasan_6

Else
 Text特定別_1.Value = "一般"
tokutei_1 = 0

End If

Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1

家族控除額総計計算
扶養控除額総計算出

End Sub

'/////3.同居別居別を判定し、老親の場合、同居加算額を算出する
Private Sub 同居加算額_1算出()

If Combo同居別_1.Value = "同居" And Text特定別_1.Value = "老人" Then
  doukyo_1 = kasan_8

Else

  doukyo_1 = 0

End If

Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1
家族控除額総計計算
扶養控除額総計算出
End Sub
'/////4.寡婦別欄に入力された場合、寡婦控除額を判定
Private Sub 寡婦加算額_1算出()

kahu_1 = Combo寡婦別_1.Value

  Select Case kahu_1
    
    Case "寡婦"
      kahu_kouzyo_1 = kasan_5
    

    Case "寡夫"
      kahu_kouzyo_1 = kasan_5
      
    Case Else
      kahu_kouzyo_1 = 0
      
  End Select

Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1
家族控除額総計計算
扶養控除額総計算出
End Sub
'/////5.障害別欄に入力された場合、障害控除額を判定
Private Sub 障害者加算額_1算出()

Dim syougai_1 As Variant
syougai_1 = Combo障害別_1.Value

  Select Case Combo障害別_1.Value
    
    Case "特別"
      syougai_kouzyo_1 = kasan_2

     Case "同居特別"
      syougai_kouzyo_1 = kasan_1

    Case "一般"
      syougai_kouzyo_1 = kasan_3

    Case Else
      syougai_kouzyo_1 = 0

  End Select
                     
Text家族控除額_1.Value = huyou_1 + tokutei_1 + doukyo_1 + kahu_kouzyo_1 + syougai_kouzyo_1
家族控除額総計計算
扶養控除額総計算出
End Sub


Private Sub Combo寡婦別_1_Change()

寡婦加算額_1算出

End Sub

Private Sub Combo障害別_1_Change()

障害者加算額_1算出

End Sub

Private Sub Combo同居別_1_Change()

同居加算額_1算出

End Sub
Private Sub Text家族氏名_1_Change()

基礎控除_1算出

End Sub


Private Sub Combo家族生日_1_afterupdate()
  
  If Combo家族生年_1.Value <> "" And Combo家族生月_1.Value <> "" Then
  
特定又は老人判定_1
'特定扶養控除_1算出
  
  Else: Exit Sub
  
  End If
  
End Sub

【67800】Re:もっと簡単にできないでしょうか?
発言  neptune  - 11/1/10(月) 14:58 -

引用なし
パスワード
   ▼bakadeus さん:
横から失礼

>ご指摘いただいていることが、VBA低レベルの私にはいまひとつ理解できません。
>別のプログラムでTabStripを使ったことはありますが、いずれにしてもどのようにコードを記述すればよいかわかりません。
ご自分でそう感じておられるなら、なおの事ご自分で調べる事が重要な意味を持ちます。

googleで「TabStrip 使い方」をキーワードに検索すれば
1番目に簡単な解説(VB5ですけど、同じ)、2番目に↓がヒットします。
ハウツー解説: ユーザー フォームで、タブ ストリップ (TabStrip)
コントロールにはタブ ストリップ (TabStrip) コントロールのコントロールを
使用するには
ht tp://support.microsoft.com/kb/155009/ja

ちなみに私もUO3 さんのご指摘には大いに納得ですし、1つのコンテナを複数の
タブに使いまわす事は無駄にuserformを重くしなくて済みます。

【67804】Re:もっと簡単にできないでしょうか?
発言  UO3  - 11/1/10(月) 18:28 -

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

これもあくまで、サンプルです。

新規ブックでユーザーフォームを作成し、タブ(ページ)が3つのTabStrip1とCommandButton1を配置してください。
RabStrip1の上にはTextBox1,TextBox2,TextBox3を置いてください。

フォームを表示し、各ページのTextBox1,2,3の、ページ毎に異なる値を入れてみてください。
なお、ページ上のTextBoxに値を入力した後、別のページを選択する場合は、必ずEnterで入力を確定させてください。

コマンドボタンをクリックすると3ページのそれぞれのテキストボックスに入力された値を表示します。

今回のテーマに関連づけるとすれば3人分、それぞれ項目が3つあるケースです。

【標準モジュール】

Public Type myData
  data1 As String
  data2 As String
  data3 As String
End Type

Public arrayF(1 To 3) As myData

【ユーザーフォームモジュール】

Dim skip As Boolean

Private Sub UserForm_Initialize()
  Call TextEdit
End Sub

Private Sub TabStrip1_Change()
  Call TextEdit
End Sub

Private Sub TextBox1_afterupdate()
  If Not skip Then arrayF(TabStrip1.Value + 1).data1 = TextBox1.Value
End Sub

Private Sub TextBox2_afterupdate()
  If Not skip Then arrayF(TabStrip1.Value + 1).data2 = TextBox2.Value
End Sub

Private Sub TextBox3_afterupdate()
  If Not skip Then arrayF(TabStrip1.Value + 1).data3 = TextBox3.Value
End Sub

Private Sub CommandButton1_Click()
  Dim i As Long
  For i = LBound(arrayF) To UBound(arrayF)
    MsgBox i & "番目のページの値は" & vbLf & _
        arrayF(i).data1 & vbLf & arrayF(i).data2 & vbLf & arrayF(i).data3
  Next
End Sub

Private Sub TextEdit()
  skip = True
  TextBox1.Value = arrayF(TabStrip1.Value + 1).data1
  TextBox2.Value = arrayF(TabStrip1.Value + 1).data2
  TextBox3.Value = arrayF(TabStrip1.Value + 1).data3
  skip = False
End Sub

【67908】Re:もっと簡単にできないでしょうか?
お礼  bakadeus E-MAIL  - 11/1/15(土) 17:46 -

引用なし
パスワード
   返事が遅くなり申し訳ありません。
ご教示いただいたsampleを試してみて、自分のFormに合うようにtryしてみます。
不明なことがあればまた再質問させていただきます。
ありがとうございました。

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