• ベストアンサー

EXCEL数式について質問です。

EXCEL数式について質問です。アドバイスを頂きたいです。 (1)やりたいこと。  作業者毎のイベントをマスタ化し、  スケジュール表に合う日付にマスタからのイベントを抽出したい。  EXCEL数式またはVBAにて抽出 (2)方策  ・B1セルにて作業者名を選択する。  ・B3~F3セルは1週間のスケジュール表   B5~F5セルに AさんイベントH2:H5 BさんイベントK2:K5   を表示させたい。   (B3~F3とI2:I5(Aさん日付)K2:K5(Bさん日付)を照合する) 以上の件アドバイスよろしくお願い致します。

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

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

>もしイベント欄が2つ3つ欲しい場合にはどのようにすればよろしいでしょうか。  幾つかの方法が考えられますが、いずれも一長一短があります。  まず、共通部分に関して説明致します。  今仮に、作業者の氏名の入力欄がSheet1のB1セルであり、Sheet1のB列~H列にスケジュール表があり、  スケジュール表は、行番号で3行が日付欄、4行が曜日欄、そして、5行目以下が抽出したイベントの表示欄であるものとします。  又、Sheet1のJ列がAさんのイベント内容欄、K列がAさんのイベントの日取り欄、L列がBさんのイベント内容欄、M列がBさんのイベントの日取り欄、N列がCさんのイベント内容欄、O列がCさんのイベントの日取り欄であり、 J1セルには「Aさんイベント」、L1セルには「Bさんイベント」、N1セルには「Cさんイベント」と入力されているものとします。  まず、Sheet1のB4セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/DAY($B$3)),$B$3+COLUMN()-COLUMN($B$3),"")  次に、Sheet1のB4セルをコピーして、Sheet1のC3~H4の範囲に貼り付けて下さい。  次に、Sheet1のB3~H3のセル範囲にあるセルの書式設定の表示形式を[日付]の 3月14日 として下さい。  次に、Sheet1のB4~H4のセル範囲にあるセルの書式設定の表示形式を[ユーザー定義]の aaa として下さい。  これで、Sheet1のB3セルにその週の最初の日付を入力するだけで、C3~H3には、その週の他の日付が表示され、その下の4行目には各曜日が表示されます。    以下は、各方法によって異なる点に関する説明です。 【方法その1】  作業列を必要とする方法です。  今仮に、Sheet2のA列を作業列として使用するものとします。  まず、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/DAY(INDEX(Sheet1!$J:$O,ROW(),MATCH(Sheet1!$B$1&"イベント",Sheet1!$J$1:$O$1,0)+1))),INDEX(Sheet1!$J:$O,ROW(),MATCH(Sheet1!$B$1&"イベント",Sheet1!$J$1:$O$1,0)+1)+COUNTIF(INDEX(Sheet1!$J$1:$O$1,MATCH(Sheet1!$B$1&"イベント",Sheet1!$J$1:$O$1,0)+1):INDEX(Sheet1!$J:$O,ROW(),MATCH(Sheet1!$B$1&"イベント",Sheet1!$J$1:$O$1,0)+1),INDEX(Sheet1!$J:$O,ROW(),MATCH(Sheet1!$B$1&"イベント",Sheet1!$J$1:$O$1,0)+1))*10000000,"")  次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。  次に、Sheet1のB5セルに次の関数を入力して下さい。 =IF(ISERROR(1/(INDEX($J:$O,MATCH(B$3+ROWS($5:5)*10000000,Sheet2!$A:$A,0),MATCH($B$1&"イベント",$J$1:$M$1,0))<>"")),"",INDEX($J:$O,MATCH(B$3+ROWS($5:5)*10000000,Sheet2!$A:$A,0),MATCH($B$1&"イベント",$J$1:$M$1,0)))  次に、Sheet1のB5セルをコピーして、Sheet1のB5~H5の範囲に貼り付けて下さい。  次に、Sheet1のB5~H5の範囲をコピーして、同じ列の(行番号で)6行目以下に貼り付けて下さい。 【方法その2】  この方法は作業列を設ける必要はありませんが、元データとなるイベントの日取りが順序良く(昇順でも降順でも、どちらであっても構いません)並んでいる必要があります。  まず、Sheet1のB5セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/(INDEX($J:$O,MATCH(B$3,OFFSET($K:$K,,MATCH($B$1&"イベント",$J$1:$O$1,0)-1),0)+ROWS($5:5)-1,MATCH($B$1&"イベント",$J$1:$O$1,0))<>"")/(INDEX($J:$O,MATCH(B$3,OFFSET($K:$K,,MATCH($B$1&"イベント",$J$1:$O$1,0)-1),0)+ROWS($5:5)-1,MATCH($B$1&"イベント",$J$1:$O$1,0)+1)=B$3)),INDEX($J:$O,MATCH(B$3,OFFSET($K:$K,,MATCH($B$1&"イベント",$J$1:$O$1,0)-1),0)+ROWS($5:5)-1,MATCH($B$1&"イベント",$J$1:$O$1,0)),"")  次に、Sheet1のB5セルをコピーして、Sheet1のB5~H5の範囲に貼り付けて下さい。  次に、Sheet1のB5~H5の範囲をコピーして、同じ列の(行番号で)6行目以下に貼り付けて下さい。 【方法その3】  この方法は作業列を設ける必要はありませんし、日取りが順不同に入力されていても構いませんが、関数のネストレベルが7を上回っているため、Excel2007以降のバージョンでなければ使用する事が出来ませんし、SUMPRODUCT関数を使用しているため、元データの行数が数千行にもなる場合には、計算処理のに要する時間が長くなり過ぎる恐れがあります。  まず、Sheet1のB5セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET($K:$K,,MATCH($B$1&"イベント",$J$1:$O$1,0)-1),B$3))),INDEX($J:$O,SUMPRODUCT((COUNTIF(OFFSET($J$1,1,MATCH($B$1&"イベント",$J$1:$O$1,0),ROW($J$1:INDEX($J:$J,MATCH(9E+99,OFFSET($K:$K,,MATCH($B$1&"イベント",$J$1:$O$1,0)-1))-ROW($J$1)))),B$3)<ROWS($5:5))*1)+ROW($J$1)+1,MATCH($B$1&"イベント",$J$1:$O$1,0))&"","")  次に、Sheet1のB5セルをコピーして、Sheet1のB5~H5の範囲に貼り付けて下さい。  次に、Sheet1のB5~H5の範囲をコピーして、同じ列の(行番号で)6行目以下に貼り付けて下さい。

