EXCELのデータ抽出の方法とは?

このQ&Aのポイント
  • EXCELのデータ抽出方法を教えてください。添付画像の黄色の箇所に、指定した月の、日曜日と祝日以外の日付を一覧で表示させたいです。
  • EXCEL初心者で、WORKDAY関数を使用して日付を抽出しようとしていますが、土曜日も含まれてしまいます。
  • また、会社のEXCELのバージョンが異なるため、どのバージョンでも使用できるファイルを作成したいと考えています。
回答を見る
  • ベストアンサー

EXCELのデータ抽出の方法を教えて下さい。

EXCELのデータ抽出の方法がわからず困っています。 やりたい事としては、添付画像の黄色の箇所に、 指定した月の、日曜日と祝日以外(祝日は祝日一覧のデータを基にする)の 日付を一覧で表示させたく思っています。 使用方法としては、月毎にシートをコピーして使いまわすため、 使用する人が、シートの決められたセルに(添付画像ではB1とD1)、 その月の値を入力すると(例:平成26年9月もしくは2014年9月のような形)、 その下に日付が一覧で表示される形にしたいです。 (添付画像では黄色の箇所に一覧表示) EXCEL初心者で、悩みに悩んで、 やっとWORKDAY関数まで辿りついたのですが、 これだと土曜日も含まれてしまうのですよね…。。。 また、アドインの設定が必要な場合もある等々、 大変恥ずかしながら難しくてよくわからず。。。 また、今回作成するファイルは会社で使用するものなのですが、 社内のEXCELのバージョンは使用するパソコンによって異なり、 2000~2010まであります。 ですので、出来ればどのバージョンでも問題なく使用できるファイルを 作成したいと考えています。 初歩的な質問かもしれず大変恐縮ですが、 ご教示いただきたく思います。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 作業用の列を設ける方法が判りやすいと思います。 尚、お示しの画像では文字が左寄せになっているので、セルの表示形式が「文字列」なのでしょうか? もしそうであれば面倒なので、シリアル値で処理します。 F列すべてを選択 → 右クリック → セルの書式設定 → 表示形式タブ → ユーザー定義 → 「種類」の欄がG/標準となっていれば それを消して ggge年m月d日 と手入力しOK これで 2014/1/1 のように入力してもお示しの画像のような表示になります。 ggge年m月d日(aaa) とすれば曜日まで表示されます。 そして作業列G1セル(←セルの表示形式に手を付ける必要はありません)に =IF(MONTH(DATE(B$1+1988,D$1,ROW(A1)))=D$1,IF(OR(WEEKDAY(DATE(B$1+1988,D$1,ROW(A1)))=1,COUNTIF(F:F,DATE(B$1+1988,D$1,ROW(A1)))),"",DATE(B$1+1988,D$1,ROW(A1))),"") という数式を入れ、月末(31日分)までのG31セルまでフィルハンドルでコピーしておきます。 そしてA4セル(セルの表示形式は好みで)に =IF(COUNT(H:H)<ROW(A1),"",SMALL(H:H,ROW(A1))) という数式を入れフィルハンドルでずぃ~~~!っと下へコピーすると 画像のような感じになります。 ※ 作業列が目障りであれば非表示にしておいてください。m(_ _)m

marunomaru
質問者

お礼

tom04 様 こんにちは。 早速のお返事をいただき、どうもありがとうございます。 教えていただいた方法で実際に試してみたところ、 まさに私が思い描いていた通りの事が出来ました! こちらで質問する前に、 休日に土曜日を含んではいけない事をうっかり忘れ、 一度WORKDAY関数でファイルを仕上げていたのですが、 その際、翌月の日付が表示されてしまうのを、 条件付書式で非表示にする形で対応していました。 ですので、今回教えていただいた方法だと、 それすらも不要で、本当にスッキリ致しました。 また、和暦表示に1988を用いることも全く知りませんでした。 実はこれも自分で作成した際は、和暦にしたいけれど計算がうまくいかず、 西暦で対応していましたので、とても助かりました! これならば、Excelのバージョンを気にすることなく、 社内のどのパソコンでも使用出来ます! 困り果てていたため、 本当に助かりました!! 大変お世話になりました。 どうもありがとうございます!!

