ハマっている「お菓子」を教えて!

2000から5000という社員番号があるとします。
その社員がその月出勤した分だけ行が存在します。
その日ごとに隣の列にその日残業した分数が記入されているのですが…

たとえば2100の社員は今月何日出勤して何日残業をしたのか?
ということを返せる関数はありますでしょうか?
残業の合計分数等は必要ありません。

「2100」と聞いて「10(残業日数)/20(出勤日数)」と返したいです。
(1)2100はいくつあるのか?
(2)残業分数を記入した列は「0」以外はいくつあるか?
ということになります。


マクロでしか出来ないようでしたらそれでも結構です。
どうぞよろしくお願いいたします。

「社員ごとに抽出作業」の質問画像

A 回答 (6件)

merlionXXです。



> なにか私が悪いのでしょうか・・

あなたが悪いのではなく、思うにA列の数字が数値ではなく文字列なのではないでしょうか?
ならば
=SUMPRODUCT((A1:A100="2100")*(B1:B100>0))
でB列が0より大きく、A列が文字列で 2100 の合計を返すはずです。
(検索する数字を " " で囲んでください。)

この回答への補足

ありがとうございました!
出来ました!″”が必要だったんですね
参考になりました。


現在皆様のアドバイスを参考に集計しているのですが
A2を社員番号
B2を社員名
C2を出勤日数
D2を残業日数
としています。

A2に社員番号を入れて社員名と出勤日数を一気に繁栄させるところまではできたのですが、
D2を反映させるところで躓いています。

=SUMPRODUCT((DGL提出用!C:C="2100")*(DGL提出用!H:H>0))で "2100" の部分をA2のセルを見に行くことはできませんか?
=SUMPRODUCT((DGL提出用!C:C=A2)*(DGL提出用!H:H>0))
だとうまく返せなくなり0になってしまいます。
もちろん
=SUMPRODUCT((DGL提出用!C:C="A2")*(DGL提出用!H:H>0))では
無理でした…

この場合どうしたらよろしいでしょうか…
何度もすみません。

補足日時:2009/04/14 14:03
    • good
    • 0

> ″”が必要だったんですね



それは今回の検索範囲の社員番号が文字列だったからです、数値なら必要ありません。

> =SUMPRODUCT((DGL提出用!C:C=A2)*(DGL提出用!H:H>0))
> だとうまく返せなくなり0になってしまいます。

それで本当に0が返りますか?NUMエラーではないのですか?
SUMPRODUCT関数でC:Cのように列全体を選択することはできません。
=SUMPRODUCT((DGL提出用!C2:C1000=A2)*(DGL提出用!H2:H1000>0))
のように有効な範囲を指定してください。
なお、この場合、A2に入れるのは検索範囲の社員番号が文字列だったらここも文字列で入れなくてはいけません。
    • good
    • 0
この回答へのお礼

ありがとうございました!
無事出来上がりました。

まだまだ勉強不足で申し訳ございませんでした。
ご丁寧にご教授いただき感謝いたします。

お礼日時:2009/04/14 16:32

SumProduct関数補足します。


SumProduct関数で0しかでないのは、SumProduct関数の最後に数量の掛け算がないからです。
分かりやすく言うと、件数をカウントしたい場合は
SumProduct(([条件1])*([条件2])*([条件3])*・・・・・*1)
と最後の*1が必要なのです。
これが商品の個数の合計にしたければ
SumProduct(([条件1])*([条件2])*([条件3])*・・・・・*[個数])
値段の合計であれば
SumProduct(([条件1])*([条件2])*([条件3])*・・・・・*[値段])
そして質問にあります時間の合計でしたら
SumProduct(([条件1])*([条件2])*([条件3])*・・・・・*[時間])
です。
ですので、
=SUMPRODUCT((A1:A100=2100)*(B1:B100>0)*B1:B100)
としてみてください。
また、SumProduct関数の説明ページのリンクを張ります。参考になれば幸いです。

参考URL:http://pc.nikkeibp.co.jp/pc21/special/hr/hr6.shtml
    • good
    • 0
この回答へのお礼

ありがとうございました。

SumProductをなかなか使ったことがなかったので
ご迷惑をおかけしました。
とても参考になりました!

お礼日時:2009/04/14 16:33

[回答番号:No.2この回答への補足]に対するコメント、



》 なにか私が悪いのでしょうか・・・

そのとおり。貴方が添付した図をよ~く見てください。
2100 は「0以上」でなく「0を超える」数値がありません。0 しかないではありませんか!

この回答への補足

ありがとうございます。
添付画像は例でたとえば=SUMPRODUCT((A1:A100=2101)*(B1:B100>0))
でも0になってしまいます。

補足日時:2009/04/14 12:17
    • good
    • 0

タイプミスです


=COUNTIF(A1:A30,2100) ではなく
=COUNTIF(A1:A100,2100) でした。

この回答への補足

早速のご回答ありがとうございます!
=SUMPRODUCT((A1:A100=2100)*(B1:B100>0))で0以上の合計を返してくれません。。。
どうしても0になってしまいます。

なにか私が悪いのでしょうか・・・

補足日時:2009/04/14 11:54
    • good
    • 0

社員番号検索範囲がA1~A100、残業時間がB1~B100の場合



=COUNTIF(A1:A30,2100) で 2100 が何回出現したかカウントできます。
=SUMPRODUCT((A1:A100=2100)*(B1:B100>0))で、A列が2100 かつB列0以上 の出現回数がカウントできます。
    • good
    • 0
この回答へのお礼

迅速なご返答ありがとうございました。

とても助かりました!
もっと勉強したいと思います。

お礼日時:2009/04/14 16:35

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


おすすめ情報