• ベストアンサー

エクセルの自動入力

実現可能かどうか分かりませんが、やりたい事を纏めてみました。言葉では伝わりにくいのでファイルを付けます。 ランダムに数字が入ってますが、あるセルに数字を入れるとその分だけ自動で横にズレテ入力される仕組みは作れるのでしょうか?ファイルを見て頂くと分かると思いますが、B12セルに『3日』と入れれば自動で元の日にちから3日後にスライドされる。・・みたいな感じです。 欲を言うなら土日は省いてカウントしたいです。 まぁ難しいですよね・・。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.9

NO8です。 >指定した土曜日(日にち)は省かないという事は出来ますか?  ⇒先ずはご提案の営業日を認識できるWORKDAY関数を基本にしていますので、この関数の   機能を使用しない事は、100%再構成となります。   因みに、この条件も併せて別質問として下さい。  (追加質問はマナー違反になり本文が削除されます)

その他の回答 (8)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.8

NO7です。 前回答のWORKDAY関数にテスト用の休日範囲が混入していましたので、回答補足の休日範囲を反映しました。 =IF(OR(WEEKDAY(C$7,2)>5,COUNTIF($C$7:$K$7,WORKDAY(C$7,-$B$12,Sheet2!$A$1:$A$999))=0,COUNTIF(Sheet2!$A$1:$A$999,C$7)),"",HLOOKUP(WORKDAY(C$7,-$B$12,Sheet2!$A$1:$A$999),$C$7:$K$9,3,FALSE)&"")

ahorizumu
質問者

お礼

ありがとうございます。 99%思い通りの形になってます。 残り1%ですが、、、これまた難題かと思いますが、基本的に土日は省かれてしまうと思うのですが指定した土曜日(日にち)は省かないという事は出来ますか? 今の状態でも満足なのですが可能であれば100%にしたいです。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.7

NO6です。 >祝日も省く場合はどうしたら出来ますか?  ⇒別のセル範囲(別シートでも可)に休日を設定し、WORKDAY関数の3番目に追記して下さい。   因みに祝日範囲は絶対参照形式として下さい。 =IF(OR(WEEKDAY(C$7,2)>5,COUNTIF($C$7:$K$7,WORKDAY(C$7,-$B$12,$F$1:$F$4,祝日範囲))=0,COUNTIF(祝日範囲,C$7)),"",HLOOKUP(WORKDAY(C$7,-$B$12,$F$1:$F$4,祝日範囲),$C$7:$K$9,3,FALSE)&"")

ahorizumu
質問者

お礼

ありがとうございます。 教えていただいた内容で作業しましたが、「#NAME?」と出てしまいます。 ちなみに祝日はsheet2のA1~A999に羅列してます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.6

NO4です。 >B12は表示形式で0日・・とはどういうことでしょうか? >普通に”0日”と入れればいいのですか?  ⇒セルの書式設定→表示形式タブ→ユーザ定義で0"日"と設定する事の意味です。   こうしておくと数値のみを入力してもn日と表示できます。 >また、B13に式を入れて右にコピーしましたが何も出てきませんでした。  ⇒こちらの勘違いで「C12」の間違いでした。

ahorizumu
質問者

お礼

ありがとうございます。出来ました。 ちなみに、祝日も省く場合はどうしたら出来ますか? これは難しいですか? この流れで右方向に進めて行った場合、4/29~5/8を土日と同じ扱いにしてここには数字が入らないようにしたいです。 なので、4/26に入っている数字は3日後の5/9に入ることとなります。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No2の式についてですが次のような意味になります。 =IF(OR(C8="土",C8="日",COLUMN(C9)<=LEFT($B12,LEN($B12)-1)*1,INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日"))=0),"",INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日"))) C8セルが土あるいは日、さらに列の番号がB12セルで与えられた日付に相当する数値とプラスC列が起点になっていますので2を足した列番号までは、(COLUMN(C9)<=LEFT($B12,LEN($B12)-1)*1はCOLUMN(C9)<=LEFT($B12,LEN($B12)-1)*1+2の誤りでした。)、また、INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日"))の値が空白である時はC12のセルは空にしなさい。それ以外の場合にはINDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日")))で求められた値を表示しなさいとの意味になります。 INDEX関数では行番号が9行目でC列の列番号からB12セルで指定した数値を引いた列番号のセルの値を土曜日や日曜日がない場合にはそのまま表示させるのですが、ここではC8セルから該当するセル番号までの間に存在する土曜日や日曜日の数をB12セルで指定した数値に加えて引いた列番号の値を表示させるようにしています。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 WORKDAY関数を使用するにはツール→アドイン→分析ツールをエクセルに組み込む必要があります。 B12は表示形式で0日とします。 B13に=IF(OR(WEEKDAY(C$7,2)>5,COUNTIF($C$7:$K$7,WORKDAY(C$7,-$B$12))=0),"",HLOOKUP(WORKDAY(C$7,-$B$12),$C$7:$K$9,3,FALSE)&"")として右方向にコピー

ahorizumu
質問者

お礼

ありがとうございます。 B12は表示形式で0日・・とはどういうことでしょうか? 普通に”0日”と入れればいいのですか? また、B13に式を入れて右にコピーしましたが何も出てきませんでした。 わたくしのやり方がおかしいのだと思います。。。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No2です。先の式では土曜日や日曜日のデータが空の時には3日後にスライドした場合には土曜日や日曜日でなくとも空になってしまいますね。 ご希望通りにするのでしたらC12セルには次の式を入力して横方向にオートフィルドラッグします。 =IF(OR(C8="土",C8="日",COLUMN(C9)<=LEFT($B12,LEN($B12)-1)*1+2),"",INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")*2+COUNTIF($C8:OFFSET(C8,0,-LEFT($B12,LEN($B12)-1)*1-2),"土")+COUNTIF($C8:OFFSET(C8,0,-LEFT($B12,LEN($B12)-1)*1-1),"日")))

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

例えばC12セルには次の式を入力して右横方向にオートフィルドラッグします。 =IF(OR(C8="土",C8="日",COLUMN(C9)<=LEFT($B12,LEN($B12)-1)*1,INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日"))=0),"",INDEX(9:9,COLUMN(C9)-LEFT($B12,LEN($B12)-1)*1-COUNTIF($C8:C8,"土")-COUNTIF($C8:C8,"日")))

ahorizumu
質問者

お礼

ありがとうございます。すごい式ですね。確かにこれであれば希望通りの結果になりました。ただこの式って各々どこをどう指しているんですか?いろいろアレンジしたいと思うのですがそもそもの式の指す意味を知らないとアレンジできませんもんね・・・。曜日の部分に「祝」も入れたら祝も除外してカウントしたり。この場合、この式のどこをいじればできるのかなぁって考えてます・・。でも分かりません。。。

  • wret615
  • ベストアンサー率34% (133/386)
回答No.1

ワークシートのChangeイベントをうまく使うとできそうやね。調べてみ?

ahorizumu
質問者

お礼

ありがとうございます。 changeイベントを調べてみましたが難しいです。。。 結構な素人者でしてこれはレベルが高すぎます・・・。 勉強します!

関連するQ&A

専門家に質問してみよう