• 締切済み

2年間の検査実施日を出したい(Excel)

お世話になります。 今、標記の件でとても困っているので助けていただきたいです。 機械のメンテナンスプランを作成している方にお願いされたのですが、 以下のようなエクセルのシートをつくってほしいとのことです。 「作業毎に決められた間隔(例えば2000時間や3ヶ月)で、 最後の実施日からその間隔で2年間ほどのスケジュールが表示されるシート。」 シート自体は下記のようになっています(大雑把ですが・・・)。 作業名  間隔  実施日  Jan Feb--(略)--Dec Jan---(略)---Dec  交換   2000H   18 Dec '08 ここで、「実施日」に記載されている日付から、左のセル(この場合は2000時間)の 間隔で、2年間のメンテナンススケジュールを出し、 該当する月の列にメンテの日付を出すということがしたいらしいです。 ちなみに、関数を使ってなんとか最初のメンテの日付を該当月に 表示させるようにはしたのですが、 その後の日付が出せないのでその方法は使えません。。。 何日も考えているのですが、どうしてもうまい方法が考えられません。 マクロを使おうとも思っているのですが、マクロ初心者のため どうすればよいのかわからず困っています。 どなたかよいアドバイスを頂けないでしょうか? どうぞよろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

  • 135ok
  • ベストアンサー率34% (26/75)
回答No.8

No.6です。 すいません。再度失敗しました。 今度失敗したら、別の方法を考えます。

w_dragon
質問者

お礼

皆様、まとめてのお礼で申し訳ございません。 どうも細かいところまで説明していなかったせいで、 ご不便をお掛けいたしました。 他にもいろいろな条件がありましたので、それと併せて できた部分やわからない部分をきちんとまとめて再度質問を立てます。 皆様の貴重なお時間を煩わせてしまって申し訳ございませんでした。

  • 135ok
  • ベストアンサー率34% (26/75)
回答No.7

No.6です。 添付がうまくいかなかったのでこちらで貼ります。

  • 135ok
  • ベストアンサー率34% (26/75)
回答No.6

こんにちは。 たぶん、添付のようにしたいと思われているのでは。的外れの時はごめんなさい。 まず、シート1の表及びシート2の表を作成方。 シート1    A  B   C  D E F 1 作業名  間隔 実施日 Jan-09 Feb-09 Mar-09  ~ 2 交換A  2000 2008/12/18 3 交換B 1000 2008/12/18 4 作業A 2500 2008/12/18 5 作業B  1500 2008/12/18 D2 =IF(ISNA(VLOOKUP(D$1,表1,2,0)),"",VLOOKUP(D$1,表1,2,0))    *まず、下にコピー方。    *表1とは、シート2の交換Aの表の名前です。ご自分で作成    するときは、ご自分で名前をつけるなり、範囲を指定ください。    *D3~5の表1を変更し、右にコピー方。 シート2  交換Aの表で説明します。  A1 =Sheet1!A2  B1 =Sheet1!B2  B2 =Sheet1!$C$2+ROUNDUP(B$1/24,0)      *シート1の実施日を基準に日付を出しています。  B3 =B2+ROUNDUP(B$1/24,0)      *下にコピー方。  A2 =DATE(YEAR(B2),MONTH(B2),1)      *B2の日付からVLOOKUPの基準となる日付を出しています。      *下にコピー方。  同様に他の表を作成方。  ちょっとわかりづらいかも知れませんが、お試しください。  後、ROUNDUPを使って切り上げるかどうかは、ご検討ください。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.5