その他の回答 (4)

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

初心者と云うことでわかりやすく B1セルに 2014 と年を西暦で入れるとして F4セルに 数値で 0 とでも入れて F5セルから下に 祝日を入れておきます。 空いているセル 仮に D4セルに =MATCH(DATE(B1,D1,0.5),F:F,TRUE) と入れて始まりの行番号を取得 D5セルに =MATCH(DATE(B1,D1+1,0.5),F:F,TRUE) で終わりの行番号を取得 D6セルに =D5-D4 で該当する日付の数 あとは B4セルに =IF(ROW(A1)>D$6,"",INDEX(F:F,D$4+ROW(A1))) と入れて下へコピーしてみてください。 数式の意味は理解してくださいね。

marunomaru
質問者

お礼

hallo-2007 様 早速お返事をいただき、どうもありがとうございます。 教えていただいた方法で、 自分なりに数式の意味を理解しながらやってみました。 これは祝日一覧から、 指定した月に該当する祝日を抽出する方法だったのですね。 今回は逆にそれらを除いた日付を抽出したかったため、 せっかく教えていただいたのですが、 初心者の私にはこれを基にどう応用していけば良いのかまた悩むところでして… ですので、今回はこの方法で出来ず残念ですが、 とても勉強になりました! これからもExcelはやっていかなければいけないため、 教えていただいた方法をまた今後に繋げれるよう 日々やってきたいと思います。 大変お世話になりました。 どうもありがとうございます!!

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

