Excel VBA質問箱 IV

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

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


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

【5778】シートのデータをコンボボックスに・・・ mumumu 03/5/30(金) 11:14 質問
【5781】Re:シートのデータをコンボボックスに・・・ Jaka 03/5/30(金) 14:10 回答
【5786】Re:シートのデータをコンボボックスに・・... mumumu 03/5/30(金) 15:46 質問
【5787】Re:シートのデータをコンボボックスに・・・ mumumu 03/5/30(金) 16:01 発言
【5789】Re:シートのデータをコンボボックスに・・・ Jaka 03/5/30(金) 16:27 回答
【5790】Re:シートのデータをコンボボックスに・・・ mumumu 03/5/30(金) 16:39 お礼

【5778】シートのデータをコンボボックスに・・・
質問  mumumu  - 03/5/30(金) 11:14 -

引用なし
パスワード
   おはようございます。
また、簡単なことだと思うのですが、教えて下さい。

Sheet1のC列C3、C4、C5・・・・・と縦に並んでいるデータ(日本語データです)
をコンボボックスのリストとして拾ってくることはできますか?
C列に入るデータは固定ではなく、書き換えられます。
またデータの数は不規則です。(最大20個程度)

また、可能であると仮定して
1.コンボボックスが同じシートに貼り付けられている
2.拾いたいデータがあるシートとコンボボックスを貼り付けているシートは別
3.コンボボックスがユーザーフォーム上にある

以上3つのケースで記述は違ってくるでしょうか?
よろしくお願いします。

【5781】Re:シートのデータをコンボボックスに・・...
回答  Jaka  - 03/5/30(金) 14:10 -

引用なし
パスワード
   こんにちは。
結構漠然としている上うまく説明できそうに無いので、こんなもので...。


ユーザーフォーム上(フォームモジュール)

Private Sub UserForm_Initialize()
  Sh2C = Sheets("Sheet2").Range("C65536").End(xlUp).Address(0, 0)
  ComboBox1.List = Sheets("Sheet2").Range("C3:C" & Sh2C).Value
End Sub

Private Sub ComboBox1_Change()
  MsgBox ComboBox1.List(ComboBox1.ListIndex)
End Sub


フォームの方(標準モジュール)

Sub Fcomb()
  With Worksheets("Sheet1").Shapes("ドロップ 1").OLEFormat.Object
    .Placement = xlFreeFloating
    .ListFillRange = "Sheet2!C3:" & Sheets("Sheet2").Range("C65536").End(xlUp).Address(0, 0)
    .ListIndex = 0
    .OnAction = "コンボチェンジ"
  End With
End Sub

Sub コンボチェンジ()
  With ActiveSheet.Shapes("ドロップ 1").OLEFormat.Object
    MsgBox .List(.ListIndex)
  End With
End Sub


ボタン&コンボともにコントロール(シートモジュール)

Private Sub CommandButton1_Click()
  Application.EnableEvents = False
  Sheets("Sheet1").ComboBox1.Text = Clear
  'Sheets("Sheet1").ComboBox1.ListFillRange = Clear
  Sh2C = Sheets("Sheet2").Range("C65536").End(xlUp).Address(0, 0)
  Sheets("Sheet1").ComboBox1.ListFillRange = "Sheet2!C3:" & Sh2C
  Application.EnableEvents = True
End Sub

Private Sub ComboBox1_Change()
  MsgBox ComboBox1.List(ComboBox1.ListIndex)
End Sub

【5786】Re:シートのデータをコンボボックスに・・...
質問  mumumu  - 03/5/30(金) 15:46 -

引用なし
パスワード
   ▼Jaka さん:

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

質問のしかたがわかりにくかったことと思います。
申し訳ありません。^^;

