Excel VBA質問箱 IV

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

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


6290 / 13644 ツリー ←次へ | 前へ→

【45964】シート上に貼り付けた、テキストボックスの計算 きち 07/1/19(金) 16:37 質問[未読]
【45965】Re:シート上に貼り付けた、テキストボック... りん 07/1/19(金) 17:53 回答[未読]
【45969】Re:シート上に貼り付けた、テキストボック... きち 07/1/19(金) 21:15 質問[未読]
【45971】Re:シート上に貼り付けた、テキストボック... neptune 07/1/19(金) 22:57 発言[未読]
【46011】Re:シート上に貼り付けた、テキストボック... きち 07/1/21(日) 12:46 質問[未読]
【46012】Re:ユーザーフォームに変更、テキストボッ... きち 07/1/21(日) 12:54 質問[未読]
【46074】Re:ユーザーフォームに変更、テキストボッ... きち 07/1/22(月) 13:56 お礼[未読]
【46081】Re:シート上に貼り付けた、テキストボック... りん@とおりすがり 07/1/22(月) 15:53 回答[未読]
【46115】Re:シート上に貼り付けた、テキストボック... きち 07/1/23(火) 10:49 質問[未読]
【46118】Re:シート上に貼り付けた、テキストボック... りん@とおりすがり 07/1/23(火) 11:09 回答[未読]
【46130】Re:シート上に貼り付けた、テキストボック... きち 07/1/23(火) 17:46 質問[未読]
【46147】Re:シート上に貼り付けた、テキストボック... りん@とおりすがり 07/1/24(水) 12:56 発言[未読]
【46155】Re:シート上に貼り付けた、テキストボック... きち 07/1/24(水) 20:00 お礼[未読]

【45964】シート上に貼り付けた、テキストボックス...
質問  きち  - 07/1/19(金) 16:37 -

引用なし
パスワード
   はじめて、質問させていただきます。初心者です。宜しくお願い致します。
シート上にテキストボックスを貼り付けています。
基準となる数値を入力するTextBox100(変化する数値)、
TextBox200、TextBox201、TextBox300、TextBox301、(全て毎回変化します)があります。
他に、TextBox1〜15まで貼り付けてありますが、TextBox3、8、13に
毎回変わる数値が入力されます。
TextBox3、8、13が、TextBox100+TextBox300(もしくはTextBox301)
以上、TextBox100+TextBox200(もしくはTextBox201)以下なら
TextBox5、10、15に"○"
それ以外なら"×"と。
ボタン1を押す度に計算し、表示させてみたいのです。
TextBox3の結果はTextBox5へ
TextBox8の結果はTextBox10へ
TextBox13の結果はTextBox15へ表示

何かごちゃごちゃしててすみません。
考えていたらパニックになってしまいました。
どなたかお返事頂けませんでしょうか?

【45965】Re:シート上に貼り付けた、テキストボッ...
回答  りん E-MAIL  - 07/1/19(金) 17:53 -

引用なし
パスワード
   きち さん、こんばんわ。

>TextBox3、8、13が、TextBox100+TextBox300(もしくはTextBox301)
>以上、TextBox100+TextBox200(もしくはTextBox201)以下なら

>TextBox5、10、15に"○"
>それ以外なら"×"と。
>ボタン1を押す度に計算し、表示させてみたいのです。

シート上のTextBoxが、コントロールツールボックスから配置したものならば、値はOLEObjects("名前").Object.Valueでやりとりができます。
TextBox100+TextBox300(もしくはTextBox301)のもしくはの部分の判定条件がわからなかったので、単純にT100+T300以上、T100+T200以下で分岐しています。

Private Sub CommandButton1_Click()
  Dim II As Integer, dt1 As Double, dt2 As Double, aa As String
  With Application.ActiveSheet
   dt1 = Val(.OLEObjects("TextBox100").Object.Value) + Val(.OLEObjects("TextBox300").Object.Value) '以上
   dt2 = Val(.OLEObjects("TextBox100").Object.Value) + Val(.OLEObjects("TextBox200").Object.Value) '以下
   For II = 1 To 3
     '分岐は3、5、8
     With .OLEObjects("TextBox" & (II * 5 - 2)).Object
      If .Value >= dt1 And .Value <= dt2 Then aa = "○" Else aa = "×"
     End With
     '結果は5、10、15
     .OLEObjects("TextBox" & II * 5).Object.Value = aa
   Next
  End With
