EXCELでカテゴリを自動判別して最後の日付を検索する方法はありますか?

このQ&Aのポイント
  • EXCELのデータ検索(抽出)でわからないことがあるので、皆さんのお知恵を拝借できないでしょうか?
  • A列のIDがtop100、mid200、low300で始まるカテゴリごとに、B列の一番後ろの日付を検索したいのですが、効率的な方法はないでしょうか。
  • カテゴリごとに一番後ろの日付を含む行を別表に抽出できたらなお助かります。
回答を見る
  • ベストアンサー

EXCEL:カテゴリを自動判別して最後の日付を検索

EXCELのデータ検索(抽出)でわからないことがあるので、皆さんのお知恵を拝借できないでしょうか? ○以下のようなテーブルがあったとします。 A列のIDがtop100、mid200、low300で始まるカテゴリごとに、B列の一番後ろの日付を検索したいのですが、効率的な方法はないでしょうか。 例えば、top100のカテゴリでは「2010/1/15」、mid200のカテゴリでは「2009/11/10」、low300のカテゴリでは「2009/9/3」を選択(抽出または強調書式も可)したいのです。 ※注:実際のデータではカテゴリが100以上あり、カテゴリ名もこんなに判り易くないです(カテゴリ名を手入力するような方式は避けたいです)。 今のところは、カテゴリごとに条件付き書式を設定したりしているのですが、実際のデータは1000行弱あるもので非常に時間がかかります。なにか良い方法はないでしょうか。 (カテゴリごとに一番後ろの日付を含む行を別表に抽出出来たらなお助かります) A列: ファイルID || B列: 日付 1| top100010 || 2009/7/3 2| top100050 || 200912/31 3| top100100 || 2010/1/15 4| mid200010 || 2009/8/15 5| mid200050 || 2009/11/10 6| mid200100 || 2009/9/20 7| low300010 || 2009/7/30 8| low300050 || 2009/8/25 9| low300100 || 2009/9/3

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

方法は、No.1の回答と同じですが、式を↓にしてみてください。配列式ですので、確定はShft+Alt+Enterで。 =(B2=MAX(IF(LEFT($A$2:$A$10,6)=LEFT(A2,6),$B$2:$B$10,""))) これで、各カテゴリの最終日付の行にTRUEが入ります。あとは、オートフィルタでC列の値がTRUEの物だけを表示。 なお、同じカテゴリで同一最終日が複数存在している場合は、全て表示されます。

Kazu_creator
質問者

お礼

教えていただいた式で機能しました。ありがとうございまいした。 この式は条件付き書式に使用してもちゃんと機能するので、そちらを採用させていただきました(余分な行を追加しないでいいので)。 ただ、配列関数については、まだよく理解できてないのでなぜ機能するのかはおいおい理解していきたいと思います。

その他の回答 (5)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.6

カテゴリー列を挿入してあげて日付で降順ソート フィルターでカテゴリーを選択すれば最初に一番新しい日付のデータが 表示される。 その後どうしたいのかが良くわかりません。 (カテゴリごとに一番後ろの日付を含む行を別表に抽出出来たらなお助かります) マクロでやるのが手っ取り早いのですが その表はカテゴリー順に並んだほうがいいのか、日付の降順に並んだほうがいいのか カテゴリー、日付のほかの項目(列)も在るのか 示していただければここにVBA(マクロ)を提示できます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

NO3です。 >そのままコピーすると、#VALUE!のエラーが出てしまいました。 ⇒多分、配列数式になっていないからだと思いますので、数式を貼り付け→shift+ctrl+enterキーを押下で如何でしょうか。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

No.2です。訂正を… 誤:確定はShft+Alt+Enterで。 正:確定はShft+Ctrl+Enterで。 失礼しました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO1です。 カテゴリ内の最新日付という事ならば、以下の数式をお試しください。 尚、配列数式の為、数式入力完了時にshift+ctrl+enterキーを同時押下して下さい。 C2に=MAX((ISNUMBER(FIND(LEFT(A2,6),$A$2:$A$1000)))*($B$2:$B$1000))=B2

