• 締切済み

EXCEL入力データの絞込み方法について

EXCELでの入力データの絞込み方法について質問させてください。 バージョンEXCEL2003 マスタとして、別シートに、メーカー・車種を持っています。 これに対して、データ入力シートにメーカー名を手入力した場合、 次の車種が絞り込まれ、該当するメーカーのものだけから選択 するようにしたいと考えています。 実際にはマスタは500件以上登録されています。 この状況では、入力規則でカンマ区切りして選択する方法ではマ スタが更新された時の追随性に難があると思い悩んでおります。

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

No3です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ↑ 選択したセルの位置が変わったら実行 If Target.Column = 2 Then ↑ Targetは、選択したセルの事 つまり選択したセルが2列目(B列だったら)以下を実行 Range("C2:C1000").ClearContents ↑C2~C1000 1000行目という値は適当ですが、値をクリア For i = 2 To 1000 ↑2行目から1000行目まで繰り返し If Target.Offset(0, -1).Value = Sheets("マスター").Cells(i, 1).Value Then ↑もし選択したセルの1つ左(つまりA列)とマスターのシートの1列目(A列)が同じ場合は Range("C" & Range("C1000").End(xlUp).Row + 1).Value = Sheets("マスター").Cells(i, 2).Value ↑C1000のセルから上へ移動して空白でない行の一つ下へ、マスターのシートの2列目(Bretu)の値を入れていく NextはForの繰り返し 複数セルを選択したりしたときのエラー処理は含まれていません。 データ数もMAX1000行までという事で設計しています。 抽出したデータを書き出す場所は Range("C" & Range("C1000").End(xlUp).Row + 1).Value を変更してください。別シートの場合は Sheets("シート名").Range("C" & Range("C1000").End(xlUp).Row + 1).Value とかになります。 For~Nextについては、調べて勉強してみてください。

すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

VBA案ですが データ入力シートのC列が空いているものしてです。 シート名のタブを右クリック コードの表示をクリック VBエディターが起動したら Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 2 Then Range("C2:C1000").ClearContents For i = 2 To 7 If Target.Offset(0, -1).Value = Sheets("マスター").Cells(i, 1).Value Then Range("C" & Range("C1000").End(xlUp).Row + 1).Value = Sheets("マスター").Cells(i, 2).Value End If Next End If End Sub を貼り付けて閉じます。 B列を選択するたびに、C列に入力規則に必要なデータが抽出されると思います。

griffin-aki
質問者

補足

早速のアドバイスありがとうございます。 大変エレガントな処理方法だと思います。 アドバイス頂いた直後から色々調べて試みているのですが、 VBAは勉強中につき、なかなか応用が効きません。 恐縮ですが、この構文のそれぞれの意味について、追加の アドバイスを頂ければ大変助かります。

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

「お手軽」な方法: 昨日のご相談でしたが http://okwave.jp/qa/q7602579.html を参考にしてください。 トヨタ車の車種名が記入されたセル範囲に「トヨタ」、日産車の車種名が記入されたセル範囲に「日産」と、それぞれ名前を定義して利用します。 別の方法: >実際にはマスタは500件以上登録されています。 マスタをメーカ名で並べ替えてある前提で。(必須) マスタのシート名を「マスタ」、A列にメーカ名、B列に車種名として。 シート1のB2の入力規則に  種類 リスト  元の値 =OFFSET(INDIRECT("マスタ!B"&MATCH(A2,INDIRECT("マスタ!A:A"),0)),0,0,COUNTIF(INDIRECT("マスタ!A:A"),A2),1) と設定します エラーの警告が出ても無視して続行します。

griffin-aki
質問者

お礼

早速のご回答ありがとうございます。 今回、とにかく急ぎでの入力でして、エラーが出ようとも 結果が良ければ問題ないことから、頂いたアドバイスは 大変参考になります。ありがとうございました。

すると、全ての回答が全文表示されます。
  • k-josui
  • ベストアンサー率24% (3220/13026)
回答No.1

回答にはなりません。 そのような作業はAccessのの範疇です。 Accessは若干取っつきにくいですが、慣れれば処理はスムーズにできます。

griffin-aki
質問者

お礼

早速のコメントありがとうございます。 Accessは勉強中でして・・・ Accessも使いこなせるようにがんばります。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A