End Sub

こんな感じですが、ボタン1とかいてあるので、フォームの方ぽいかなあ。

【45969】Re:シート上に貼り付けた、テキストボッ...
質問  きち  - 07/1/19(金) 21:15 -

引用なし
パスワード
   ▼りん さん、早々ご返信ありがとうございます。

>こんな感じですが、ボタン1とかいてあるので、フォームの方ぽい
フォームではなかったです。CommandButton1でOKでした。

私の表記違いの箇所がありました<(__)>
TextBox100+TextBox300(もしくはTextBox301)
以下、TextBox100-TextBox200(もしくはTextBox201)以上の間違いでした。


>それから、※(もしくはTextBox301)(もしくはTextBox201)の意味ですが。

☆通常はT300とT200で処理したいと思いますが、たまにT100+T301以下、T100+T300以上で計算したい時にそのテキストボックスを使用したいと思います。T300とT301に数値が入っている場合は、T200とT201には何も入りません。
☆その代わり、T100-T200以下、T100-T201以上の場合もあり、その時はT300とT301には何も入りません。

それと、T5〜T15の3箇所全てに○×が入るようになっていますが、これをT3〜T8の数値が入っている箇所のみ入れることは出来るのでしょうか?それから出来れば、T3、T8、T13は数値以外の文字も入るかもしれません。そういうときの対処など出来ますでしょうか?
例えば、文字が入った時はT5、T10、T15の各箇所に"---"を入れるみたいなことは・・・

面倒な質問ばかりして本当にすみませんが、宜しくお願い致します。

【45971】Re:シート上に貼り付けた、テキストボッ...
発言  neptune  - 07/1/19(金) 22:57 -

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

横から失礼します。
シート上に何個のTextBoxを貼り付けているのでしょうか?
もし、数10個を超えるようなら、ExcelやWindowsの限界に
挑戦しているようなものです。

仕様を考え直す事をお勧めします。

【46011】Re:シート上に貼り付けた、テキストボッ...
質問  きち  - 07/1/21(日) 12:46 -

引用なし
パスワード
   ▼neptune さん
お返事有難うございます。
そうなんですか、知りませんでした。10個以上あるので仕様を見直しました。
やっているうちに、どんどん増えていってしまったので・・・。

りんさんが提示して下さったのは、又他で使用させて頂こうと思います。
すみませんでした<(_ _)>

仕様を見直した場合、ユーザーフォームに変更した場合は大丈夫なんですよね??

ユーザーフォームにした場合に、同じような計算をしてみたいのですが。
ユーザーフォームの表示はボタンか、ブックを開いた時点で表示されるようにと考えています。それは、どちらでもいいとして。。

そこで、以前はボタンを押して計算という感じでしたが、T3、8、13・・・に数値(文字)を入力した時点で、"○"、"×"、"---"がT5、10、15に表示し、T3、8、13・・・のデーターを消しても同じように"○"、"×"、"---"が消えるようにしたいのですが。それを、数値(文字)が入っているテキストボックスまで計算したいです。

【46012】Re:ユーザーフォームに変更、テキストボ...
質問  きち  - 07/1/21(日) 12:54 -

引用なし
パスワード
   題名変更しました。
>▼neptune さん
>お返事有難うございます。
>そうなんですか、知りませんでした。10個以上あるので仕様を見直しました。
>やっているうちに、どんどん増えていってしまったので・・・。
>
>りんさんが提示して下さったのは、又他で使用させて頂こうと思います。
>すみませんでした<(_ _)>
>
>仕様を見直した場合、ユーザーフォームに変更した場合は大丈夫なんですよね??
>
>ユーザーフォームにした場合に、同じような計算をしてみたいのですが。
>ユーザーフォームの表示はボタンか、ブックを開いた時点で表示されるようにと考えています。それは、どちらでもいいとして。。
>
>そこで、以前はボタンを押して計算という感じでしたが、T3、8、13・・・に数値(文字)を入力した時点で、"○"、"×"、"---"がT5、10、15に表示し、T3、8、13・・・のデーターを消しても同じように"○"、"×"、"---"が消えるようにしたいのですが。それを、数値(文字)が入っているテキストボックスまで計算したいです。

【46074】Re:ユーザーフォームに変更、テキストボ...
お礼  きち  - 07/1/22(月) 13:56 -

