Excel VBA質問箱 IV

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

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


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

【14506】コンボボックスの初期セット他 佐藤123 04/5/31(月) 12:05 質問[未読]
【14508】Re:コンボボックスの初期セット他 Asaki 04/5/31(月) 15:11 回答[未読]
【14510】Re:コンボボックスの初期セット他 佐藤123 04/5/31(月) 16:11 質問[未読]
【14511】Re:コンボボックスの初期セット他 Asaki 04/5/31(月) 16:37 回答[未読]
【14519】Re:コンボボックスの初期セット他 佐藤123 04/5/31(月) 18:43 お礼[未読]
【14518】Re:コンボボックスの初期セット他 ichinose 04/5/31(月) 18:01 回答[未読]
【14520】Re:コンボボックスの初期セット他 佐藤123 04/5/31(月) 18:47 お礼[未読]

【14506】コンボボックスの初期セット他
質問  佐藤123  - 04/5/31(月) 12:05 -

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

コンボボクッス(以下CBOX)の選択肢の内容を初期セットしたいのですが、
AUTO_OPENで定義してもセットできませんでした。
どこに定義すればよいのでしょうか?
CBOXはEXCELのシートに直に置いてあります。
CBOXの選択肢の内容は別シートにDB的に記述してあります。

もう一つ、CBOXが3つあって、
CBOX1で選択された内容によってCBOX2の選択肢の内容を決定。
さらにCBOX2で選択された内容によってCBOX3の選択肢の内容を決定させたいのです。

例)
 OBJECTはSHEET1に存在。(SHEET1でのみの作業です)

 DATA:SHEET2に存在(隠しシート)
    CBOX1用(数値はA列、名称はB列、2行目から)
     1:ご飯 2:パン 3:麺
    CBOX2用(数値はC列とD列、名称はE列、2行目から)
     1:1:こしひかり 1:2:あきたこまち
     2:1:食パン 2:2:ロールパン 2:3:あんぱん
     3:1:ラーメン 3:2:焼きそば 3:3:そうめん
    CBOX3用(数値はF列、G列、H列、名称はI列、2行目から)
     ・
     ・
     3:1:1:塩 3:1:2味噌 3:1:3:醤油

 処理:CBOX1で麺が選択されたら、CBOX2には「ラーメン、焼きそば、そうめん」
    が選択可能。
    CBOX2でラーメンが選択されたら、「塩、味噌、醤油」が選択可能。

長くなってしまいましたが、よろしくお願い致します。

【14508】Re:コンボボックスの初期セット他
回答  Asaki  - 04/5/31(月) 15:11 -

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

>AUTO_OPENで定義してもセットできませんでした。
どんなコードをお書きになりましたか?
また、セットできないだけでしたか?エラーは出ませんでしたか?

これ、入力規則でもいけそうですが、コンボボックスでないとダメですか?

【14510】Re:コンボボックスの初期セット他
質問  佐藤123  - 04/5/31(月) 16:11 -

引用なし
パスワード
   早速のお返事ありがとうございます。

>>AUTO_OPENで定義してもセットできませんでした。
>どんなコードをお書きになりましたか?
>また、セットできないだけでしたか?エラーは出ませんでしたか?
 最初、ボタンに定義してあったマクロではうまく動いたのですが、
 いちいちボタンを押さなければならないのは面倒だと思い、
 ボタンのマクロをAUTO_OPEN()にそのまま、
  CBOX1.ADDITEM
  CBOX1.LIST(1)="ご飯"
  CBOX1.ADDITEM
  CBOX1.LIST(1)="パン"
  CBOX1.ADDITEM
  CBOX1.LIST(1)="めん"
   ・
   ・

 と記述してみました。
 特にエラーは出ず、しかしなにもコンボボックスに入っていませんでした。