Kazu_creator
質問者

お礼

上記の式をそのままコピーすると、#VALUE!のエラーが出てしまいました。 配列関数をいまいち理解してないので自分で検証、修正することもできず、行き詰ってしまいました。 それでも、とにかく勉強になりました。 どうもありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

次の方法は如何でしょうか。 ファイルIDの先頭6文字をカテゴリ名とします。 (1)空き列(仮にC列として、見出し名に最終フラグとします)のC2に=COUNTIF(A:A,LEFT(A2,6)&"*")=COUNTIF($A$2:A2,LEFT(A2,6)&"*")を設定、下方向にコピー (2)表をオートフィルタで設定し、C列のTRUEを選択すれば各カテゴリの最終行が抽出できますので、これを別シートにコピー

Kazu_creator
質問者

補足

早速のご回答ありがとうございます。 2つのcountifを比較するというのはいいヒントになりましたが、残念ながら今回検索したかったのは「カテゴリの最終行」ではなく、「カテゴリ内の一番最後の日付」なのです。 説明が曖昧で申し訳ありません。 これを実現するためにヒントがいただけるとありがたいです。

関連するQ&A

  • カテゴリごとに日付順位付け

    テーブルからデータを検索(抽出)する方法について、わからないことがあるので、皆さんのお知恵を拝借できないでしょうか? ○EXCELで以下のようなデータがあったとします。 A列のIDがtop100、mid200、low300で始まるカテゴリごとに、B列の一番後ろの日付を検索したいのですが、効率的な方法はないでしょうか。 例えば、top100のカテゴリでは「2010/1/15」、mid200のカテゴリでは「2009/11/10」、low300のカテゴリでは「2009/9/3」を選択したいのです。 今のところは、カテゴリごとにMAX関数を設定したり、条件付き書式を設定したりしているのですが、実際のデータは1000行ちかくあるもので非常に時間がかかります。なにか良い方法はないでしょうか。 (カテゴリごとに一番後ろの日付を含む行を別表に抽出出来たらなお助かります) A列: ファイルID || B列: 日付 1| top100010 || 2009/7/3 2| top100050 || 200912/31 3| top100100 || 2010/1/15 4| mid200010 || 2009/8/15 5| mid200050 || 2009/11/10 6| mid200100 || 2009/9/20 7| low300010 || 2009/7/30 8| low300050 || 2009/8/25 9| low300100 || 2009/9/3

  • 【EXCEL】検索機能を追加したい

    EXCELの顧客管理表に検索機能を追加したいと思っています。 概要は以下の通りです。 ・Sheet1を顧客データ一覧、Sheet2を検索用シートとし、Sheet2の上段に検索したい 単語又は日付を入れ検索ボタンを押すと、Sheet1のリストからデータを抽出しSheet2中段以降に 表示、が理想です。 ・Sheet1の顧客データは、毎日数行ずつ追加します。 項目は「日付」「顧客名」などB1~M1まで入っています。 似た質問を調べ、↓の状態までは設定できました。 ・Sheet2のB1~M1にSheet1同様の項目を作っておき、抽出したい項目の2行目に 検索対象文字を入れる。 (例 B1の項目が日付の場合、B2に”2007/01/16”) Sheet2に作った「検索ボタン」を押すと、Sheet2の4行目 以降に検索対象文字を含むデータが抽出される。 (4行目にもSheet1同様の項目を入れています。) ちなみに、検索ボタンのマクロの内容は以下の通りです。 Private Sub 検索_Click() Worksheets("顧客入力").Range("顧客データ").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B4:M5"), CopyToRange:=Range("B8:M1063"), Unique:=False End Sub ※顧客データ・・・Sheet1の顧客リストに定義している名前 ※顧客入力・・・Sheet1の名前 これで基本的な検索はできるようになったのですが、日付指定に関して足りない部分があります。 特定の日付指定は可能なのですが、2007/01/01~2007/01/31のような範囲の指定ができません。 また、文字列の検索で「~から始まる」検索は出来るのですが「~を含む」検索が出来ません。 マクロ初心者なのでどこをどう変えればいいのかが分からず困っています。ご教授いただければ助かります。

  • エクセルVBA  「本日」の日付を検索したいのですが

    お世話になります。 シートを開いたときに、日付列を検索して本日と同じ日付(日付列に本日と同じ日付がなければ、前日や前々日など、近い日)の一番最初のセルをアクティブにしたいのです。 素人なのですが、教えていただけるでしょうか。 理由ですが、 エクセルで文書受付簿をつくり、利用しています。 受付簿であるシート名 台帳  で受付記録をしているのですが、 別シート  コピー用『前年度』データ   というものを作ってあります。 それは、前年度の受付内容をコピーしたものであり、必要なセルをダブルクリックするとシート  台帳  の最終行に貼り付けるようにVBAを組んでいます。 (毎年同じ件名の文書が来る場合は、ダブルクリックするだけで入力できるので、手間が省けます) 同じ件名の文書は、だいたい同じ時期に来るので、シート  コピー用『前年度』データ   を開いた際に、日付列を検索して本日と同じ日付(日付列に本日と同じ日付がなければ、前日や前々日など、近い日)の一番最初のセルをアクティブにしたいのです。 ただし、まったく同じ日に去年も同じ件名の文書がくるわけではないので、同じ日を抽出するのではなく、検索してセルをそこに合わせるということをしたいのです。 コピー用『前年度』データ   の状況は、 A列は日付です。この日付は、表示は「月日」のみですが、数式バーには2006/4/5と表示されるように、年の情報も入っています。年は無視して、月日だけで検索したいのです。 一日に20件以上受付するので、日付も同じ日が20行近く続いて次の日の受付データに変わります。その日のまとまりの中で、一番上の行に合わせたいのです。 B列は相手先が入っています。 C列は文書の件名が入っています。 つたない説明ですが、お分かりいただけたでしょうか? よろしくお願いいたします。

  • Excel2007 複数条件での検索

    Excel2007で複数条件のデータの抽出について教えて下さい。 現在、シートAにデータが入力され、シートBにデータの抽出を行いたいと思います。 シートAの内容は以下の通りです(アルファベットと数字はセルの場所です): 1行目: 項目欄 2行目以下: データ詳細 1行目 A1 「日付」 B1「名前」 C1「出社状況」 2行目以下 A2 12/01  B2 山田  C2 出社 A3 12/01  B3 佐藤  C3 早退 A4 12/01  B4 木村  C4 出社 A5 12/02  B5 木村  C5 早退 A6 12/02  B6 山田  C6 遅刻 A7 12/02  B7 佐藤  C7 遅刻 ・・・・・ A列の日付は昇順ですが、B列の人名はランダムに入力されています。 また、日付によっては途中入退社する人もいるので、12/01に名前がなくても、 12/10から名前が入力されている場合(あるいはその逆)もありえます。 シートBは以下の通りです: 1行目 名前 A列:日付 B1 木村 C1 山田 D1 佐藤 ・・・ A2 12/01 A3 12/02 このシートBの B2に シートAから 「木村の12/01の出社状況」(つまりC4)に値するデータを 自動的に抽出するような関数を入力したいのですが、どのようにすればよいのでしょうか? (このB2セルの式をB2:D3に入力していきたいので、絶対値を指定することになると思いますが・・・) IndexやらMatchやらLookupやらを色々試してみたのですが、どうも上手くいきません。 どなたかアドバイスをお願いいたします。

  • 【Excel2007】横軸の日付が通し番号になります

    【Excel2007】横軸の日付が通し番号になります  今晩は,質問させていただきます.どうぞよろしくお願いいたします. Excel2007で散布図の横軸を日付にしたいのですが...  B4:B854に「2009/1/1」形式で(一日ずつずれて)文字列が入っています. (セルの書式設定:日付) これとC列のデータを散布図にいたしますと,横軸が0~200の通し番号になってしまいます. 無理やり「軸の書式設定」から「日付」にしてみましたが, 予想通り「1900/01/00」~の日付になってしまいます...  「データの選択」から「横(項目)軸ラベル」を見ても,自分が設定したい 日付の文字列が入っておりますが...  どこか思いつく個所をご指摘いただけないでしょうか. もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

  • 検索したい日付からデータを抽出したい。

    こんにちわ。 キャンペーンが何日~何日までどういった内容がある、という一覧を作成しています。 Aの列が開始日、Bの列が終了日、Cの列がキャンペーン内容、です。 検索したい日付をD1のセルに入力したら、その日付に該当するキャンペーンすべてを別のシートに抽出できないでしょうか・・・ オートフィルタで抽出は出来るのですが、日付を入力しただけで抽出 させたいのですが、無理でしょうか・・・ よろしくお願いします。

  • セルの書式を一括変換したい(Excel2002)

    Excel2002を使用しております。 データベースから抽出した日付がB列に5000行ほど並んでいます。 全て2005/10/26と言う形です。 このデータから他の列に曜日を表示させようとしたいのです。 しかし、書式が文字列になっているようで、 text(B2,"aaa")では表示されません。 書式を変更したのですが、どうやら入力し直さないと日付として認識しないようです。100行だったら入力しなおすのですが・・・ どうか良い方法をご伝授下さい。

  • Excelですが、同一データが複数あるとき、検索して、その全部を抽出する方法

    Excelですが、検索キーに、同一データ(レコード)が複数あるとき、検索して、その全部を抽出表示する方法を教えてください。 Vlookupは、同一データが複数あるとき、最初の行(レコード)を1つだけ抽出してきます。2つ目、3つ目の行は抽出できませんが、その全部を抽出する方法がありますでしょうか。 例えば、以下の例で、「A株式会社」をキーに検索した場合、<検索結果>シートのように、該当のレコード3つ(行2~4)を抽出して表示するようにしたいのですが、方法はありますでしょうか。よろしくお願いします。 <データシート>  列A   列B     列C  列C 行1  No  会社名    所属  担当者 行2  1  A株式会社  ○事業部  坂下順人 行3  2  A株式会社  △事業部  滿山友人 行4  3  A株式会社  △事業部  目標達子 行5  4  B株式会社  設計部 山下清人 行6  5  B株式会社  営業部 横浜美人 行7  6  C株式会社  営業部 川崎次郎 行8 ・・ ・・・・・・・・・・ <検索結果:別のシートにおいて> 行1   会社名  所属   担当者 行2   A株式会社  ○事業部 坂下順人 行3   A株式会社  △事業部 滿山友人 行4   A株式会社  △事業部 目標達子

  • [Excel2000]指定日付範囲でデータを絞り込みたい

    お世話になります。 指定日付範囲でデータを絞り込みたいのですが、いろいろWeb情報を巡回しても解決しないので教えてください。 例えば、A列が日付形式、B列が数値形式で入力されたシートがあった場合、指定した日付範囲のみ行を絞り込んでシートに表示させたいのですが、どのような方法が考えられるのでしょうか? 次のようなデータがシートに入力されている状態で、2000/01/01から2000/06/30までの日付でデータを絞り込みたい。 A列     B列 2000/01/01  1 2000/02/01  2 2000/03/01  3 2000/04/01  4 2000/05/01  5 2000/06/01  6 2000/07/01  7 2000/08/01  8 2000/09/01  9 2000/10/01  10 2000/11/01  11 2000/12/01  2 希望する結果は A列     B列 2000/01/01  1 2000/02/01  2 2000/03/01  3 2000/04/01  4 2000/05/01  5 2000/06/01  6 よろしくお願いします。

  • EXCEL・ 2つの列内にある文字データで一致するものを検索する方法

    始めまして 例えば 下記の様にA列内の文字データ(数字ですが実際には文字列) とB列内の文字データが同じものを検索する方法です。 C列に同じデータがあれば○と表示する方法でもいいです。 この場合123は検索対象となるので1行目のC列又は2行目のC列に 印か文字を表示させたいです。    A列 B列 1行 123 111 2行 456 123 3行 789 222 よろしくお願いします。

専門家に質問してみよう