• ベストアンサー

エクセルのデータ抽出について

基本的な内容かもしれませんが、どうしてもわからないので教えてください。   A B C D 1 1 b 3 c 2 2 t 4 y 3 3 r 3 o 4 4 l 5 p 5 5 k 3 w 上記のようなデータベースがあったとします。このシートと異なるシートのあるセルにたとえば3と入力すると   A B C D 1 1 b 3 c 2 3 r 3 o 3 5 k 3 w のようにC列が3である行が抽出され、なおかつA列の昇順で並ぶということをしたいのですが、vlookup等ではうまくできません。 フィルタを使用せずに実現したいのです。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

データがあるシートがSheet1、転記先のシートがSheet2とします。Sheet2で抽出する値を入力させるセルをSheet2のE1とします。 以上の条件でよろしければ以下の手順を試してください。 Sheet2でE1に値を入力すると、瞬時に抽出されて昇順に並び替えられます。  1. Sheet2のシートタブを右クリックして、[コードの表示]。  2. 出てきた所の右側の白い広い部分に下記のコードを貼付けます。  3. 右上の × でExcelの画面に戻ります。 '********これより下********** Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$E$1" Then Exit Sub Range(Range("A1:D1"), Range("A1:D1").End(xlDown)).ClearContents With Sheets("Sheet1") .AutoFilterMode = False .Rows("1:1").Insert Shift:=xlDown r = .Range("C" & Rows.Count).End(xlUp).Row .Range("A1:D1").AutoFilter .Range("A1:D1").AutoFilter Field:=3, Criteria1:=Target.Value .Range("A2:D2").Resize(r).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False .Rows("1:1").Delete End With Range(Range("A1:D1"), Range("A1:D1").End(xlDown)).Sort _ Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom End Sub '********これより上********** いかがでしょうか?

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

その他の回答 (1)

  • takesun
  • ベストアンサー率40% (22/54)
回答No.1

関数で実現するとなると複雑な式になりますが、 例のデータでよければ、SHEET1のE1に3と入力するとして、 別シートの A1=IF(COUNTIF(Sheet1!$C$1:$C$10,Sheet1!$E$1)<ROW(),"", SMALL(IF((Sheet1!$C$1:$C$10=Sheet1!$E$1),Sheet1!$A$1:$A$10), ROW())) ctrl+shift+enterで入力して下方向へコピー B1=IF($A1="","",INDEX(Sheet1!$A$1:$D$10, MATCH($A1,Sheet1!$A$1:$A$10,0),COLUMN())) 下方向と横方向へコピー A列に重複する数字がある場合には対応していません。

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

専門家に質問してみよう