http://q.hatena.ne.jp/1229411743


上記のデータでまた質問です。
今度はIF関数になると思うのですが、、、データはかなり重いのでVBAは避けてください。

H列…長期休暇に入った日(病欠とか育児休暇とか)
I列…復帰日

が入ります。

O列からT列とW列からAB列に、H列に日付が入ったら「0」が自動的に入り、I列に日付が入ったら何も入っていない状態?「=""]の状態にしたいんですね。
2008年7月から2009年6月までのデータで、例えば
2008年9月26日から休みに入ったら9月からは「0」にしておいて、I列の復帰日が入力されたら何も入っていない?「[=""」の状態にしたいんです。
休みの期間だけ「0」ということなんです。

復帰日は何時かわからない状態なので解るまでは9月以降「0」のままで良いのですが。。
日にちも関係しているためどのように式を作ればよいのか??
教えてください。

回答の条件
  • 1人2回まで
  • 登録:2008/12/17 12:56:02
  • 終了:2008/12/17 16:24:59

ベストアンサー

id:Gay_Yahng No.2

Gay_Yahng回答回数724ベストアンサー獲得回数262008/12/17 16:02:49

ポイント55pt

それでは美しくない関数の世界へ!

 

O1=2008/7/1

・・・・

AB1=2009/6/1

としてください。表示をユーザ定義でyyyymmとすると200807とかになりますので。かならずツイタチで。

 

20行目で作りますね。

O20=IF($H20<=P$1-1,IF(O$1<=IF($I20="",10000,$I20),0,""),"")

P20、Q20、R20、S20およびW20、X20,Y20,Z20,AA20はこのO20をコピー

 

T20=IF($H20<=W$1-1,IF(T$1<=IF($I20="",10000,$I20),0,""),"")

AB20=IF($H20<=AB17+29,IF(AB$1<=IF($I20="",10000,$I20),0,""),"")

 

ここで提案なんですが、Iが決まっていないときは3000/1/1とかダミーにしたらどうでしょう?空白だと入れ忘れかもしれませんがありえない3000年の日付を入れておけば決まっていないんだなって分かっていいかなと。

id:kanachan

ありがとうございます!

関数の意味が理解出来なかったので次に生かせるのか疑問ですが、教えていただいたとおりに入れてみましたらうまくいきました!

何とか関数も理解できるようにしたいものです^^;

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

2008/12/17 16:24:34

その他の回答(1件)

id:okap01 No.1

okap01回答回数28ベストアンサー獲得回数22008/12/17 15:21:47

ポイント15pt

日数とかの計算をしなくて、ただ、“0”を表示するだけなら、

2行目を例にとりますと、

=IF($I$2<>"","",IF($H$2<>"",0,""))

をO2:T2,W2:AB2にコピればいいのでは?

id:kanachan

日数計算はしてると思います。長期欠勤中のみ「0」としたいので…

そのためでしょうか?

残念ながらうまくいきませんでした。

ごめんなさい。

2008/12/17 15:50:16
id:Gay_Yahng No.2

Gay_Yahng回答回数724ベストアンサー獲得回数262008/12/17 16:02:49ここでベストアンサー

ポイント55pt

それでは美しくない関数の世界へ!

 

O1=2008/7/1

・・・・

AB1=2009/6/1

としてください。表示をユーザ定義でyyyymmとすると200807とかになりますので。かならずツイタチで。

 

20行目で作りますね。

O20=IF($H20<=P$1-1,IF(O$1<=IF($I20="",10000,$I20),0,""),"")

P20、Q20、R20、S20およびW20、X20,Y20,Z20,AA20はこのO20をコピー

 

T20=IF($H20<=W$1-1,IF(T$1<=IF($I20="",10000,$I20),0,""),"")

AB20=IF($H20<=AB17+29,IF(AB$1<=IF($I20="",10000,$I20),0,""),"")

 

ここで提案なんですが、Iが決まっていないときは3000/1/1とかダミーにしたらどうでしょう?空白だと入れ忘れかもしれませんがありえない3000年の日付を入れておけば決まっていないんだなって分かっていいかなと。

id:kanachan

ありがとうございます!

関数の意味が理解出来なかったので次に生かせるのか疑問ですが、教えていただいたとおりに入れてみましたらうまくいきました!

何とか関数も理解できるようにしたいものです^^;

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

2008/12/17 16:24:34
  • id:Gay_Yahng
    この説明だけだと
    =if(H1="","",0)
    とかでいいんですが
     
    O列からT列は2008年7月から2008年12月
    W列からAB列2009年1月から2009年6月
    でしょうか?
    HとIに入る日付で、空白か0を判断したいということ?
    H 2008/7/1
    I 2008/9/5
    だったら、O、P、Qが0にしたい?

    見出しとしてO1セルに2008年7月とか入っていますか?
  • id:kanachan
    Gay_Yahng 様

    全て仰るとおりです!!
    私も同じような式は入力してあるのですが(=IF(H1"","",0))
    これだと復帰日がわかっているときに対応しにくいかなぁ…と思いまして。
    産前産後休暇や育児休暇は予定がわかっていますので事前に復帰日を入れておきたいんですね。
    復帰日が変更になったら改めて復帰日入力すればよいですし。

    HとIに入る日付で、空白か0を判断したいということ?
    H 2008/7/1
    I 2008/9/5
    だったら、O、P、Qが0にしたい?

    まさしくそのとおりです!!
    復帰予定が立たないときは復帰日は空欄ですが、仰るとおりになります。

    見出しには例えばO列でしたら
    200807
    と入力されています。
    不都合あればすぐ直せます。
  • id:kanachan
    あ、、、

    H 2008/7/1
    I 2008/9/5
    だったら、O、P、Qが0にしたい?

    が合ってます(全部コピーしてました…)
    ただし、復帰予定が立たないときはI列は空欄になるということになります。
  • id:Mook
    まず第一に VBA を使用するとファイルが重くなるというのは誤解です。
    複雑な処理や、広い範囲に対して処理を行うと重くなるというのはありますが、
    それは式を使っても同じことです。
    要は適切な範囲に適切な処理を適用するということです。

    さて式を入れるとなると、式を入力するセルは直接データを入力するのではなく
    他から数値を参照しているということになりますが、本当にそうなのでしょうか。

    I、H の入力によって表示ではなく、セルの値をコントロールするとなると、やはり
    VBA のような形式が必要になると思います。

    説明中いきなり
    >2008年7月から2009年6月までのデータで
    とありますが、これは列を指しているのでしょうか。

    シートの構成の説明、セルの入力内容の説明がないと、適切な回答は難しいと思います。
  • id:Gay_Yahng
    >復帰予定が立たないときはI列は空欄になるということになります。
    ・・・それは面倒
    このときはO列からT列とW列からAB列の表記はどうしましょう?
    Hが2008/9/5 として、Iは空白。このときは200809以降すべて0?

    次の年はどうなります?後ろにどんどん付け足しですか?別シートになる?
  • id:kanachan
    仰るとおり、H列に2008/9/5が入っていたとしてて、I列空白のときは200809以降は空白です。
    次の年は別BOOKになります。(別のBOOKにしないと重すぎてフリーズしてしまうので…)

    次の年繰越のときは先ほど記載あった式、
    IF(H1="","",0)
    でも十分間に合いましたが、
    年内休職となると対応できなくて悩んでます。

    MOOK様
    VBAでは重くならないのですか???
    環境化何かの問題なのか解らないのですが、凄く重くなってフリーズばかりしてるんです。。。

    VBA苦手というのもありますふぁ、今は殆ど関数で解決したデータにもなっているので
    出来れば関数でお願いします。
    式入力のときは仰るとおり別のデータ参照しています。
  • id:Gay_Yahng
    >H列に2008/9/5が入っていたとしてて、I列空白のときは200809以降は空白です。
     
    ん?I空白のときは0は無くて全て空白でいいんですか?
    私は0で埋めるのかと思っていたので。
  • id:kanachan
    あ!すみません!!間違えていました!!
    仰るとおりです。
    I列空白のときは「0」で埋めます。
    大変失礼いたしました。
  • id:Gay_Yahng
    間違いがありました。
    AB20 =IF($H20<=AB$1+29,IF(AB$1<=IF($I20="",10000,$I20),0,""),"")
    でした。
  • id:Gay_Yahng
    考え方はQ列を例にすると
    休みに入った日≦9月中≦復帰日
    だったら0にする って判別です。
     
    実際は
    休みに入った日≦2008/9/30
    でありかつ、
    2008/9/1≦復帰日
    だったら
    9月の欄に0を入れる。そうでないときは空白を入れる としています。
     
    条件作るのに式をこね回しており分かりにくいですね。
    あまりきれいな式になりませんでした。

  • id:okap01
    すみません。よくわかっていなかったのですが、
    1行目に
    O1=2008/7/1,P1=2008/8/1...,W1=2009/1/1,X1=2009/2/1...
    となっていて、各月の下に休んじゃった月を“0”を表示する、ということでしょうか?
    ならば、5行目を例にすれば
    O5=IF($H$5>O1,"",IF($I$5>=O1,0,""))
    P5=IF($H$5>P1,"",IF($I$5>=P1,0,""))
    Q5=IF($H$5>Q1,"",IF($I$5>=Q1,0,""))
          ・
          ・
          ・
        ずらずらっと数式コピーで
    では?だめ??
  • id:Gay_Yahng
    これ試しました?
    O5は
    休みに入った日≦2008/7/1
    かつ
    復帰日≧2008/7/1
    のとき0になりますよね?
     
    では休みに入った日が2008/7/10の時は空白ですよね。
  • id:kanachan
    okap01 様

    ありがとうございます。
    たしかにその考え方もありましたね!!
    今回はGay_Yahng 様に教えて頂いた方法が解りやすく、コピペで出来てしまったので閉めてしまいましたが、時間あるときに試してみますね。
    教えて頂いた式、見て納得した気がします。

    Gay_Yahng 様
    仰るとおり、休暇に入った日が2008/7/10なら基本的には空欄ですが、もし残業が発生していれば残業時間、なければ「0」になります。

    試したところセルには「0」となりましたので、月の途中で休暇に入っても残業が発生していなければそのままいける!と思いましたので大きな問題はないと思います。
    (残業時間が発生していればどうしても手入力で入れないとならないし…)

    いろいろお気遣いいただいてありがとうございます。
  • id:Gay_Yahng
    「これ試しました?」はokap01さんへの返事です。

  • id:okap01
    書込みがあったのは知りませんでした。

    さきの自分の式はGay_Yahngさんのご指摘どおり、だめですね。検証していただいてありがとうございます。当方の力不足でした。

    kanachanさん、うそ教えて申し訳ありませんでした。

    いまさらながら、ちょっと作り直して見ました。
    要は1日でも出勤していたなら空白で、その月を全て休んだのならば「0(ゼロ)」といった認識でよいのでしたら、

    O5=IF(AND($H$5<=O1,$I$5>=P1),0,"")
    P5=IF(AND($H$5<=P1,$I$5>=Q1),0,"")
    Q5=IF(AND($H$5<=Q1,$I$5>=R1),0,"")
          ・
          ・
        ずらずらっと数式コピーできて、
    W1=2009/3/1
    X1=何か違う他の項目
        だとしたら、

    W5=IF(AND($H$5<=W1,$I$5>=DATE(2009,4,1)),0,"")

    です。


この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません