プロが教える店舗&オフィスのセキュリティ対策術

下のような勤務表を作成しました。
1日を午前/午後/夜間の3分割にして、3チームで輪番制です。
使用階数によって出勤者の人数が変更します。
(使用階数の合計が1なら1名のみ、2なら3名、3なら4名)
使用階数の合計は塗りつぶされたセルをColorCountでカウントしてます。

今は下の数式を各セルに入力しています。
=IFS(OR($J3="午前①",$J3="午前②"),IF($H3>=1,"出勤",""),OR($J3="午後①",$J3="午後②"),IF($H4>=1,"出勤",""),OR($J3="夜間①",$J3="夜間②"),IF($H5>=1,"出勤","")) 

休暇などもセルに入力したいと要望を受けていますが、直接入力すると数式に上書きされて変更があった時に対応できなくなってしまいます。

VBAで上記の数式を実現は可能でしょうか?ご教示のほど、宜しくお願い致します。

「マクロ/VBAについて教えてください。」の質問画像

質問者からの補足コメント

  • 説明不足で申し訳ないです。行や列番号を載せてませんでした。

    チーム1は、1日は午前中が出社時間で尚且つ1日は使用数が合計3なので、4名供とも出社
    2日も午前中が出社時間だが、使用数が2なので出社は3名って表現です

    B・C者には下の数式
    =IFS(OR($J3="午前①",$J3="午前②"),IF($H3>=2,"出勤",""),OR($J3="午後①",$J3="午後②"),IF($H4>=2,"出勤",""),OR($J3="夜間①",$J3="夜間②"),IF($H5>=2,"出勤",""))

    D者には下の数式
    =IFS(OR($J3="午前①",$J3="午前②"),IF($H3>=2,"出勤",""),OR($J3="午後①",$J3="午後②"),IF($H4>=2,"出勤",""),OR($J3="夜間①",$J3="夜間②"),IF($H5>=2,"出勤",""))

    「マクロ/VBAについて教えてください。」の補足画像1
      補足日時:2022/05/27 15:48
  • 返信ありがとうございます。
    1については、ご指摘のとおり出勤条件は3以上なので 
    $H3>=3
    $H4>=3
    $H5>=3
    です。
    2ですが、2案が実現できれば・・・と思います。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/05/28 19:01
  • tatsumaru77様、ご連絡ありがとうございます。

    1.B3に6月が記入されていますが、(結合セルなのでB3になります)
     ①6の数字は半角です。
     ②数字のみを入力して書式設定で月を表示しています。

    2.西暦年の記入についてです。
     ①B2セル(結合セルなのでB2になります)で問題ありません。
     ②西暦4桁の入力で問題ありません。
     ③同様の扱いで問題ありません。

    後出しで申し訳ないのですが、夏休みなど多忙期は4チームでの輪番となり、「待機」として休暇などの補填にあたります。今までは別シートでしてたが、今後は4チームを同じシートで管理したいです。
    (数式は、,OR($セル="待機①",$セル="待機②"),"")を追加)
    休暇など事前に入力された文字は残す事は可能でしょうか?
    宜しくお願い致します。

    「マクロ/VBAについて教えてください。」の補足画像3
    No.5の回答に寄せられた補足コメントです。 補足日時:2022/05/29 16:38
  • tatsumaru77様
    こちらの意図もくみ取っていただき、ありがとうございます!!
    数式を入れ込む?設定?する事が可能であれば、添付した表のようにセルにより参照先が違い表示する文字も違う場合も実現は可能でしょうか?
    A者は、参照先が「F列」で表示文字が「Ⅰ棟」
    =IFS(OR($Q3="午前①",$Q3="午前②"),IF($F3=1,"Ⅰ棟",""),OR($Q3="午後①",$Q3="午後②"),IF($F4=1,"Ⅰ棟",""),OR($Q3="夜間①",$Q3="夜間②"),IF($F5=1,"Ⅰ棟",""),OR($Q3="待機①",$Q3="待機②"),"")
    B者は、参照先が「I列」で表示文字が「Ⅱ棟-2F」
    C者は、参照先が「I列」で表示文字が「Ⅱ棟-3F」
    D者は、参照先が「O列」で表示文字が「Ⅲ棟」
    宜しくお願いします。

    「マクロ/VBAについて教えてください。」の補足画像4
    No.9の回答に寄せられた補足コメントです。 補足日時:2022/05/31 13:34

A 回答 (10件)

下記にアップしました。


https://ideone.com/OgeHhL
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
思い浮かべていた事が実現できそうです!!

お礼日時:2022/06/02 18:54

No8です。


前回のは無視してください。こちらを採用してください。
セルに文字が表示され、かつ、関数式がない場合のみスキップするようにしました。
https://ideone.com/hjsX0S
この回答への補足あり
    • good
    • 1

下記にアップしました。


https://ideone.com/vGSnjR
下記の件、対応済みです。
1)3チームから4チームに変更
2)待機①、待機②の場合、空白表示
3)関数を埋め込むセルに待機等の文字がある場合、その文字を残す。(関数を設定しない)
(その文字を削除しても、関数式は復活しません。関数式を設定するには再度マクロを実行する必要があります)
    • good
    • 1

