• ベストアンサー

Excel2016でシフト表からのデータ抽出

質問です。 Excelで添付ファイルの、左のような、シフト表から 「▽」のスタッフ(A~D)を抽出して、 右のような書式の、 黄色い部分に、「▽」のスタッフ(A~D)を 自動的に入力するようにすることは可能でしょうか? 関数で教えていただけると助かります。 VBAで教えていただけても助かります。

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

  • ベストアンサー
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.8

VBAを使うなら,スタッフ記号求めるユーザー定義関数(スタッフ関数)を作成してワークシートで使う方法が簡単だと思います. 考え方は (1) 日付列から▽を見つける. (2) ▽が見つかった行を求める. (3) (2)で見つけた行と A列が交差するセルの値(=スタッフ)を求める. 関数名をスタッフとし,パラメータに日付列番号を入力します. まず,VBAの標準モジュールに以下の関数を作成します. Public Function スタッフ(ByVal 日付列番号 As Long) As String Dim ▽セル As Range Dim ▽行 As Range Set ▽セル = Columns(日付列番号).Find(What:="▽") Set ▽行 = Rows(▽セル.Row) スタッフ = Intersect(Range(”A:A"), ▽行).Value End Function K3以降に日付が入力されているとして,M3に以下の関数を入力します. =スタッフ(K3+1) この関数を M4以降にコピーすれば OKです.

hu19901108
質問者

お礼

皆さんありがとうございます。 ただ、僕の理解が追い付かないです。 YOUTUBEのExcel兄さんや金子さんで VBAやエクエル勉強 始めたばかりなので、 実務に生かせるよう、 皆さんからいただいた回答 参考に頑張ります。  どなたかからの方法で実現出来たら、必ず報告 します、エクセルの先輩方! よろしくお願いします。

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

その他の回答 (7)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.7

Excel2016を使用していないので動作確認はできていませんが,以下のように XLOOKUP関数を使えば可能なのではないでしょうか. =XLOOKUP("▽",日付の列,A:A) 問題は日付の列をどうやって求めるかです. 日付が 1行目に入力されていると仮定した場合,M2に以下の数式を入力すれば日付が入力されている列をアルファベットで特定できます. =SUBSTITUTE(ADDRESS(1,K2+1,4,1),1,) この結果は Bになるので,以下の数式で B:Bに変換できます. (*:*の *を Bに置き換えています) =SUBSTITUTE("*:*","*",SUBSTITUTE(ADDRESS(1,K2+1,4,1),1,) ) 最終的には M2に以下の数式を入力し,M3以降にコピーすれば良いのではないかと思います(INDIRECTで B:Bという文字列を参照に変換しています). =XLOOKUP("▽",INDIRECT(SUBSTITUTE("*:*","*",SUBSTITUTE(ADDRESS(1,K2+1,4,1),1,) )),A:A) 日付は 5日以降も続くと思いますので,上記の数式を入力したあとに必要なだけ列を挿入すれば良いかと思います.

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

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

例データ Sheet1で 人\日 1 2 3 4 5 6 7 A ▼ B ▼ C ▼ ▼ D ▼ ▼ ▼ Sheet1は 1行目B列より日付数字のみ。 (数字は日だけ。日付シリアル値ではないので注意。) B2:から当番の日に▼が入る。 ーーー Sheet2 A2から下に日付の数字。 (数字は日だけ。日付シリアル値ではないので注意。) 標準モジュールに Sub test01() Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '--- sh1.Activate sh1.Range("B2").CurrentRegion.Select '---- For Each cl In Selection If cl.Row <> 1 Then '日付行でなければ If cl = "▼" Then m = sh1.Cells(cl.Row, "A") '人 d = sh1.Cells(cl.Column) '日 MsgBox d & " " & m Set r = sh2.Range("A1:A100").Find(what:=d) sh2.Cells(r.Row, "c") = m End If End If Next End Sub 実行 Sheet2のA1:B○に 1 D 2 C 3 D 4 D 5 A 6 B 7 C 8 ーーー この課題は、エクセルの表の「組み換え」問題です。 そもそも適当な操作が設けられていないと思う。 関数でも、やっとこさ、できるが、式は易しくはない。  いろいろこういう問題に今後ぶつかりそうなら、VBAを勉強すべきと思うので、参考に上げてみる。 VBAでは、For Eachで、範囲全セルを簡単にとらえられるので、後はSheet1における、見出し行・見出し列のデータを採って、Sheet2で、Cells(計算後の行、計算後の列)の位置へ、再現するだけです。

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1635/2480)
回答No.5

No3の補足です。 日付なので連続していると思いますが仮に中抜けなどがある場合を考えると以下の方がいいかもしれません。 K列の日と1行目の日が最初に一致したデータを取り出します。 =IFERROR(INDEX($A$3:$A$6,MATCH("▽", OFFSET($B$3:$B$6,0,MATCH($K2,$B$1:$F$1,0)-1),0),1),"")

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1635/2480)
回答No.4