回答前に、何点か質問します >作業名  間隔  実施日  Jan Feb--(略)--Dec Jan---(略)---Dec  >交換   2000H   18 Dec '08 実施日に入っている「18 Dec '08」はシリアル値でしょうか 間隔欄の単位は統一されているのでしょうか 月単位の場合 1/31 の1ヶ月後はどの様になりますか 「Jan Feb--(略)--Dec Jan---(略)---Dec」 の部分はどの様に入力していますか   参考までに A B 1 2000 2 2008/12/18 3 Jan-09 4 Feb-09 5 Mar-09 2009/3/11 6 Apr-09 7 May-09 8 Jun-09 2009/6/2 9 Jul-09 10 Aug-09 2009/8/25 11 Sep-09 12 Oct-09 13 Nov-09 2009/11/16 14 Dec-09 15 Jan-10 16 Feb-10 2010/2/7 17 Mar-10 18 Apr-10 19 May-10 2010/5/2 20 Jun-10 21 Jul-10 2010/7/24 22 Aug-10 23 Sep-10 24 Oct-10 2010/10/15 25 Nov-10 26 Dec-10 B3=IF(TEXT($B$2+$B$1*COUNT($B$2:B2)/24,"yymm")=TEXT(A3,"yymm"),$B$2+$B$1*COUNT($B$2:B2)/24,"")

回答No.4

NO2です 補足します 2回目以降のメンテナンスについては、実施日に同じような関数式を書き込めば次のメンテ日が計算できると思います。 例 D22:=IF($C21="H",$D21+ROUNDUP($B21/60,0),IF($C21=" カ月",$D21+ROUNDUP($B21*30,0),IF($C21=" 日",$D21+$B21,""))))=1,IF($C21="H",$D21+ROUNDUP($B21/60,0),IF($C21="カ月",$D21+ROUNDUP($B21*30,0),IF($C21="日",$D21+$B21,"")) なんだか、外しているようですが、参考になれば利用してください

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは >最初のメンテ日を出すことはできるのですが、以降のメンテ日をどのように足していけばよいのかがわからないのです(T T) =日付(シリアル値)+INT(2000/24)+MOD(2000,24)/24  例えば上式なら日付を前回のメンテ日として次につないだら?  あるいは2000H×何回目?とか >さらに困ったことに、項目毎に間隔が違うため、2年間のメンテ回数も違うのです。  なるほど..  2年間と期間が決まっているなら2年間の日付を求めて(yyyb/mm/dd-yyya/mm/dd)でメンテ期間で割って何回メンテが必要か求めることもできますよ。  質問者さんが直面している問題を完全に理解しているわけではないので外していたらごめんなさい。

回答No.2

ザクっとした関数を使えば簡単にできると思います。 まず、間隔と実施日の間に単位を設けることをお勧めします。 例として作業名をA21・間隔B21・単位C21・実施日D21・janをE21とした場合 E21:=IF(MONTH(IF($C21="H",$D21+ROUNDUP($B21/60,0),IF($C21="カ月",$D21+ROUNDUP($B21*30,0),IF($C21="日",$D21+$B21,""))))=1,IF($C21="H",$D21+ROUNDUP($B21/60,0),IF($C21="カ月",$D21+ROUNDUP($B21*30,0),IF($C21="日",$D21+$B21,""))),"") ちょっと長いですが、これで大丈夫だと思います。(他の月の部分は$を使って応用してください) 単位部分は文字が変わると認識できないので入力規則でプルダウンメニューにした方がいいでしょう。 上記の式に日付と単位が無い場合には非表示のIF文をつけるとエラーがなくなると思います。 ちょっとスマートではないですが、参考までに

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.1

こんにちは  基本的に日付時刻は「シリアル値」という数値ですので計算が可能です。  例えば、ある日付から2000時間後は以下のようになります。 =日付(シリアル値)+INT(2000/24)+MOD(2000,24)/24 INT部分で期間(日)を求め、MOD部分で時間を求めてからシリアル値の時刻に変換しています。 実際一度計算してしまえば2000時間のシリアル値は、いつも同じ値=定数ですね。これを応用すればできそうでしょ。

w_dragon
質問者

お礼

ご回答ありがとうございます。 最初のメンテ日を出すことはできるのですが、以降のメンテ日を どのように足していけばよいのかがわからないのです(T T) さらに困ったことに、項目毎に間隔が違うため、2年間のメンテ回数も違うのです。 なので、マクロを使って2枚目のシートに項目毎にメンテ日だけを出すようにして、 最初のシートの月の列はVLOOKUP関数を入れ、 2枚目のシートを参照して該当月に日付を表示するようにしようかなぁと 思ったのですが、方法がさっぱりわからないです・・・。