- ベストアンサー
オートフィルタと同じ事をフォームで・・・・
以下の質問について、至急、回答をください。お願いします。 質問1) 出荷.xlsというBookが存在します。その中に、"出荷リスト"というシートがあり、A列に商品コード、B列に商品名が重複して多数存在します。各列に、オートフィルタをかけ、▼をクリックした時に表示されるリストをフォームのコンボボックスに表示させる方法。 質問2) フォームのコンボボックスに表示された任意の商品コードを選択時に、テキストボックスに選択された、商品コードの商品名を表示させる方法。 ※できれば、コードを記述していただくとありがたいのですが・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Excel97なら、 rc = 0: ReDim SyohinName(0) '商品名をクリア の次に、 ws.Activate: Range("A1").Select を入れてみてください。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
Excelのヴァージョンを教えて下さい。当方、Excel2000です。 また、 For Each rg In ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible) を For Each rg In ws.Range("A1:A100") としたら次へ行きますか。
- nishi6
- ベストアンサー率67% (869/1280)
質問の『フォームのコンボボックスに表示させる』の『フォーム』はユーザーフォームと解釈しましたが・・・違った? フォーム(オブジェクト名:UserForm1)には、 コンボボックス(オブジェクト名:ComboBox1) テキストボックス(オブジェクト名:TextBox1) があるとします。 ワークシート出荷リストのA1には『商品コード』、B1には『商品名』の表題があり、2行目からデータが入力されているとします。 フォームを呼び出す時にコンボボックスのリストを定義しています。 下記をUserForm1のコードウインドウに貼り付けます。 Dim SyohinName() As String '商品名用配列 'フォームを開く時の処理 Private Sub UserForm_Initialize() Dim ws As Worksheet 'ワークシート Dim rg As Range 'セル Dim rc As Long '行カウンタ Set ws = Worksheets("出荷リスト") ComboBox1.Clear 'コンボボックスをクリア rc = 0: ReDim SyohinName(0) '商品名をクリア For Each rg In ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible) If rg.Column = 1 Then 'A列の場合 If rg.Row > 1 Then '2行目以降の場合 'セルが表示されていたらコンボボックスに追加する ReDim Preserve SyohinName(rc) ComboBox1.AddItem rg.Value 'コンボボックスに商品コードを追加 SyohinName(rc) = rg.Offset(0, 1) '商品コードを記憶 rc = rc + 1 End If End If Next End Sub 'コンボボックスをクリックした時の処理 Private Sub ComboBox1_Click() TextBox1 = SyohinName(ComboBox1.ListIndex) End Sub
補足
教えください!!ユーザフォームにコードを貼り付けてステップ実行した時に、以下の場所でエラーが発生しました。どうしたらよろしいでしょうか?ボタンは、OK・ヘルプしかなく、ヘルプをクリックしてもヘルプが表示されません・・・・ ComboBox1.Clearの次のステップへ行く時に、 ⇒ "実行時エラー '-2147467259(80004005)':予期せぬエラーが発生しました。"
お礼
補足を投稿した後、自分なりに予期せぬエラーの原因を追求してみました。UserFormのRowSourceプロパティに値が入力されていて、エラーがでてしまったようです。自分のミスでした・・・・・。回答の方、ありがとうございました。また宜しくお願いします。