No2の訂正です。 ▽がない場合#N/Aにならないように以下のようにしてください。 =IFERROR(INDEX($A$3:$A$6,MATCH("▽", OFFSET($B$3:$B$6,0,ROW(1:1)-1),0),1),"")

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

添附圖參照(Excel 2019) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1635/2480)
回答No.2

左の表がA1からF6までだとして、右の1で表示したいセル(画像だとM2だと思います)に以下の式を入れて下にコピーして試してみてください =INDEX($A$3:$A$6,MATCH("▽", OFFSET($B$3:$B$6,0,ROW(1:1)-1),0),1)

hu19901108
質問者

お礼

ありがとうございました。 大変助かりました。

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

以下の方法でいかがでしょう。 11月がA1セルの場合、 G3セル =A3 と入力してG6セルまで下にドラッグコピー B7セル =VLOOKUP("▽",B3:$G6,6,FALSE) と入力してF7セルまで右にドラッグコピー I2~I6セルにそれぞれ 日 月 火 水 木 と入力 J2セルに =B7 J3セルに =C7 J4セルに =D7 J5セルに =E7 J6セルに =F7

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

関連するQ&A

  • excel シフト表を元に、ポスト配属表を作成

    会社からいただくシフト表を元にして、 excelのシフト表(印刷用ベースのため表示変更不可)にポスト番号を打ち込むと、 個人作成した日付別のポスト配属表のようなものに 名前が自動挿入されるようにしたいのですが? ※その日のチーム編成を一目で把握したい。 例・・・ シフト表:D4に「1」と打ち込む →  ポスト配属表:S4に氏名の「山田 太郎」が自動挿入される。 上記に見合った関数式があればご教授ください。 ※シフト表・ポスト配属表・・・日付欄には表示される書式は変えていますが              共に「2016/10/11」のようにそれぞれ入力してあります。 何分、excel初心者で只今関数を学習中。VBA、マクロはさっぱりです。(ToT;)ゝ 説明不足があればご教授ください。

  • Excelで勤務シフト表を作りたいのですが、セルの設定方法がわかりませ

    Excelで勤務シフト表を作りたいのですが、セルの設定方法がわかりません。 シート1の「シフト表」に勤務場所A・B・Cを入力するだけで、自動的にシート2の 「配置メンバー」へ配置場所 対 人名の表が並べ替えられて出力されるようにするには、 どのセルにどのような関数を設定すればよいのでしょうか? マクロやVBAをなどを使わず、もっとも簡単にできる方法を教えてください。 (掲載画像は関数などを使わず、手作業で入力したものです。)

  • シフト管理表の作成でわからないことが・・・

    エクセルの関数やマクロはほぼ初心者で、わからないことだらけなので教えてください。 シフト管理表で、半月ごとのシフト表(作成用)で、日単位のシフト表(自動作成)が出来るようにしたいのです。 半月シフト      a     b    c     d     e  ・・・(人) 1/1 1~5        2~3        2~5 1/2 1~5   2~5        2~3 1/3 2~5   1~3  2~3 上記ように作成したら日単位で 1/3 b 1~3 l c 2~3 l a 2~5 l のように日単位で別シートに自動作成できるようにしたいのです。 (dとeは日単位には表示されずに、出勤者のみ時間が早い順に表示) フォーマットは決められており、現在手入力の為ミスが多く時間もかかり・・・ わかりにくかったらごめんなさい もしかしたら簡単かも?しれないけどまったくわからないのでお願いします。

  • Excel2007でのデータ抽出

    前任者が作ったExcelでの給料計算表を使用していますが、先日そこに金種計算表を組み込めないかと言われました。 当方VBAなどは全くの初心者です。 VLOOKUP関数を使ってデータテーブルから金額を読み込み金種計算が出来るようにはしてみたのですが、データテーブルを更新すると金種計算表にある数式がエラーを吐いてしまいます。 金種計算表には一行目から =IF(B4="","",VLOOKUP(B4,テーブル!D4:BG4,10)) と関数を入れてあります。 B4は氏名欄です。 その際にはちゃんと金額が表示されていますが、入力フォームからデータテーブルを更新すると =IF(B4="","",VLOOKUP(B4,テーブル!#REF!,10)) となってしまいます。 金額を手入力すればいいのですが、全社員分となると膨大な量になってしまいます。 なんとか自動で抽出出来ないものでしょうか。 お知恵をお貸しいただければ幸いです。 稚拙な説明ではありますがよろしくお願いします。

  • Excel2007 表からの抽出で・・・

    お世話になります。 何日がかりで頑張ってますが、私の頭では限界で(^_^;) お助けください<m(__)m> Excel2007で作成 年間ねスケジュール表があり、その中から別シートの表に抽出方法がわかりません・・・ いろんな関数で試してみましたがギブアップです・・・(T_T) sheet1に「年間スケジュール」があり↓ A |B | C| D| E| F| G |H |I |J |K |L M N O ------------------------------  4月  | 5月  |  6月  | 7月・・・  -------------------------- 1|日|A町|1|火|B町|1|金|A町|・・・・ ----------------------------- 2|月|D町|2|水|C町|2|土|B町|・・・・ ---------------------------- 3|火|B町|3|木|B町|3|日|A町|・・・・ この表から勤務表↓に、その月の日にちのところに出勤場所を自動で表示できるような表を作成したいのですが・・・・ 2012年4月(←手入力して毎月変更) 日 曜日 出勤場所 1 | 火 | A町 ------------------- 2 | 水 | D町 ------------------- 3 | 木 | B町 ---------------- 4 | 金 ------------------- 5 | 土 | ---------------- 6 | 日 | わかりづらい質問ですみません・・・ よろしくお願いします・・・

  • エクセルで複数の条件を満たした値を返す関数を教えてください。

    エクセルで複数の条件を満たした値を返す関数を教えてください。 (画像を添付しました) 左の表(A1からD9)のデータを右の表でIDと製品を選択すると 会社名、名前が抽出するような関数を教えてください。 INDEXやMATCHなど使ってみたんですが、組み方が悪いのかうまく抽出できませんでした。 よろしくお願いします。

  • excel2003 複数条件検索後の合計を表示

    こんにちは。 excel2003で在庫表を作成しているのですが複数検索で一致した項目の積の返し方が判らないので教えて頂きたいです。 色々試しましたが関数のネストが上手く出来ず困っています。 VBAは使えません。 ご面倒ですが関数で教えて頂けたら有難いです。 勉強不足で申し訳ないです。 画像の左のシート・商品の出庫(入庫は同じシートをコピーして使っています) 画像の右のシート・商品の在庫 画像の右シートには何とか条件検索の抽出が出来ましたが、同じ商品で同じカラーの合計数量を返したいです。 右シートには次の関数を入力しています。 =IF(OR($A$3="",COUNTIF(左のシート!$E$3:$E$500,$A$3&B3)=0),"",INDEX(左のシート!$D$3:$D$500,MATCH($A$3&B3,左のシート!$E$3:$E$500,0))) 説明不足で判りづらいかもしれませんがよろしくお願い致します。

  • Excelで[表1]にあって、[表2]にないものを抽出する関数

    Excelで[表1]にあって、[表2]にないものを抽出する関数 例)[表1]   [表2]    A社     A社    D社     D社    R社     P社    P社     R社    D社    F社    F社 上記は簡単に書きましたが、表1に重複するものも含め、300社程度あるなかで 表2にリストアップされていない会社を見つける関数やその他方法論があれば ぜひ教えてください! (例でいえば、F社を見つける方法です。) 抽出するのは別シートでも、同じシートでも構いません。 Excel2003でも対応できるものであれば、なお嬉しいです。 よろしくお願いします。

  • 表の中でもっとも多く使用されている文字(数字)を抽出するには

     |A|B|C|D| -------------- 1|あ|い|う|え| -------------- 2|お|あ|あ|か| -------------- 上記は1行目に左から「あ」「い」「う」「え」が入力されていることを表しています。 この表の中から、一番多く入力されている文字だけを別のセルに抽出させるにはどのようにしたら良いでしょうか。 上記の例を使用すると、A列の5行目(任意のセル)に「あ」と抽出するようにしたいです。 いろいろと調べてみましたが、このように表の中で最も多く入力されている、「文字」または「数字」だけを抽出するという処理方法がみつかりませんでした。 マクロなら可能でしょうか? このような処理ができる関数もなさそうなので、無理なのかな。 アドバイスを御願い致します。

  • 条件に合うデータを別のブックに書き出したい

    お世話になります。 エクセル2003で、数量を入力した「行」だけを別のブックに書き出したいのですが、機能や関数を教えてください。 (表1)    A     B     C    D 1 商品名  単価  数量  合計 2  い    100   4    400 3  ろ    500   2    1,000 4  は    200 5  に    150 6  ほ    330 7  へ    230   5    1,150     ・     ・    ・    ・     ・     ・    ・    ・ 17  た    180   2    360 と、17行、4列の表があります。この「数量」が入力された行だけ、 (表2)   A    B    C   D 1 数量 単価 合計 商品名 2  4   100  400   い 3  2   500  1,000  ろ 4  5   230  1,150  へ 5  2   180  360   た (表2)のように書き出したいのです。 (表1)から抽出される行数は、必ず4行以下です。 (表1)に数量を入力すると、(表2)が自動的に変わるのが好ましいです。 マクロやVBAは苦手なのでエクセルの機能や関数で教えていただければ幸いに存じます。 情報が足りなければ補足します。 宜しくお願いします。

専門家に質問してみよう