No6の訂正です。


補足要求①
>(数式は、,OR($セル="待機①",$セル="待機②"),"")を追加)
該当セルが待機①又は待機②なら、空白を表示と理解しました。
    • good
    • 1

No5の補足拝見しました。


補足要求①
>(数式は、,OR($セル="待機①",$セル="待機②"),"")を追加)
この場合、セルに表示する文字は”出勤”でよいのでしょうか?

補足要求②
>休暇など事前に入力された文字は残す事は可能でしょうか?
マクロを実行し、対象となるすべてのセルに、関数式を埋めんだ後で、そのセルに”休暇”と打ち込むと理解していました。
つまり、マクロ実行後に、セルに”休暇”を打ち込みます。
そうすると、そのセルの関数式が破壊されます。
その為に、次の月の設定時、対象となる全セルに関数式を埋め込む
必要があるのでマクロで一発でできるようにする。
ということかと思いました。

マクロ実行前に、休暇対象となる全てのセルに”休暇”を打ち込み、
そのあとで、マクロを実行するということでしょうか。
マクロ実行時にそのセルをスキップすることは可能ですが、
そうすると、
合計が1の場合、Aは本来、出勤のはずですが、休暇の文字があるので、スキップします。B,C,Dは関数式を埋め込みますが、合計が1なので、全て空白になります。
つまり
A   B C D 
休暇 □ □ □
(□は空白)
のようになりますが、これはあなたの期待する結果でしょうか?
それで良ければ、休暇など事前に入力された文字は残す事は可能です。
    • good
    • 1

2案採用の前提での補足要求です。


1.B3に6月が記入されていますが、(結合セルなのでB3になります)
 ①6の数字は半角の前提であってますか。
 ②月の文字は実際に打ち込んでますか、それとも、6のみ入力し、書式設定で月を表示していますか。

2.西暦年の記入についてです。
 ①B2セル(結合セルなのでB2になります)に入力してある前提でよろしいでしょうか。
 ②2022のように半角の西暦4桁で入力する前提で良いですか。
 ③年の文字ですが、月の文字と同じ扱いにしますがよろしいでしょうか。
  月が実際に打ち込んでいるなら、年も実際に打ち込む。
  月が書式設定で表示しているなら、年も書式設定で表示する。
この回答への補足あり
    • good
    • 1

No3です。


誤記訂正:
「例では6月のため、30日分(月末日=90行)の関数式を接っていすれば良いわけですが、」

「例では6月のため、30日分(月末日=90行)の関数式を設定すれば良いわけですが、」

の誤りです。訂正いたします。
    • good
    • 1

補足要求です。


1.数式について
>D者には下の数式
=IFS(OR($J3="午前①",$J3="午前②"),IF($H3>=2,"出勤",""),OR($J3="午後①",$J3="午後②"),IF($H4>=2,"出勤",""),OR($J3="夜間①",$J3="夜間②"),IF($H5>=2,"出勤",""))

$H3>=2
$H4>=2
$H5>=2

$H3>=3
$H4>=3
$H5>=3
ではないでしょうか。

2.設定すべき月末日
例では6月のため、30日分(月末日=90行)の関数式を接っていすれば良いわけですが、
2月の場合、西暦が不明なため、月末日が28日なのか29日なのかがわかりません。どのようにすればよいですか。
1案:無条件に31日分作成し、不要分は手動で削除する。
2案:どこかに年の情報を追加し、月末日をきちんと求め、月末日まで設定する。
等が考えられます。
この回答への補足あり
    • good
    • 1

こんにちは



表の説明をしていただいていますが、表の左半分の意味しか分かりません。
多分、具体的な回答をお求めなのだと想像しますが、その割にはセル位置が不明のままで、式を見せられてもさっぱりです。
VBAと言われても、同様にセル位置がわからないので、回答のしようもありません。

とは言え、ご質問の内容だけであれば、固定作業なので「マクロの記録」を利用すれば簡単に作成可能です。
以下、作成方法。
 1)各セルにご提示の式を入力
 2)セル範囲をコピー、値をペーストで固定値化
で可能です。
(記録作成の際のコツは、要領の良い操作で、簡潔に行うことです)

以上で、ご質問のマクロは作成できますが、想像するところ、それは本当にお求めのものではないのではないかと思います。
(もっと、質問者様を忖度してくれるマクロをお望みなのではないかと・・)


ということでから、No1様がご提案の方法が良さそうに思いますけれど・・
    • good
    • 1
この回答へのお礼

ご返信ありがとうございます。

お礼日時:2022/06/02 18:55

一番簡単な方法は、別のシートに入力する様にして入力した値をそのシートにもってくる様にすれば良いと思います。

    • good
    • 1
この回答へのお礼

ご返信ありがとうございます。
やはりその方法が現実的ですね

お礼日時:2022/06/02 18:56

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