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

ご指導願います。
VBAで以下の機能を作りたいと考えています。
 1.任意のセルをマウスで指す
 2.セル横に▼が表示され,”東京”と”大阪”が表示される
 3.どちらか選択した方がセルに格納される
 以上の機能を入力規則や,フォームツールボックスなどで,VABを使わずに作ることはできます。
 VBAで東京や大阪といった項目を設定し,任意のセル横に▼を表示したりする方法ご指導願いたいと存じます。よろしくお願い致します。

A 回答 (3件)

Sheet1で行う例です。



VBAのコントロールツールボックスからSheet1にコンボボックスを1つ作ります。
混乱をきたすとまずいので、オブジェクト名などは初期値のままとします。
(オブジェクト名は初期値のComboBox1とします)高さ、幅は適当に調整して下さい。

『東京、大阪』をどのように設定すればいいか明言されていないので、数も2つだし
コンボボックスを表示する時にセットしています。
ListFillRangeプロパティで事前に設定していれば、If~End Ifは不要になります。
例えば、セルA1=東京、A2=大阪にしてListFillRangeをA1:A2にするような感じです。
実質3行で終わっています。
Sheet1全体で入力ができるのもおかしいので、B列のみこの操作ができるようにしてあります。
テキトーに修正して下さい。

ツール→マクロ→Visual Basic Editor でVBE画面に移り、Sheet1のコードウインドウに貼り付けます。

ここから

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ComboBox1
    If Target.Column = 2 Then   'B列(Column=2)なら表示する例
      .Visible = True
      If .ListCount <> 2 Then  'クリックの都度Listを決めている
        .Clear
        .AddItem "東京"
        .AddItem "大阪"
      End If
      .Top = Target.Offset(0, 1).Top   '縦位置を決める
      .Left = Target.Offset(0, 1).Left  '横位置を決める
      .LinkedCell = Target.Address    'リンクするセルを決める
    Else
      .Visible = False
    End If
  End With
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/12 14:43

「セルに内容をセットしたい」との希望がよせられたので、上の2つのドロップダウンのクリックした項目内容をセルにセットする方法を載せます。


-------
1番上のドロップダウンの所へカーソルを置いて、マウスの右クリック
を押す。「マクロ登録」をクリック。「新規作成」をクリック。
Sub ドロップ1_Change()

End Subと現れるから、SubとEndSubの間に下記を貼りつける。
「実行」し、ワークシートに帰り、ドロップダウンの▼をクリックして
好きな項目を選択すると、セルに、ドロップダウンで選んだ項目が出る。
-------
Sub ドロップ1_Change()
ary1 = Array("", "東京", "大阪", "名古屋", "仙台")
a = ActiveSheet.DropDowns(1).ListIndex
Worksheets("sheet1").Range("a4") = ary1(a)
End Sub
Sub ドロップ2_Change()
ary1 = Array("", "夏", "秋", "冬", "春")
a = ActiveSheet.DropDowns(2).ListIndex
Worksheets("sheet1").Range("a6") = ary1(a)
End Sub
------
LinkedCellの場合はListIndexの数字しか現われないが、このような似た設定で項目内容が出せる設定があったように思いますが、思い出せないので取りあえず上記のようにして見ました。ListやListIndex辺りを調べればわかるかも。
    • good
    • 0
この回答へのお礼

たびたびのご指導ありがとうございました。
たいへん勉強になりました。

お礼日時:2002/04/19 18:28

下記の様なのはいかがですか。


AddItemのところを簡略にしたかったんですが取りあえず載せます。
Sub test01()
Dim n(10)
ll = Worksheets("sheet1").Cells(3, 3).Left
tt = Worksheets("sheet1").Cells(3, 3).Top
ww = Worksheets("sheet1").Cells(3, 3).Width
hh = Worksheets("sheet1").Cells(3, 3).Height
k = 1
For i = 1 To 10 Step 2
With Worksheets("sheet1")
Set cb = .Shapes.AddFormControl(xlDropDown, ll, tt + hh * i, ww, hh)
n(k) = cb.Name
' cb.ControlFormat.LinkedCell = "A" & Trim(Str(2 + 2 * k))
k = k + 1
End With
Next i
Worksheets("sheet1").DropDowns(n(1)).AddItem ("東京")
Worksheets("sheet1").DropDowns(n(1)).AddItem ("大阪")
Worksheets("sheet1").DropDowns(n(1)).AddItem ("名古屋")
Worksheets("sheet1").DropDowns(n(1)).AddItem ("福岡")
'---------
Worksheets("sheet1").DropDowns(n(2)).AddItem ("夏")
Worksheets("sheet1").DropDowns(n(2)).AddItem ("秋")
Worksheets("sheet1").DropDowns(n(2)).AddItem ("冬")
Worksheets("sheet1").DropDowns(n(2)).AddItem ("春")
'---------
Worksheets("sheet1").DropDowns(n(3)).AddItem ("男")
Worksheets("sheet1").DropDowns(n(3)).AddItem ("女")
Worksheets("sheet1").DropDowns(n(3)).AddItem ("子供")
Worksheets("sheet1").DropDowns(n(3)).AddItem ("老人")
'---------
Worksheets("sheet1").DropDowns(n(4)).AddItem ("10代")
Worksheets("sheet1").DropDowns(n(4)).AddItem ("20代")
Worksheets("sheet1").DropDowns(n(4)).AddItem ("30代")
Worksheets("sheet1").DropDowns(n(4)).AddItem ("40代")
'---------
Worksheets("sheet1").DropDowns(n(5)).AddItem ("大卒")
Worksheets("sheet1").DropDowns(n(5)).AddItem ("高卒")
Worksheets("sheet1").DropDowns(n(5)).AddItem ("短大卒")
Worksheets("sheet1").DropDowns(n(5)).AddItem ("院卒")
End Sub
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
DropDownの入力結果をセルに入力することはできるのでしょうか。

お礼日時:2002/04/15 18:13

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