• ベストアンサー

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

いつもお世話になっております。 以下の操作についてご教示をお願いいたします。 使用しているエクセルは2007です。 Sheet1 A列:2010年~の日付(昇順に記載し、発生日はランダム)が記載され、 B列以降は日付に対応したデータが記載された表が有ります。 Sheet2に同じ表の形式で2013年以降のデータを抽出したいのですが。 どのような方法がありますでしょうか? INDIRECT関数なんかを使って試行錯誤したのですが・・・わかりません。 どなたかご教示をお願いいたします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>どのような方法がありますでしょうか? 難しく考える必要はないでしょう。 「A列:2010年~の日付(昇順に記載し、発生日はランダム)が記載され」と言うことは2013年の最初の行を知ればそれ以降を全てShee2へコピーすれば良いことになります。 MATCH関数で2013/1/1未満の行番号が得られますので次の行から下が目的のデータです。 添付画像を参考に試されると良いでしょう。

genta1019boston
質問者

お礼

ありがとうございました

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

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 日付が必ず昇順で記載されているという事でしたら、作業列も使わずに、関数のみで抽出する事が出来ます。  今仮に、Sheet2の1行目は「日付」等の項目名を記述しておくために使用し、実際の抽出結果は2行目以下に表示させるものとします。  まず、Sheet2のA2セルに次の関数を入力して下さい。 =IF(COUNTIF(Sheet1!$A:$A,">=2013/1/1"),LARGE(Sheet1!$A:$A,COUNTIF(Sheet1!$A:$A,">=2013/1/1")),"")  次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF(ROWS($A$2:$A2)>COUNTIF(Sheet1!$A:$A,">=2013/1/1"),"",IF(INDEX(Sheet1!$A:$C,MATCH($A$2,Sheet1!$A:$A)+ROWS($A$2:$A2)-1,COLUMNS($A:B))="","",INDEX(Sheet1!$A:$C,MATCH($A$2,Sheet1!$A:$A)+ROWS($A$2:$A2)-1,COLUMNS($A:B))))  次に、Sheet2のB2セルをコピーして、Sheet2の表内における「Sheet2のA2セルを除いた全てのセル」に貼り付けて下さい。  次に、Sheet2の表内におけるSheet2のA列のセルの書式を[日付]として下さい。  以上です。

genta1019boston
質問者

お礼

ありがとうございました

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

こんばんは! Sheet1のA列はシリアル値とします。 オートフィルタでも対応できると思いますが、敢えて関数でやる場合 作業用の列を使用するのが一番簡単だと思います。 データは2行目以降にあるとします。 Sheet1のC2セルに =IF(YEAR(A2)>2012,ROW(),"") という数式を入れフィルハンドルでダブルクリック、またはオートフィルでデータ以上に下へコピー! Sheet2のA2セルに =IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!$C:$C,ROW(A1))),"") という数式を入れB2セルまでコピー! → そのまま下へコピー! (Sheet2のA列の表示形式は「日付」にしておきます) こんな感じではどうでしょうか?m(_ _)m

genta1019boston
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
  • aokii
  • ベストアンサー率23% (5210/22063)
回答No.1

全自動でやるならマクロを使うことになりますので、簡単にやるには、 Sheet1のA1セルをクリックし、データタブでフィルタをクリックし、フィルタで2010と2011と2012年のデータのチェックを外し、Sheet1の全データを選んでコピーして、Sheet2に貼り付けてはいかがでしょう。

genta1019boston
質問者

お礼

ありがとうございました

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

専門家に質問してみよう