プロが教える店舗&オフィスのセキュリティ対策術

1つのシートにコンボボックス(フォームコントロール)を2つ並べてあります。

 コンボボックス”ドロップ1”   コンボボックス”ドロップ2”
 【選択肢】             【選択肢】
 ・1回                ・A
 ・2回                ・B
 ・3回

とあります。それぞれのコンボボックスの選択肢は、別のシートに名前を定義して表示するようにしてあります。

その際、上の例だとマクロを6種類用意してあります。
 (1) 1回A
 (2) 1回B
 (3) 2回A
 (4) 2回B
 (5) 3回A
 (6) 4回B

とあり、1つ目のコンボボックスで「2回」を、2つ目のコンボボックスで「B」を選んだ場合、
(4)のマクロを実行するようにするにはどのようにしたらよいでしょうか?

※ コンボボックスは両方選ばない限りはマクロを実行させません。
また、両方既に選択してあり、そのマクロが一度実行させた後、一方だけ変更しても他のマクロを実行させたいです。


また、本件とは別の内容となっていまいますが、コンボボックスなどが”フォームコントロール”と”ActiveX コントロール”と2種類あるのですが、どのように違うのでしょうか?


ちなみにExcelは2007です。ご教授よろしくお願いします。

A 回答 (1件)

こんにちは。



私は、今のところ、2007 Office を購入する予定はないので、2003で回答させていただきます。

最初に、
>コンボボックスなどが”フォームコントロール”と”ActiveX コントロール”と2種類あるのですが、どのように違うのでしょうか?

フォームコントロールというのは、アプリケーションの中に組み込まれてあるもので、「軽い」「速い」の特徴があるのですが、フォームコントロールの細かな仕様は、もう探してもないわけです。いわゆる、「隠しオブジェクト」の分類でヘルプにも出てきません。

ActiveX コントロールは、外部ツールです。つけたしも利くわけで、Excel専用もあれば、汎用性のあるものもあります。表現力は豊かです、プロパティも豊富なのです。MS側では、フォームとは縁を切りたいところだろうとは思うのですが、過去の遺産(レガシー)としての互換性で、なかなか捨てることも出来ないわけです。コントロールツール側で行ったほうがいろいろな面で便利だとは思います。

今回のコードは、双方向で実行ということですから、このようなコードでよいかと思います。

標準モジュール

'Option Explicit
Dim a As Variant
Dim b As Variant
Sub ComboBox1_Click()
 a = Sheet1.DropDowns(1).Value
 b = Sheet1.DropDowns(2).Value
 Call SelectMacro
End Sub
Sub ComboBox2_Click()
 a = Sheet1.DropDowns(1).Value
 b = Sheet1.DropDowns(2).Value
 Call SelectMacro
End Sub
Private Sub SelectMacro()
Dim c As String
 c = a & b
 Select Case c
  Case "11": Call macro1
  Case "12": Call macro2
  Case "21": Call macro3
  Case "22": Call macro4
  Case "31": Call macro5
  Case "32": Call macro6
 End Select
End Sub
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています