Excel VBA質問箱 IV

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

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


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

【40900】多数のテキストブックスに同じ処理 かじったばかり 06/7/25(火) 22:00 質問[未読]
【40903】Re:多数のテキストブックスに同じ処理 Kein 06/7/25(火) 22:51 発言[未読]
【40904】Re:多数のテキストブックスに同じ処理 かじったばかり 06/7/25(火) 23:16 質問[未読]
【40907】Re:多数のテキストブックスに同じ処理 jugg 06/7/26(水) 0:10 発言[未読]
【40909】Re:多数のテキストブックスに同じ処理 かじったばかり 06/7/26(水) 6:40 質問[未読]
【40910】Re:多数のテキストブックスに同じ処理 jugg 06/7/26(水) 7:16 発言[未読]
【40957】Re:多数のテキストブックスに同じ処理 かじったばかり 06/7/26(水) 19:17 お礼[未読]

【40900】多数のテキストブックスに同じ処理
質問  かじったばかり  - 06/7/25(火) 22:00 -

引用なし
パスワード
   いつも拝見し勉強させてもらっています。
過去にもあった質問だと思いますが
検索で引っかからないのでご教授ください。

ユーザーフォームに数十個のテキストボックスがあります。
4個(TextBox1〜4)で1グループ(フレーム)にしています。
そのグループで次のような入力規制を施していますが
同じ処理を何回も記述しなければなりません簡単にまとまらないでしょうか?

Private Sub TextBox4_Change()

If Val(TextBox2.Value) = 0 Then
      If Val(TextBox4.Value) > Val(TextBox1.Value) Then
        MsgBox "入力値確認して ”
      End If
    Else
       If Val(TextBox4.Value) > Val(TextBox3.Value) Then
        MsgBox "入力値確認して 多いですよ"
        TextBox4.Value = ""
      End If
End If
end sub

【40903】Re:多数のテキストブックスに同じ処理
発言  Kein  - 06/7/25(火) 22:51 -

引用なし
パスワード
   >数十個のテキストボックス
って、何の目的でそんなに多くのコントロールを配置するのか分かりませんが、
"いかにもプログラムを作ったぞー!"というような、見た目のかっこ良さにひかれて
やってるなら、止めた方がいいです。テキストボックスは数値の処理に向かないし、
そもそも基本的に、むやみにコントロールを増やすべきではありません。
メモリーの負担が大きくなりすぎて、動作が不安定になるだけですから。
ではどうすればいいかと言うと、ワークシートをユーザーフォームに見立てて、
決った位置のセルに入力すれば良いのです。シートをフォームのように見せる方法は、
枠線の非表示から始めて、背景の塗り潰しとか色付きの罫線を工夫するとか、
いろいろと"楽しみながら"やれば、ユーザーフォーム以上のりっぱなものが出来ます。
そうして出来たシートを、Visibleプロパティで表示・非表示を切り替え出来るように
マクロを組めば良いのです。是非、検討してみて下さい。

【40904】Re:多数のテキストブックスに同じ処理
質問  かじったばかり  - 06/7/25(火) 23:16 -

引用なし
パスワード
   ▼Kein さん:
こんばんは
>マクロを組めば良いのです。是非、検討してみて下さい。
確かにおっしゃるとおりです。
シートにて検討してみます。

ただ興味(向学的に)として題名のような処理を簡素化する方法
をご存知でしたらご教授ください。過去にあったような気がするので

【40907】Re:多数のテキストブックスに同じ処理
発言  jugg  - 06/7/26(水) 0:10 -

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

>ただ興味(向学的に)として題名のような処理を簡素化する方法
>をご存知でしたらご教授ください。過去にあったような気がするので

まず、TextBox名を下記のようにしたとします
フレーム1→(TextBox1_1 〜 TextBox4_1)
フレーム2→(TextBox1_2 〜 TextBox4_2)
フレーム3→(TextBox1_3 〜 TextBox4_3)
フレーム4→(TextBox1_4 〜 TextBox4_4)

あとは
For i = 1 to 4
  If Val(Me.Controls("TextBox2_" & i).Value) = 0 Then
    If Val(Me.Controls("TextBox4_" & i).Value) > _
             Val(Me.Controls("TextBox1_" & i).Value) Then
      MsgBox "入力値確認して ”
    End If
  Else
    If Val(Me.Controls("TextBox4_" & i).Value) > _
             Val(Me.Controls("TextBox3_" & i).Value) Then
      MsgBox "入力値確認して 多いですよ"
      Me.Controls("TextBox4_" & i).Value = ""
    End If
  End If
Next

この例は、ご提示のコードをなにも考えずに簡素化した例です。
基本的にはKeinさんの意見に賛成です。

【40909】Re:多数のテキストブックスに同じ処理
質問  かじったばかり  - 06/7/26(水) 6:40 -

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

おはようございます。
教えていただいた For 〜 Next
はわかったんですが ありがとうございます。

Private Sub TextBox4_Change()

のようなイベントのところは
どのように記述するのでしょうか
お手数ですがよろしくお願いします。


>あとは
>For i = 1 to 4
>  If Val(Me.Controls("TextBox2_" & i).Value) = 0 Then
>    If Val(Me.Controls("TextBox4_" & i).Value) > _
>             Val(Me.Controls("TextBox1_" & i).Value) Then
>      MsgBox "入力値確認して ”
>    End If
>  Else
>    If Val(Me.Controls("TextBox4_" & i).Value) > _
>             Val(Me.Controls("TextBox3_" & i).Value) Then
>      MsgBox "入力値確認して 多いですよ"
>      Me.Controls("TextBox4_" & i).Value = ""
>    End If
>  End If
>Next
>
>この例は、ご提示のコードをなにも考えずに簡素化した例です。
>基本的にはKeinさんの意見に賛成です。

【40910】Re:多数のテキストブックスに同じ処理
発言  jugg  - 06/7/26(水) 7:16 -

引用なし
パスワード
   ▼かじったばかり さん:

おはようございます
当初のご提示されたコードでの処理はChangeイベントを使用していますが
入力チェック等をする場合、Changeイベントは適切ではないと思います。
Changeイベントは、入力するたびにイベントが発生してしまいます。
例えば・・・
TextBoxに対して、1234と入力すると4回イベントが走ります

入力チェックをするタイミングを再度検討してはいかがでしょうか?
次のアクションでのボタンを押した時など
そうであれば
Private Sub CommandButton1_Click()で済むとおもいます。

【40957】Re:多数のテキストブックスに同じ処理
お礼  かじったばかり  - 06/7/26(水) 19:17 -

引用なし
パスワード
   ▼jugg さん:
御礼遅くなしすみません。
おっしゃるとおりです。
又色々アドバイス下さい。

>▼かじったばかり さん:
>
>おはようございます
>当初のご提示されたコードでの処理はChangeイベントを使用していますが
>入力チェック等をする場合、Changeイベントは適切ではないと思います。
>Changeイベントは、入力するたびにイベントが発生してしまいます。
>例えば・・・
>TextBoxに対して、1234と入力すると4回イベントが走ります
>
>入力チェックをするタイミングを再度検討してはいかがでしょうか?
>次のアクションでのボタンを押した時など
>そうであれば
>Private Sub CommandButton1_Click()で済むとおもいます。

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