Excel VBA質問箱 IV

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

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


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

【36221】ある文字を選んだらユーザーフォームを表示するには? 真貴子 06/3/25(土) 12:02 質問[未読]
【36222】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 12:50 発言[未読]
【36224】Re:ある文字を選んだらユーザーフォームを... 真貴子 06/3/25(土) 13:39 発言[未読]
【36226】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 14:23 発言[未読]
【36227】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 14:24 発言[未読]
【36228】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 14:39 発言[未読]
【36229】Re:ある文字を選んだらユーザーフォームを... 真貴子 06/3/25(土) 15:02 発言[未読]
【36230】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 15:19 発言[未読]
【36231】Re:ある文字を選んだらユーザーフォームを... 真貴子 06/3/25(土) 15:27 発言[未読]
【36232】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 15:31 発言[未読]
【36233】Re:ある文字を選んだらユーザーフォームを... 真貴子 06/3/25(土) 15:45 お礼[未読]
【36236】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 15:51 発言[未読]
【36237】Re:ある文字を選んだらユーザーフォームを... 真貴子 06/3/25(土) 15:53 お礼[未読]
【36238】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 15:53 発言[未読]
【36239】Re:ある文字を選んだらユーザーフォームを... ぱっせんじゃー 06/3/25(土) 15:56 発言[未読]

【36221】ある文字を選んだらユーザーフォームを表...
質問  真貴子  - 06/3/25(土) 12:02 -

引用なし
パスワード
   いつもお世話になります。

下記のようなシートがあるとします。

   A   B   C   D   E
1  商品  金額         みかんの単価
2 りんご 500円          20円
3
4

A列にはリストボックスで選ぶようにしてます。
A列で、みかんを選ぶと自動でユーザーフォームが立ち上がり、テキストボックスが
表示され、個数を入力してもらい、E2と掛け算をし、B列に値を返すようにするには
どういったマクロを使うのでしょうか?
初めからセルに個数を入力するところがあればマクロを使わなくてもできるのでしょうが、仕様の関係で、入れることができません。

【36222】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 12:50 -

引用なし
パスワード
   E列の値はどこから出てくるのでしょう?

VlookUpなどでリストから参照しているのでしょうか?

あとは算数の問題ののように思います。

シートのチェンジイベントなどでTargetの行番号を取得し、
Cells(Target.Row,2).Value = Me.TextBox1.Value * Cells(Target.Row,5).Value
などのようにすればいいかと思います。

【36224】Re:ある文字を選んだらユーザーフォーム...
発言  真貴子  - 06/3/25(土) 13:39 -

引用なし
パスワード
   >E列の値はどこから出てくるのでしょう?
あらかじめ設定してあります。
>
>
>シートのチェンジイベントなどでTargetの行番号を取得し、
>Cells(Target.Row,2).Value = Me.TextBox1.Value * Cells(Target.Row,5).Value
>などのようにすればいいかと思います。
してみましたが、テキストボックスというよりもユーザーフォーム事体が出てこず、
エラーとなりました。その前後はどうしたらよろしいのでしょうか?
ちなみに私が考えたのは下のような感じです。
途中までですが、どうでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)

If Cells(Target.Row, 2).Value = "みかん" Then Exit Sub
UserForm1.Show
この後がわかりません;;

【36226】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 14:23 -

引用なし
パスワード
   >If Cells(Target.Row, 2).Value = "みかん" Then Exit Sub

これの意味は分かってかいてますか?

E列の値が"みかん"だったらその時点で終了、です。
ですので、その後の
>UserForm1.Show
は実行されません。

【36227】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 14:24 -

引用なし
パスワード
   間違いました。

>E列の値が"みかん"だったらその時点で終了、です。

B列の値が"みかん"だったらその時点で終了、
でした。失礼しました。

【36228】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 14:39 -

引用なし
パスワード
   よく分からないのですが、
A列で選択するのは"みかん"のみ
なのですか?

>>E列の値はどこから出てくるのでしょう?
>あらかじめ設定してあります。

これから推測すると、予めE列には"20円"
と記入されているように取れるのですが、
どうなのでしょう?

それだと、E列の値は"20円"と固定なので、
別に絵tキスとボックスでなくてもInputBox
でもいいような気がします。

テキストボックスにするのなら、

シートモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 2).Value = "みかん" Then Exit Sub
UserForm1.Show
End Sub

ユーザーフォームのテキストボックスのイベントか実行用の
コマンドボタンに

ActiveSheet.Cells(activecell.Row,2).Value = 20 * Me.TextBox1.Value

と記述すればいいかと思います。