今回の内容は[#5706]の続きになっています。
これで、抽出されてきたデータのC列の部分をコンボボックスに入れたいと
考えたのです。(そのため、データ数が不規則なんです。)

教えていただいたコードを使わせてもらったところ、
ユーザーフォームを作成した場合のはうまく行きました。

他の2つについては、私がよく理解できていないため、使い方が
間違っているのだと思います。
たぶん、他にも作成しておかなければいけないものがあるのでしょうか?

>フォームの方(標準モジュール)
>
>Sub Fcomb()
>  With Worksheets("Sheet1").Shapes("ドロップ 1").OLEFormat.Object
>    .Placement = xlFreeFloating
>    .ListFillRange = "Sheet2!C3:" & Sheets("Sheet2").Range("C65536").End(xlUp).Address(0, 0)
>    .ListIndex = 0
>    .OnAction = "コンボチェンジ"
>  End With
>End Sub
>
>Sub コンボチェンジ()
>  With ActiveSheet.Shapes("ドロップ 1").OLEFormat.Object
>    MsgBox .List(.ListIndex)
>  End With
>End Sub

とりあえず
コマンドボタンをひとつ作成してそのボタンにFcomb()を登録してみました。
が、「指定した名前のアイテムが見つかりませんでした」というエラーになりました。
Shapesってなんでしょうか?
コンボボックスはフォームの方からつくり、それにコンボチェンジ()
を登録したのですが、間違ってますでしょうか?


>ボタン&コンボともにコントロール(シートモジュール)
>
>Private Sub CommandButton1_Click()
>  Application.EnableEvents = False
>  Sheets("Sheet1").ComboBox1.Text = Clear
>  'Sheets("Sheet1").ComboBox1.ListFillRange = Clear
>  Sh2C = Sheets("Sheet2").Range("C65536").End(xlUp).Address(0, 0)
>  Sheets("Sheet1").ComboBox1.ListFillRange = "Sheet2!C3:" & Sh2C
>  Application.EnableEvents = True
>End Sub
>
>Private Sub ComboBox1_Change()
>  MsgBox ComboBox1.List(ComboBox1.ListIndex)
>End Sub

こちらの方は、まったくもってやり方がわかりませんでした。TT
コントロールツールボックスの方からボタンとコンボボックスを作成すれば
よかったんでしょうか?(使ったこと無いんです^^;)
一応、それで作成して、シートモジュールにコードをコピーしてみましたが
ボタンが押せない状態です。


今さらですが、このコンボボックスを今後どうしたいかを説明しておきますと
このコンボボックスで選択したデータを特定のセル(またはフォームのテキストボックス)に貼り付けて次の作業に進めるようにしたいと考えています。
その後、それをキーワードにまたオートフィルタにかける等の作業が続く予定です。

なにぶん、わからないことだらけの状態で作成しているので
説明が漠然としていて、わかりにくくなってしまう点、お詫びいたします。
どうかよろしくお願いいたします。

【5787】Re:シートのデータをコンボボックスに・・...
発言  mumumu  - 03/5/30(金) 16:01 -

引用なし
パスワード
   ▼Jaka さん:
ごめんなさい。

3つめの方法(コントロールツールボックス)ですが、あの後もう一度
見てみたら、ちゃんとボタン押せました。

上書きしたらできるようになった??みたいです。
コンボボックスにも、ちゃんとほしいデータが入ってきます。

申し訳ありませんでした。

二つ目のShapesの使い方について、教えていただけると
ありがたいです。

わがまま言ってすみません。

【5789】Re:シートのデータをコンボボックスに・・...
回答  Jaka  - 03/5/30(金) 16:27 -

引用なし
パスワード
   >コマンドボタンをひとつ作成してそのボタンにFcomb()を登録してみました。
>が、「指定した名前のアイテムが見つかりませんでした」というエラーになりました。
>Shapesってなんでしょうか?

の前にシートの書き方が統一していませんでした。
統一させておいてください。すみません。

Sub Fcomb()
  With Worksheets("Sheet1").Shapes("ドロップ 1").OLEFormat.Object
  
Sub コンボチェンジ()
  With ActiveSheet.Shapes("ドロップ 1").OLEFormat.Object

で、

"ドロップ 1"という名前をお作りになったコンボボックス名に変えてください。
コンボボックスを右クリックすると、数式バーの左側(右にある人もいるけど)にある名前ボックスに表示される名前です。名前ボックスをクリックしてそのままコピー貼り付けをした方が安全です。

【5790】Re:シートのデータをコンボボックスに・・...
お礼  mumumu  - 03/5/30(金) 16:39 -

引用なし
パスワード
   ▼Jaka さん:
>"ドロップ 1"という名前をお作りになったコンボボックス名に変えてください。
>コンボボックスを右クリックすると、数式バーの左側(右にある人もいるけど)にある名前ボックスに表示される名前です。名前ボックスをクリックしてそのままコピー貼り付けをした方が安全です。

ありがとうございます。
ちゃんと表示されるようになりました。
名前ボックスの方をコピーすることが(なぜか?)できなかったので、直接
変更してみましたが、うまく行きました。

まだ、作成中のファイルのため、今後もお世話になることが
あると思いますが、そのときはまたよろしくお願いいたします。

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

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