yu-ssk
質問者

お礼

ありがとうございました。 非常に役に立ちました。^^

その他の回答 (2)

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

 まず、B5セルに次の数式を入力して下さい。 =IF(ISERROR(1/(INDEX($H:$K,MATCH(B$3,OFFSET($I:$I,,MATCH($B$1&"イベント",$H$1:$K$1,0)-1),0),MATCH($B$1&"イベント",$H$1:$K$1,0))<>"")),"",INDEX($H:$K,MATCH(B$3,OFFSET($I:$I,,MATCH($B$1&"イベント",$H$1:$K$1,0)-1),0),MATCH($B$1&"イベント",$H$1:$K$1,0)))  次に、B5セルをコピーして、C5~F5の範囲に貼り付けて下さい。  以上です。

yu-ssk
質問者

補足

ご回答りがとうございました。 もうひとつ質問お願い致します。 もしイベント欄が2つ3つ欲しい場合にはどのようにすればよろしいでしょうか。 Aさんイベント 練習 12/19 マッサージ 12/19      12/19 イベント  (月)      練習      マッサージ などのようです。 以上よろしくお願い致します。

回答No.1

こんな感じでやってみるのはどうでしょう? ワークシート側 1.B1セルは入力規則を用いてドロップダウンを作る 2.ドロップダウンにて値が変わったらマクロ実行 マクロ側 1.B3~F3の値を取得 2.B1の値を取得 3.B1の値でチェックする列がI列なのかK列なのかを決める 4.対象の列にB3~F3の値があるか上からチェック 5.あれば左隣の値をB5以降に入れる どんなアドバイスが欲しいのか分からなかったので、 処理プロセスのアドバイスということで(^^;

関連するQ&A

  • EXCEL数式について質問です。

    EXCELをつかったスケジュール管理を行いたいと思っています。 上記内容に対して、数式がわからないところがあるのでアドバイスお願い致します。 添付に現状のフォーマットがあります。 (確認をお願い致します) まず (1)Bセルに開始日を入力    Cセルに終了日を入力 (2)D:Fに反映する。(数式をつかった) ※D:Fセルへの数式をつかった表示は出来ますが、  BとCセルが日付(a月a日)に対してD~Fは2/B 2/M 2/Lでの管理にしたいです。 定義 2/B: 1日~10日 2/M 11日~20日 2/L 21日~31日 作業列を使用しても大丈夫です! 以上の内容アドバイスをよろしくお願い致します。

  • 【Excel】数式のコピー

    Excel2003を使用しています。 他人が作成した表の行数を増やして、数式もコピーしたいのですが、その数式は別シートを参照していて、行・列が連続していないので、単純にコピー → 貼り付けでは、正しい数式を貼り付けることができません。 現在は、とりあえず、コピー&貼り付けした後に、数式を修正しているのですが、規則性があるので、手作業で数式を修正する以外に何か良い方法はないでしょうか? Sheet1…参照するシート Sheet2…数式が入力されているシート Sheet2に入力されている数式は  C7 = Sheet1!B7  D7 = Sheet1!C7  E7 = Sheet1!D7  F7 = Sheet1!E7  G7 = Sheet1!F7  H7 = Sheet1!G7  I7 = Sheet1!B8  J7 = Sheet1!C8  K7 = Sheet1!D8     :     :  C16 = Sheet1!B25  D16 = Sheet1!C25  E16 = Sheet1!D25  F16 = Sheet1!E25  G16 = Sheet1!F25  H16 = Sheet1!G25  I16 = Sheet1!B26  J16 = Sheet1!C26  K16 = Sheet1!D26 以上が1ページ分で、C列~H列、I列~K列はそれぞれ参照する行が1行おきになっています。 Sheet1の1ページは26行ありますので、2ページ目のSheet2の数式は  C17 = Sheet1!B33  から始まり  D17 = Sheet1!C33     :     :  H17 = Sheet1!G33  I17 = Sheet1!B34  J17 = Sheet1!C34  K17 = Sheet1!D34     :     :  K26 = Sheet1!D52  までが、2ページ目となり、これが下方向へ続いています。 これらの数式を変更することなどで、コピー&貼り付けができないかと思い、質問させていただきました。 説明がわかりづらくて、申し訳ありませんが、よろしくお願いします。

  • Excel2003 結合したセルに数式をコピー

    結合したセルに連続した数式を入れたいのですが、なかなか思い通りに 行きません。助けてください。宜しく御願いします。 【やりたいこと】 F3とF4が結合してF3、F5、F6とF7が結合してF6、F8・・・ みたいにセルが並んでいます。 F3とF4の結合セル「F3」には数式『='H21'!$F2』 F5には数式『='H21'!$B2』 F6とF7の結合セル「F6」には数式『='H21'!$F3』 F8には数式『='H21'!$B3』 F9とF10の結合セル「F9」には数式『='H21'!$F4』 F11には数式『='H21'!$B4』 F12とF13の結合セル「F12」には数式『='H21'!$F5』 F14には数式『='H21'!$B5』 このように数式をコピーしていきたいのですが、 結合セルが邪魔をして上手くコピー出来ません。 ご教授御願いします。

  • Excel関数と数式

    教えて下さい Excel2003で1ヶ月の表を作って使用量と残数を計算させようとしているのですが、上手く行きません下記に表の内容を記載しますので、簡単な計算方法を教えて下さい。 1日~30日   A  B  C  D  E  F  G  H  I  J  K  L  M 1 朝 10 11 14                    15 2 夕 15 22 18                     10 3 入   20 4 残    4  8                     3 残=B2-C1 M4=D2-M1 M4セルに休み(空白セル)を除いた数式を組みたいのです、IF関数を使ったのですが、上手く行きません。 何卒、ご指導宜しくお願いします。

  • エクセルの数式で質問があります

    以下のような面談表を作りました。 B10に『1』とうつとB2に『太郎』と出るようにVLOOKUPで数式を作りました。 次にこれを発展させてI14に『1』といれると H10とI10にそれぞれ『6日(火』と『13:30~13:45』と表示されるようにするには H10とI10にどういった関数を入れたらいいでしょうか。 自分なりに調べてはみたのですが、ある範囲の中から条件に合致するセルを 選び、指定された範囲の左端や上のセルを返すといったことをどうやってやるのかわからずで。 できれば式の解説まであると非常にありがたいです。 とても困っています・・・

  • エクセルの数式について質問です。

    添付の画像を元にご説明させて頂きます。 元データーに書かれた項目「品番」・「納期」・「数量」があり、 こちらを、その隣にある日付の書かれた表に反映させる為の数式をご教授頂きたく投稿させて頂きました。 具体的には、セルA3:C17までの範囲を検索し、 隣の表の品番と納期の2つの条件を満たした値(数量)をH3のセルに返す数式です。 数式を記載する表の日付は必ず連続な日付である必要がある為、ピボットテーブルではできず、 IFやINDEX,MATCH等でもやってみたのですが上手くいきませんでした。 このような場合どの様な数式を使用すれば必要な値を返すことが出来るか教えて下さい。 宜しくお願い致します。

  • EXCEL数式について質問です。

    EXCELの数式について質問です。 添付の画像を参照してアドバイスをお願い致します。 手順 A2~A6セルに製品名有り B2~B6セルには開始時間を入力 C2~C6セルには終了時間を入力 ↓ F2の次加工開始時間表を基準に C2時間の終わりに対して次加工開始時間を自動で反映させたい。 (例) 開始 7:30 終了 9:05 次加工開始時間 10:30としたい。(※9:00までの値じゃないため。) 定義表  9:00      10:30 以上の件わかりづらい説明ですがよろしくお願い致します。

  • Excel数式入力

    セルC2の合計がF1の数値と同じになるようにセルB4に数式を入力したいのですが。D列が数式となります。尚、F1の値は都度手入力で変更されます。数式を何度か入れたのですが数値がちぐはぐになりうまくいきません。B4に入力する関数もしくは何か良い解決策はあるでしょうかよろしくお願いします。

  • セル内の数式中の文字列を検索

    セル内に数式が入っている場合、その数式中の文字列を検索する関数がありますか。 例えばB1セルに=Sheet1!K2*Sheet2!K2*Sheet5!K2 B2セルに=Sheet4!K2*Sheet3!K2*Sheet6!K2 D1セルにB1の数式内のSheet2という文字があれば1を表示させ    無ければ0を表示させるというような関数はあるでしょうか。

  • EXCEL数式について

    EXCELの数式についてアドバイスお願い致します。 方法 E1~E4セルの文字を限定にA1~A7のセルを範囲にして C1~C7の日付の文字をF1~に反映させたいです。 添付画像を参照願います。 アドバイスのほどよろしくお願い致します。