>出来ればどのバージョンでも問題なく使用できるファイルを作成したいと考えています やはり、エラー対応の違いで算式の長さが倍近くになります。(当方Excel2010です) 質問にある添付図で、セルA4に、下記式をコピーし、CTRL+SHIFT+ENTERで登録します。配列数式になります。後は下に(配列数式になったA4を)コピーします。F列は日付シリアル値としています。平成26年は7月と10月が抽出される日が多いようです。 =IF(COUNT(IF(MONTH(DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))=$D$1,IF(WEEKDAY(DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))>1,IF(COUNTIF(F:F,DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))=0,ROW($A$1:$A$31),""),""),""))<ROW()-3,"",DATE($B$1+1988,$D$1,SMALL(IF(MONTH(DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))=$D$1,IF(WEEKDAY(DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))>1,IF(COUNTIF(F:F,DATE($B$1+1988,$D$1,ROW($A$1:$A$31)))=0,ROW($A$1:$A$31),""),""),""),ROW()-3))) 少し説明を。(下式は上と同じですが見やすいように改行しています。DATE内部は年月日で代用) =IF(COUNT(    IF(MONTH(DATE(年月日))=$D$1,  '月が一致    IF(WEEKDAY(DATE(年月日))>1,   '日曜以外    IF(COUNTIF(F:F,DATE(年月日))=0, '祝日以外   ROW($A$1:$A$31),""),""),""))<ROW()-3,"", '指定月外  DATE(年月,   SMALL(    IF(MONTH(DATE(年月日))=$D$1,  '月が一致    IF(WEEKDAY(DATE(年月日))>1,   '日曜以外    IF(COUNTIF(F:F,DATE(年月日))=0, '祝日以外   ROW($A$1:$A$31),""),""),""),ROW()-3))) '日 Excel2000等を意識すると、IFERROR関数が使えないので冗長になります。

marunomaru
質問者

お礼

nishi6 様 早速お返事をいただき、どうもありがとうございます。 配列数式…と聞いた瞬間、初心者の私にはクラッ… ときそうになりましたが(笑)、 そんな私にもわかるよう とても詳しく数式の解説を書いて下さったおかげで、 長い数式の意味が理解出来ました。 nishi6 様の解説のおかげで、 今回ご回答をいただいた皆様にも教えていただいた数式の解説にもなり、 とても勉強になりました! やりたかった事が出来るようになりました! 大変お世話になりました。 どうもありがとうございます!!

回答No.3

本当は、お勧めできる手法は、易しい数式のみを使って、月ごとなどのカレンダーを Excel シート上に自作することです(アドイン不要)。たまたま土日祝日に該当した欄のみ、条件付き書式により、セルの塗りつぶしや文字の色を変えたりすることもできます。毎月、必ず 31 日以内しかないわけですから、それほどカレンダーの面積が大きくなることもありませんね。日付を縦 1 列に並べてもいいし、長方形型に配置してもいいです。 カレンダーを作りたくなった場合は、この質問内には追加せず、別の質問として投稿してください。 しかし下のとおり、難解な数式を使えば、ご要望どおり条件に合う日付のみを上に詰めて表示することも不可能ではありません。非該当の日を除いて表示しているため、経過日数などは分かりづらくなるかもしれませんが、一応できます。 F 列の祝日などについては、「2014/1/1」などを記入し、セルの書式により「平成26年1月1日」などと表示させます。「セルの書式を『文字列』に設定した上でそこに『平成26年1月1日』などを記入する」という方法は、トラブルのもとなので、本件に限らず基本的に使わないようにします。 F1 =date(b1+1988,d1,1)  ……非表示の書式を設定してもオッケー A4 =small(index(F$1-1+row($1:$31)+9^9*((month(F$1-1+row($1:$31))<>D$1)+(weekday(F$1-1+row($1:$31))=1)+(weekday(F$1-1+row($1:$31))=7)+(countif(F$4:F$100,F$1-1+row($1:$31)))),),rows(A$4:A4)) A4 セルから下方向にドラッグし、A26 までオートフィル。このうち下のほうのセルには「######」というエラーが表示されるかもしれませんが、気にしない。A4:A26 のセル範囲の書式を「[<3000000]d"("aaa")";」などに設定すれば(*)、このエラー表示は消えます。 * セル範囲を選択して右クリックし「セルの書式設定 > 表示形式タブ > ユーザー定義 > 種類ボックス」にこの書式記号を入力 質問文にもあるように、アドインを組み込む必要はありますが、WORKDAY 関数を使っても構わないということであれば、上式に比べればまだ簡単というくらいの数式にはなります。 F1 上式と同じ A4 =workday(F$1,rows(A$4:a4)-1+((weekday(F$1)=1)+(weekday(F$1)=7)+countif(F$4:F$100,F$1)>0),F$4:F$100) ただ、これだと、A 列の途中で月が変わっても非表示にならず、翌月の日付を表示してしまいます。D1 セルの月と比較するなどして、条件付き書式により翌月を非表示にします。具体的には、条件付き書式ダイアログの「数式を使用して、…」にて、「=month(a4)<>D$1」という条件下、セルの書式「;;」を指定するなど。

marunomaru
質問者

お礼

MarcoRossiItaly 様 早速お返事をいただき、どうもありがとうございます。 そうなんです、私もカレンダー形式に出来れば、 初心者の私でも作成出来るのでは…と思ったのですが、 業務で使用するフォーマットの都合上、 カレンダー形式には出来ませんでした。。 2通りの方法を教えていただきとても助かります! しかも、もし1つ目のやり方をWORKDAY関数で作成した場合 どうなるのかというところまで教えていただき、 とても勉強になりました! また、翌月の日付が表示された場合の対処の仕方ですが、 実は私も同じように条件付書式を利用していたのですが、 文字を白色にする事で対応していました。 ですので、セルの書式を「;;」とする方法は初めて知ったため、 これもとても勉強になりました! 知らないことだらけでお恥ずかしいですが、 様々な方法を教えていただけたおかけで、 やりたかった事が出来るようになりました! 大変お世話になりました。 どうもありがとうございます!!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 たびたびごめんなさい。 投稿後に気づきました。 作業列はG列ではなく、H列でした。 数式そのものは問題ないと思います。 どうも失礼しました。m(_ _)m

marunomaru
質問者

お礼

tom04 様 何度も申し訳ありません。 どうもありがとうございます!

関連するQ&A

  • エクセルの抽出方法

    はじめまして。 今、エクセルの抽出方法でどうすれば良いか悩んでおります。 エクセル2007 添付の画像で行・列は増えていくのですが、行の「日付」や「担当者」を条件として抽出する方法は ありますでしょうか? 別シートに表示でも構いませんので、アドバイスお願い致します。

  • EXCEL 複数シートからデータを抽出する方法

    シート1~12が「4月…3月」の名前になっています。 各シートの ・A列は日付 ・B列はメモ ・C列はジャンル が、それぞれ入力されています。 それを、新たなシートで、ジャンルごとに検索して日付順に並べたいです。 各シートでフィルターをかければ、そのシート(月)の中で該当する行を表示しますが、それを複数シート(複数月)のものをまとめた形で、新しいシートに表示したいのです。 イメージとしては、新しいシート(1)に同一ジャンルのものが4月から時系列に並ぶような感じです。 マクロボタンを押すとジャンルごとに自動検索して表示するようなものでも構いませんし、新しいシート(1)にジャンル(1)、新しいシート(2)にジャンル(2)というようなものでも構いません。 よろしくお願いします!

  • エクセルの抽出機能が使えなくて困っています…!

    エクセル(2007)の抽出機能が使いこなせずに困っています…! 現在、自宅の保存食品の在庫管理表を製作しています。 その管理表の製作に伴い、賞味期限を対象とした抽出機能を つけたいと考えています。 そこで、PCのシステムの日付から一週間以内に賞味期限がくる 食品を別のシートに切り取り、あるいはコピーして一覧にしたいと 考えています。 しかし、PCのシステムの日付を利用した抽出の方法がわかりません… どうか助けてください…! マクロやVBAを使用する形でもかまいません! ただ、抽出の条件として今日の日付を毎回手入力で行うことは避けたいです。 どうか、よろしくお願いします…! 例)画像の場合、PCの日付が2011年4月15日だった時、   4月16日から4月22日までの米のリストを抽出、ということがしたいです。

  • エクセルでの~データの抽出~

    本などを読んでも何で調べたらいいのか分かりません。 お詳しい方どうかご教示下さい。 仕事でエクセルのみを使用してデータの管理をしています。以下の ようなことをしたい場合、エクセルで出来るのか、またどうすれば よいですか? (Q1)例えば、Aのシートに何百人という名前のデータがあるの ですが、そこには同じ人(同じ名前)がほぼ2~3個重複してたりも します。Bのシートにも同様のようなデータがあり、Aのシートにいる 人もまた同じようにBのシートにも重複してたりもします。そこで、 「AのシートにはなくてBのシートにだけいる人を抽出したい」場合どうすればよいのでしょうか? 3月の顧客一覧をAのシート、4月の顧客 一覧をBのシートとしていて、毎月ほぼ同じだけれど、4月に 新たに発生した顧客だけを知りたい、という場合です。。。 (金額も管理してるので一シートに同じ顧客が連なってたりもします) この場合、いちいち見比べずにさっと抽出したりすることは可能 でしょうか…?      (Q2)各シートに沢山あるデータのある一つのデータだけを、どこかに 抽出することはできます?例えば、名前・金額などのデータを月毎に 各シートで管理しているのですが、一年なら、12枚あるシートの 中で、ある一人だけのデータを知りたい場合(例えば何月に来ていくら 購入している…等)、12シートを一枚づつ開いて名前を探す方法以外に何かありますか? 分かりにくい説明で申し訳ありません。お詳しい方、どうか知恵と 知識をご教示ください。よろしくお願いいたします。      

  • エクセルでn稼働日後の日付を表示

    使用しているエクセルのバージョンは2003です。 n稼働日後の日付を表示したいのですが、 土日が稼働日だったり、平日で休みの日があったりする 場合を考えたいので、WORKDAYが使えません。 皆様、知恵を貸していただけないでしょうか。

  • 該当範囲のセルのデータを取得する

    EXCEL2010を使用しています。 【やりたい事】 シート2のドロップダウンリストで月を変更した時に、 シート1の該当する月の平日のデータを取得する 【状況】 波線の(左)シート1、(右)シート2です。 (シート1)   A~B列 : 祝日一覧          (A3~A19に祝日と名前をつけました)  D列 : 平日一覧       D3セル : 開始日           D4セル : =WORKDAY( D3, 1, 祝日 )        ・        ・       D4セルをCOPYして年末まであります。 (シート2)  A1セル : ドロップダウンリスト 1~12月まで選びます。  A2セル以下 : シート1の該当月の平日データを取得 平日を一覧にする所まではできましたが、シート2の 「月」の下のセルに、シート1の該当月のデータを 反映させるやり方がわかりませんでした。 どなたかお分かりになる方の知恵をお借りしたいです。 どうぞ宜しくお願い致します。

  • EXCELで別ファイルからデータを抽出するには?

    EXCELについて条件に一致する列の内容を抽出する方法を教えてください。 シート1の行に日付があり、列に品名と日ごとの数を入力してあるシートがあります。 このシートの内容を別のシートに日付を入力すると、その日の内容が表示されるようにしたいのですが、うまくいきません。 [シート1]     1    2    3   4 (←日付) A品  10  20  30   40… B品  30   10  40  20… C品  15  16   17  18… D品  20  21   22  23… [シート2]     *(←日付を入力) A品 (   ) B品 (   ) C品 (   ) D品 (  ) シート1とシート2はそれぞれ別ファイルで同時に開いている状況です。 シート2の*部分に日付を入れると該当する日付の各品名の数量が( )の部分に表示されるようにするにはどうしたらよいですか?

  • データ抽出

    VBA初心者です。 エクセルで2枚のシートを練習用で作成しました。 画像上段がシート1で元データです。 下段が転記先の表で、シート2です。 シート2は、今はデータが参考に貼りつけてありますが 普段はマクロで作業後は消去して、空白にしています。 今したい処理が 元データをINPUTBOX関数を使って抽出し、 NO,購入日付、分類、感想、備考のデータを下段画像シート2のように 転記したいのです。 抽出条件のキーになるのは、主に「購入日付」と「分類」です。 どこかのセルに、日付を範囲指定で入力すれば、条件に当てはまる データをシート2に表示させたいです。 四半期ごとのデータを検索したいためです。 INPUTBOX関数でなくても、どこかの特定のセルに範囲指定する日付を入力 して、抽出してもかまわないです。 あと、分類は割と「飲料水」を抽出して、印刷する頻度が多いのですが 今後の参考に、全部の分類を抽出できるスタイルが望ましいです。 現在は、一行一行日付と分類を目視で確認しながら シート2にコピペ作業しているので 時間がかかります。 エクセルの機能でフィルタ等をしてみたのですが、 関数やVBAで素早くしたいのですが、なかなかコードが思いつきません。 お願いします。

  • エクセルの自動転記について

    エクセル2003です。 行動予定一覧表を作成中です。 シート1に一覧表 シート2には日付別になっており、 その日付別のを一覧表に自動転記させたいと思っています。 画像をご覧になっていただくのが解りやすいと思うのですが、 項目は、一覧表も日付別も同じものです。 ただ、一覧表にはシート2では欄がなかった日付を加えたいのですが、 これも計算式にて表示出来たらと思っています。 一覧表には、日付別シートの表の中で空欄の場合は、転記されないようにしたいのですが、 可能でしょうか? VBAは苦手なので、出来れば計算式で乗り切りたいと思っています。 何かいい案等があれば教えていただきたいです。 よろしくお願いします。

  • VBAのデータ抽出について

     列  A   B   C 行1 番号  色   形  2  1   白   丸  3  2   赤   三角  4  1   赤   丸  5  3   黄   四角 (1)Excel Sheet1にコマンドボタン1があり、それをクリックするとUserForm1が表示されます。 (2)UserForm1には「番号」「色」「形」の各コンボボックス1,2,3が配置されています。 (3)各コンボボックス1,2,3に表示されるのは、Sheet1の各列のデータです。 (4)コンボボックス1,2,3のうち1つ選択→その条件に合うデータを抽出。  コンボボックス1,2,3のうち2つ選択→その2つの条件に合うデータを抽出。  コンボボックス1,2,3のうち3つ選択→その3つの条件にあるデータを抽出。 (5)Sheet1のコマンドボタン2をクリックすると、Sheet1は元のデータ一覧に戻る。 というようなプログラムを組みたいと思っています。 (4)のデータ抽出、(5)の戻し方がよくわかりません。 どなたかご教授下さい。

専門家に質問してみよう