• ベストアンサー

週末平日価格を抽出したい

土日祝祭日を除く5年分の平日データが列に連続して入っています。 このデータから週末の年月日と価格を図のように抽出したいのですが、 金曜日が祝日とかの場合は木曜日の価格にしたいので、 オートフィルタで金曜日抽出だけでは、うまくいきません。 "週末は平日"の条件で年月日を抽出できれば、VLOOKUP関数を使って 抽出可能とも思っているのですが、年月日の抽出方法がわかりません。 また、他によい方法があればご教授いただきたいのです。 よろしくお願いします。

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

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

こんばんは! 無理矢理って方法になりますが・・・ ↓の画像のように作業用の列をA・B・C列使い、 なおかつ、週末の表の方にもH列の1列を使わせてもらっています。 このようにややこしくなったのは金曜日が祝日の場合を考慮に入れたためです。 尚、金・木両日が祝日(← 実際あるかどうか判りません)の場合は別途考えなければならないと思います。 まず作業用の列の数式は C3セルに =IF(WORKDAY(D3+1,-1,$N$3:$N$25)=E3,ROW(A1),"") これで土日・祝日以外全てに数値が入ります。 B3セルに =IF(WEEKDAY(D3)=6,ROW(A1),"") これで金曜日だけに数値が入ります。 A3セルに =IF(AND(B3<>"",C3<>""),ROW(A1),IF(AND(B3<>"",C3=""),ROW(A1)-1,"")) これで祝日でない金曜日・または金曜日が祝日の場合は前日の木曜日の C列の行番号が入ります。 A3~C3セルを範囲指定し、C3セルのフィルハンドルでずぃ~~!っと下へコピーします (数式が1000行まで対応できるようにしていますので、そのくらいまでコピーしても構いません) A列を参照して別表を作成します。 補助列のH3セルに =IF(COUNT($A$3:$A$1000)>=ROW(A1),SMALL($A$3:$A$1000,ROW(A1)),"") I3セルに =IF($H3="","",VLOOKUP($H3,$C$3:$F$1000,COLUMN(B1),0)) とし、K3セルまでオートフィルでコピーします。 最後にH3~K3セルを範囲指定し、K3セルのフィルハンドルで 下へコピーすると画像のような感じになります。 尚、WORKDAY関数で祝日の一覧が必要になりますので、右側の表を利用しています。 そして、当方使用のExcel2003の場合ですが、 メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 以上、長々と書きましたが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m

AstroGuy
質問者

お礼

図解までして下さってありがとうございます。 皆さんの参考意見をまずは読まさせていただいて 難解なことが良くわかりました。 tom04さんの説明でやってみます。 ありがとうございました。

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

その他の回答 (4)

  • 135ok
  • ベストアンサー率34% (26/75)
回答No.5

添付資料を参照ください。 >土日祝祭日を除く として 価格の横に作業列を作成 D2 =WEEKDAY(A2,2) E2 =IF(D3<D2,"○","")    *翌日<当日の時、○、以外は空欄。 後は、フィルターオプションの設定で集計を行う。 *参考URLを参照方。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm
AstroGuy
質問者

お礼

何か簡単そうな? 参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

難しさに気づいて、そこで立ち止まっているところを見ると、関数でやれるのではないかと思っているのではないか。だからエクセルVBAの経験はないと思うが、 これを関数でやるのは、出来ない(に近い複雑になる)に近いと思う。VBAでやるべき課題と思う。 ーー VBAでやるのも関数でも、下記を作業列に作っておけば、処理が楽になると思う。 データの作業列に5年分に渉って 曜日(WEEKDAY関数で) 祝日(祝日テーブル5年分を各年で参照)年ごとに、参照テーブル範囲を変えることになろう。従って(VLOOKUP関数の第3引数)、式が変える必要があると思う) で 月ー木に渉って、木曜が祝日なら(出来れば水曜が祝日か)月ー水など、そうでなければ月ー木の平均を平均として出すことを考える。 ーー 関数のSUMPRODUCT関数で 祝日を仮に1として、曜日列1=日、6=金、7=土、「5=木AND祝日列1=祝」以外(これが複数条件)の平均が計算できるかもしれないが、 スタート(日)からエンド(土)の1週のスパンを捉えるのも、関数では複雑。そこで WEEKNUM関数があるから、作業列に年+週番号を振って、計算するセル(仮に金曜日の行)のWEEKNUM+上記条件で平均を出すとかも考えられるかも。ヒントだけであるが、関数では確実な見通しが立ちにくく、やる気がしない。

AstroGuy
質問者

お礼

図解までして下さってありがとうございます。 皆さんの参考意見をまずは読まさせていただいて 難度が高いことが良くわかりました。 imogasiさん。参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.2

》 金曜日が祝日とかの場合は木曜日の価格にしたい… 2008/12/29 以降は、木、金曜日の年度内週末がないがどうする? 2009/12/28 以降は、金曜日の年度内週末がないが年度内週末がないがどうする? 金、木、水曜とも祝日の場合(下記)はどうする? 2006/05/03 水 憲法記念日 2006/05/04 木 国民の休日 2006/05/05 金 こどもの日 2007/05/03 木 憲法記念日 2007/05/04 金 みどりの日

AstroGuy
質問者

お礼

参考にさせていただきます。 ありがとうございました。

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

作業列案ですが、 E2セルに =IF(WEEKDAY(A2)>WEEKDAY(A3),ROW(),"") と入れて下までコピィします。 週末の日付の時に、その行の番号が表示されると思います。 年月日のセルには =INDEX(A:A,SMALL(E:E,ROW(A1))) と入れて下へコピィします(エラー処理はしていません) 週末価格は Vlookup関数で得られると思います。  

AstroGuy
質問者

お礼

参考にさせていただきます。 ありがとうございました。

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

関連するQ&A