引用なし
パスワード
   仕様等変更致しましたので、改めて質問させていただきます。
ありがとうございました。

【46081】Re:シート上に貼り付けた、テキストボッ...
回答  りん@とおりすがり  - 07/1/22(月) 15:53 -

引用なし
パスワード
   きち さん、こんにちわ。

>私の表記違いの箇所がありました<(__)>
>TextBox100+TextBox300(もしくはTextBox301)
>以下、TextBox100-TextBox200(もしくはTextBox201)以上の間違いでした。
>☆通常はT300とT200で処理したいと思いますが、たまにT100+T301以下、T100+T300以上で計算したい時にそのテキストボックスを使用したいと思います。T300とT301に数値が入っている場合は、T200とT201には何も入りません。
>☆その代わり、T100-T200以下、T100-T201以上の場合もあり、その時はT300とT301には何も入りません。

せっかくなので、貼っておきます。

Private Sub CommandButton1_Click()
  Dim II As Integer
  Dim tdt(1 To 3, 0 To 1) As String, a1 As String, a2 As String
  Dim ldt As Variant, hdt As Variant
  'テキストボックスの文字列格納
  With Application.ActiveSheet
   tdt(1, 0) = .OLEObjects("TextBox100").Object.Value
   tdt(2, 0) = .OLEObjects("TextBox200").Object.Value
   tdt(2, 1) = .OLEObjects("TextBox201").Object.Value
   tdt(3, 0) = .OLEObjects("TextBox300").Object.Value
   tdt(3, 1) = .OLEObjects("TextBox301").Object.Value
  End With
  '条件決定
  If Trim(tdt(2, 0) & tdt(2, 1)) = "" Then
   '200,201が空白だったら
   'T100 + T301以下、T100 + T300以上
   hdt = Val(tdt(1, 0)) + Val(tdt(3, 1))
   ldt = Val(tdt(1, 0)) + Val(tdt(3, 0))
  ElseIf Trim(tdt(3, 0) & tdt(3, 1)) = "" Then
   '300,301が空白だったら
   'T100 - T200以下、T100 - T201以上
   hdt = Val(tdt(1, 0)) - Val(tdt(2, 0))
   ldt = Val(tdt(1, 0)) - Val(tdt(2, 1))
  Else
   '上記以外は通常
   'T100 + T300以下、T100 - T200以上
   hdt = Val(tdt(1, 0)) + Val(tdt(3, 0))
   ldt = Val(tdt(1, 0)) - Val(tdt(2, 0))
  End If
  '
  With Application.ActiveSheet
   For II = 1 To 3
     a1 = .OLEObjects("TextBox" & II * 5 - 2).Object.Value
     '分岐
     If a1 = "" Then
      a2 = "---" '何も入ってなかった
     ElseIf IsNumeric(aa) Then
      If Val(aa) >= ldt And Val(aa) <= hdt Then
        a2 = "○"
      Else
        a2 = "×"
      End If
     Else
      a2 = "---" '数値じゃなかった
     End If
     '結果
     .OLEObjects("TextBox" & II * 5).Object = a2
   Next
  End With
  '終了
  Erase tdt
End Sub
こんな感じです。
ただ、シート上にテキストボックスをのせるなくても、セルを使えばいいのでは?と思うのですが。

【46115】Re:シート上に貼り付けた、テキストボッ...
質問  きち  - 07/1/23(火) 10:49 -

引用なし
パスワード
   ▼りん@とおりすがり さん

おはようございます。
コード有難うございました。
昨日から、試させてもらっているのですが、思うような結果が得られませんでした。
単純に、不等号の違いかと思い変更したりしているのですが、数値がそれ以内に入っているのに、×になったりします。コードを拝見しているのですが、これといって違うところが発見出来ずにいます。オブジェクト名もちゃんと合っていたのですが・・・。

【46118】Re:シート上に貼り付けた、テキストボッ...
回答  りん@とおりすがり  - 07/1/23(火) 11:09 -

引用なし
パスワード
   きち さん、こんにちわ。

>コード有難うございました。
>昨日から、試させてもらっているのですが、思うような結果が得られませんでした。

すみません、変数名を変更したのに修正するのを忘れてました。
aaとなっている部分を全部a1に変更してください。

If a1 = "" Then
 a2 = "---" '何も入ってなかった
ElseIf IsNumeric(aa) Then
 If Val(aa) >= ldt And Val(aa) <= hdt Then
    ↓