>これ、入力規則でもいけそうですが、コンボボックスでないとダメですか?
 こちらで用意したものの中から選んでもらいたい(使用者に入力をさせたくない)
 ので、使うのはコンボボックスかな?と・・。
 コンボボックス、リストボックスぐらいしか思い浮かばなかったです・・。(^^;

【14511】Re:コンボボックスの初期セット他
回答  Asaki  - 04/5/31(月) 16:37 -

引用なし
パスワード
   例えば、↓のような感じではいかがですか?
With Worksheets("Sheet1").ComboBox1
  .AddItem Worksheets("Sheet2").Cells(2, 2).Value
  .AddItem Worksheets("Sheet2").Cells(3, 2).Value
  .AddItem Worksheets("Sheet2").Cells(4, 2).Value
End With

また、↓これでも良いような気がします。
Worksheets("Sheet1").ComboBox1.ListFillRange = "Sheet2!B2:B4"


入力規則の場合、↓この辺りが参考になるかと。
http://homepage1.nifty.com/kenzo30/ex_kisopoint/onepoint_sonota3.htm

【14518】Re:コンボボックスの初期セット他
回答  ichinose  - 04/5/31(月) 18:01 -

引用なし
パスワード
   ▼佐藤123 さん、Asakiさん、こんばんは。
コンボボックスでの例です。

コンボボックスの選択肢データは、Sheet2にあるのでしたね?

Sheet2
   A   B    C   D    E    F   G   H   I
 1
 2 1   ご飯    1   1   こしひかり  1    1   1  電気釜    
 3 2   パン    1   2   あきたこまち 1    1   2  しゃもじ    
 4 3   麺     2   1   食パン    1    2   1  ガス釜    
 5          2    2   ロールパン  1    2   2  高級しゃもじ    
 6          2    3   あんぱん   3    1   1  塩    
 7          3    1   ラーメン   3    1   2  味噌    
 8          3    2   焼きそば   3    1   3  醤油
 9          3    3   そうめん                    
こんなイメージでよろしいですか?

コードは、標準モジュールに
'==================================================================
Sub auto_open()
  With Worksheets("sheet2")
   Set rng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
   End With
  With Worksheets("sheet1").CBox1
   .Clear
   If rng.Row > 1 Then
     .List() = rng.Offset(0, 1).Value
     .ListIndex = -1
     End If
   End With
End Sub


コンボボックスがあるSheet1のモジュールに
'==================================================================
Private Sub CBox1_Change()
  With Worksheets("sheet2")
   Set rng = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp))
   add1 = rng.Address(, , , True)
   add2 = rng.Offset(0, 2).Address(, , , True)
   End With
  With CBox2
   .Clear
   If rng.Row > 1 Then
     .List() = Filter(Application.Evaluate( _
          "=transpose(if((" & add1 & "=" & _
          CBox1.ListIndex + 1 & ")*1=1," & _
          add2 & ",""0""))"), "0", False)
     End If
   End With
End Sub
'======================================================================
Private Sub CBox2_Change()
  With Worksheets("sheet2")
   Set rng = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp))
   add1 = rng.Address(, , , True)
   add2 = rng.Offset(0, 1).Address(, , , True)
   add3 = rng.Offset(0, 3).Address(, , , True)
   End With
  With CBox3
   .Clear
   If rng.Row > 1 Then
     .List() = Filter(Application.Evaluate( _
          "=transpose(if((" & add1 & "=" & _
          CBox1.ListIndex + 1 & ")*(" & _
          add2 & "=" & CBox2.ListIndex + 1 & ")=1," _
          & add3 & ",""0""))"), "0", False)
     End If
   End With
End Sub

私の方で確認したところ以上で動いていますが、
試してみて下さい。

【14519】Re:コンボボックスの初期セット他
お礼  佐藤123  - 04/5/31(月) 18:43 -

引用なし
パスワード
   教えて頂いたAddItemの方法は以前にも試して失敗していたのですが、
今回それでうまくいきました。(^^;
多分なにか微妙に間違っていたのですね。

入力規則に関しては、ちょっと使いづらいかな・・、と思ったので、
VLOOKUPじゃないですけど、コツコツ抽出することにします。
入力規則の使用は次回にチャレンジいたします。スミマセン。

ありがとうございました。

【14520】Re:コンボボックスの初期セット他
お礼  佐藤123  - 04/5/31(月) 18:47 -

引用なし
パスワード
   ichinose ご回答ありがとうございます。

今日はもう別な作業に着手してしまっているので、
明日改めて確認してみたいと思います。
ありがとうございました。

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