映画のエンドロール観る派?観ない派?

使用ソフトは、excel2003です。
簡単な計算式でできるのか、データベース的な知識が必要なのか
よく分からず、その手法についてネットで検索しようとしても
どう検索していいのかわからなかったので、ここに文章で
質問させて頂きます。
私のスキルは、自称「初心者レベルであれば上級者」くらいです(笑

【質問内容】
勤怠管理でエクセルで一覧表を作成しています。

 No | 氏名 | 2/1 | 2/2 | 2/3 | 2/4 | ・・・・
 1   田中   ○    ○    ×    ○
 2   佐藤   ○    ×    ○    ○

上記のような感じで作成しています。
(ずれて表記されていたらすいません)

(1)これを別シートで、特定のセルに「No」若しくは「氏名」を入力するとその個人の勤務一覧表が完成するようにしたい。
(A4版の配布できるような勤務表に)

氏名【 田中 】←ここに入力する等
2/1 ○
2/2 ○
2/3 
2/4 × ← 一覧表に

IF構文で、1の場合は・・2の場合は・・と羅列するには
絶対量が多いため、無駄な努力となり
もしかして簡単な構文や、手法があるのでは?と質問です。

なお、日によって勤務時間が異なり
同一日でも、業務内容によって3パターンの勤務時間があるので
上記、○や×のところに、◎や●を使って3パターンを作り
別に日にちごとにそれに対応した勤務時間の表を乗せ
それらをうまく組み合わせることで、勤務日及び勤務時間まで
表記できれば、なおさらうれしい限りです。

あいまいな表現で、知りたいことがうまく伝わらなかったら
すいませんが、分かる方いらっしゃいましたら、
どうか、宜しくお願い致します。

A 回答 (8件)

おそらく1枚の印刷シートに一個人の勤務表を作りたいのだと思います。


であれば、gyouda1114 氏の数式の引用列番号を氏名により可変にしてあげた方が良いと思われます。具体例として、
=INDEX(Sheet1!C:AD,MATCH(B$1,Sheet1!B:B),ROW(A1))
を記号を表示する初日の数式として入力、以下コピー。
(注:B1セルに氏名(可変)としています。場所が違う場合、B$1の部分を変更)
記号ではなく勤務時間とするなら、
○ 勤務時間1
× 勤務時間2
◎ 勤務時間3
● 勤務時間4
のような表を作り、上の式の代わりに
=vlookup(上の式,表の範囲,2)
としてあげます。2日目以降へコピーする場合は表の範囲を絶対参照にするか行指定なしにして下さい。
例:AX$1:AY$4 や AX:AY など
    • good
    • 0

回答番号:No.6です



Shet2が抜けてました修正してください

Sheet2
B1に =INDEX(Sheet1!$B:$AD,COLUMN(B1),ROW(B1))
B2セルから下行及びC1より右列にオートフィルでコピー

画像の上はSeet1です。
    • good
    • 0

お望みのものであればいいのですが


B1に =INDEX(Sheet1!$B:$AD,COLUMN(B1),ROW(B1))
B2セルから下行及びC1より右列にオートフィルでコピー
「EXCEL データベース?抽出による一覧」の回答画像6
    • good
    • 0

sheet2


A2=IF(COUNTA(Sheet1!$1:$1)>ROW(),OFFSET(Sheet1!$A$1,0,ROW()),"")
B2=IF(OR(B1="",A2=""),"",OFFSET(Sheet1!$A$1,MATCH($B$1,OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B:$B)),0)-1,ROW()))
32行目までフィル

こんな感じかな?
    • good
    • 0

実現したい事はよくわかりました。


私もチャレンジしてみましたが簡単には出来ませんでした。
やはりデータベース的な知識が必要だと結論付けました。

VLOOKUP関数、DGET関数などを使うと
データベースのテーブルのように
データを扱う事は複雑な条件でなければ可能です。

しかし質問者様の「一覧表」は
テーブルの項目名とデータが混ざってしまっているようです。
データベースのテーブルを設計する時は正規化という作業が必要です。

元ネタを以下のように作り変えれば「勤務表」を作る事は可能です。

<勤怠>
NO日付勤怠
12/1◎
12/2×
12/3●
22/1○
22/2○
22/3○

<名前>
NO氏名
1田中
2佐藤

このように元ネタを作り変え、VLOOKUP関数などを
使えば出来ると思います。
一覧をコピーし、
「形式を選択して貼り付け→行列を入れ替える」
などが便利だと思います。

しかし質問者様は「一覧表」から作りたいのですよね。
お役に立てなくて残念です。
    • good
    • 0

No.2の補足です!


Sheet2のB2セルのオートフィル「+」のところでダブルクリックしてください。
これで2/28まで表示されると思います。
    • good
    • 0

一例ですが・・・


Sheet1のC2から○とかデータが入っているとします。
列方向にはC3から2/1・2/2・・・2/28と、その月の最後までの日付

Sheet2のA列にはA2から、2/1・2/2・・・2/28まで日付
B1セルには氏名ではなく、社員Noを入力した場合にB2セル~B29セルに
○・◎・●等を表示させる方法として回答します。

B2=IF($B$1="","",INDEX(Sheet1!$C$2:$AD$12,$B$1,DAY(A2)))
($AD$12の12部分は社員数によって変わります。当方で勝手に11名として試したものをコピペしました)

この場合はSheet1のデータの中に○・◎・●等表示されているそのままがSheet2に反映されると思います・・・

もし見当違いの回答なら軽く読み流してください。m(__)m
    • good
    • 0

下記の検索例あたりがお求めのものに近いような気がします。



「Excel 検索 抽出 関数」の検索結果
http://www.google.co.jp/search?hl=ja&q=Excel%E3% …
    • good
    • 0
この回答へのお礼

DGET関数というものですね。
関数については、基本的なものしか知識がないため、
ちょっと読み込んで勉強してみます。
曖昧な質問に回答して頂きありがとうございます!

お礼日時:2009/01/29 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!