If a1 = "" Then
 a2 = "---" '何も入ってなかった
ElseIf IsNumeric(<b>a1</b>) Then
 If Val(a1) >= ldt And Val(a1) <= hdt Then

ごめんなさい。

【46130】Re:シート上に貼り付けた、テキストボッ...
質問  きち  - 07/1/23(火) 17:46 -

引用なし
パスワード
   ▼りん@とおりすがり さん:
ありがとうございました。ちゃんと認識し動作しました。
あと、ボタンを押したらTextBox100も"---"になるのですが、入力したままの数値を残しておけないのでしょうか?それから、何も入っていないところまで"---"になりますが、数値、文字が入っていない箇所は空白にしておきたいのですが無理ですか?
--------------------------------------------------------------------
それから、今ユーザーフォーム用にも同じように作りたいのですが、りんさんのを見様見真似で変更したのですが、やはりダメでした(TT)。すごい無茶苦茶になってしまい恥ずかしいのですが、どこを手直しすればまともに動くのか、お教え頂けたらと思います。(多分、全部おかしいのだろうけど・・・)

※ユーザーフォーム用では仕様を変更してます。
MultiPage1にT10〜T34まで順番に貼ってあり、同じようにT12、17、22、27、32に数値、文字(空白もあり)が入り、それ以内であれば、T14、19、24、29、34に"○"、"×"、"---"、"空白"、を入れるという事ですが、MultiPage1〜4まであり同じような動作を各ページさせるにはどうしたらよいのでしょうか?
出来れば、下記はボタン11を押せば動作するようになってますが、T12、17、・・・に入力した時点で計算され、表示させるというのは無理でしょうか?


Private Sub CommandButton11_Click()
  Dim II As Integer
  Dim a1 As String, a2 As String
  Dim ldt As Variant, hdt As Variant
  'テキストボックスの文字列格納
 
  '条件決定
  If Trim(TextBox7.Value) & (TextBox8.Value) = "" Then
   'T7,T8が空白だったら
   'T4 + T5以下、T4 + T6以上
   hdt = Val(TextBox4.Value) + Val(TextBox5.Value)
   ldt = Val(TextBox4.Value) + Val(TextBox6.Value)
  ElseIf Trim(TextBox6.Value) & (TextBox5.Value) = "" Then
   'T6,T5が空白だったら
   'T4 - T5以下、T4 - T6以上
   hdt = Val(TextBox4.Value) - Val(TextBox7.Value)
   ldt = Val(TextBox4.Value) - Val(TextBox8.Value)
  Else
   '上記以外は通常
   'T4 + T6以下、T4 - T7以上
   hdt = Val(TextBox4.Value) + Val(TextBox6.Value)
   ldt = Val(TextBox4.Value) - Val(TextBox7.Value)
  End If
  '
  With Application
   For II = 1 To 20
    a1 = TextBox12.Value
    .Val(a1 & II * 5 - 2).Value
   
     '分岐
     If a1 = "" Then
      a2 = "---" '何も入ってなかった
     ElseIf IsNumeric(a1) Then
      If Val(a1) >= ldt And Val(a1) <= hdt Then
        a2 = "○"
      Else
        a2 = "×"
      End If
     Else
      a2 = "---" '数値じゃなかった
     End If
     '結果
     .Val("TextBox14" & II * 5).Value = a2
   Next
  End With
  '終了
 

End Sub

【46147】Re:シート上に貼り付けた、テキストボッ...
発言  りん@とおりすがり  - 07/1/24(水) 12:56 -

引用なし
パスワード
   きち さん、こんにちわ。

>あと、ボタンを押したらTextBox100も"---"になるのですが、入力したままの数値を残しておけないのでしょうか?
↑とりあえず、こっちだけ。

きちさんの例を見ると、私の例は3回でしたが実際は20回ループをまわしているようで、20回目にはTextBox98(20*5-2=98)の内容で分岐し、TextBox100(20*5=100)に結果を書き込むことになるので、当然消えます(分岐後の値で上書きされます)。

【46155】Re:シート上に貼り付けた、テキストボッ...
お礼  きち  - 07/1/24(水) 20:00 -

引用なし
パスワード
   ▼りん@とおりすがり さん:

ほんとですね。直りました〜。
有難うございました。
ユーザーフォーム分も頑張ってチャンレンジしてみます。
又何かあったら、宜しくお願い致します。

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