【36229】Re:ある文字を選んだらユーザーフォーム...
発言  真貴子  - 06/3/25(土) 15:02 -

引用なし
パスワード
   質問の仕方が悪くて申し訳ありません。
A列にみかん、りんご、なしのリストボックスがA2:A10までありまして、
みかんとりんごを選んだ場合のみ実行させたいのです。
先ほどのコードを参考にさせてもらい
以下のマクロを実行してみました。計算結果は表示されますが、実行時エラー400
フォームは殊に表示されているので、モーダル表示することはできません。
と、言われるのですが、恐らく2〜5行目の記述の仕方が悪いんだと思います。
どこをどう治せばよいのでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 1).Value = "みかん" Then
UserForm1.Show
ElseIf Cells(Target.Row, 1).Value = "りんご" Then
UserForm1.Show
End If

End Sub
Private Sub CommandButton1_Click()
x = Range("E2").Value
ActiveSheet.Cells(ActiveCell.Row, 2).Value = x * Me.TextBox1.Value

End Sub

【36230】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 15:19 -

引用なし
パスワード
   >フォームは殊に表示されているので、モーダル表示することはできません。

既にユーザーフォームが表示されているのに、またユーザーフォームを表示
させようとしているのでは?

【36231】Re:ある文字を選んだらユーザーフォーム...
発言  真貴子  - 06/3/25(土) 15:27 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
>>フォームは殊に表示されているので、モーダル表示することはできません。
>
>既にユーザーフォームが表示されているのに、またユーザーフォームを表示
>させようとしているのでは?
私もそう思ったのですが、どこをそのように治したら良いかわかりませんので、
どうか教えて下さい。

【36232】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 15:31 -

引用なし
パスワード
   確かユーザーフォームに二重起動をチェックする方法が
あったように思います。
分かり次第レスします。

【36233】Re:ある文字を選んだらユーザーフォーム...
お礼  真貴子  - 06/3/25(土) 15:45 -

引用なし
パスワード
   コマンドボタンの最後にUnload Meと付けたらうまく動きました。
この度はまことにありがとうございました。
これが正しい記述かどうかは解りませんので、間違っていたらまた教えて下さませ。


Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 1).Value = "みかん" Then
UserForm1.Show
ElseIf Cells(Target.Row, 1).Value = "りんご" Then
UserForm1.Show
End If

End Sub
Private Sub CommandButton1_Click()
x = Range("E2").Value
ActiveSheet.Cells(ActiveCell.Row, 2).Value = x * Me.TextBox1.Value
Unload Me

End Sub

【36236】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 15:51 -

引用なし
パスワード
   Unloadはユーザーフォームを消し、メモリからも
消すときに使います。
↓でユーザーフォームの二重起動のチェックが出
来ます。

  If UserForms.Count = 0 Then
    UserForm1.Show 0
  Else
    MsgBox "ユーザーフォーム起動済み"
  End If

何回もユーザーフォームを使うときは、Unloadではなく、
Hide
でもいいと思います。
でもユーザーフォームを表示するときに
テキストボックスなどの値をまっさらにしたいときは、
やはり一度Unloadし、表示したいいときに再度Show、
でもいいかと思います。

【36237】Re:ある文字を選んだらユーザーフォーム...
お礼  真貴子  - 06/3/25(土) 15:53 -

引用なし
パスワード
   ぱっせんじゃー さん
他の方法まで教えていただいて本当にありがとうございました。

【36238】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 15:53 -

引用なし
パスワード
   補足です。↓はユーザーフォームが一つでも
開いていたら起動済み、と判定します。

特定のユーザーフォームの起動の有無、は
また違ってきます。

> If UserForms.Count = 0 Then
>   UserForm1.Show 0
> Else
>   MsgBox "ユーザーフォーム起動済み"
> End If

【36239】Re:ある文字を選んだらユーザーフォーム...
発言  ぱっせんじゃー  - 06/3/25(土) 15:56 -

引用なし
パスワード
   一応書いたコードをアップしておきます。
ちょっと回りくどい方法ですが。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim kudamono As String
Dim Myarray
Dim i As Long
Dim hantei As Boolean
If Intersect(Target, Columns("A")) Is Nothing Then Exit Sub
 kudamono = Cells(Target.Row, 1).Value
 Myarray = Array("りんご", "みかん")
  hantei = False
  For i = 0 To 1
  If kudamono = Myarray(i) Then hantei = True
  Next i
  If hantei = True Then
  If UserForms.Count = 0 Then
    UserForm1.Show 0
  Else
    MsgBox "ユーザーフォーム起動済み"
  End If
  End If
End Sub

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