人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

↑以前に質問させていただいたデータです
で、今回私が行ないたいのは
1.B4が月曜日だったらA事業所、火曜日だったらB事業所、水曜日だったらC事業所、木曜日だったらD事業所、金曜日だったらB事業所、土曜日の13:00?だったらC事業所、土曜日の16:30?だったらB事業所。
2.月曜日は20:00?21:00、火曜日?木曜日は18:30?19:30、金曜日は19:00?21:00、土曜日は13:00?15:00と16:30?
3.16:30?の介助のうち、第1土曜日と第5土曜日は(月によって存在しますので)16:30?21:30、第2土曜日は16:30?17:30と19:30?23:00、第3土曜日と第4土曜日は16:30?23:00。第5土曜日が存在しない月はその月の最後の日曜日。
4.原則3のとおりだけれども第2土曜日と第3土曜日に関してはJ列が「→」になった時16:30?17:30と19:30?23:00にし、J列が「⇔」担になった時は16:30?23:00とする。
5.同じ日付でも時間に間があったら行を追加する(例:9/12(土)A16が13:00?15:00、A17が16:30?17:30、A18が19:30?23:00。日付はA16~A18まで同じ)

としたいんですが(特に日付)どのように式を立てたらよいでしょうか?


●質問者: kanachan
●カテゴリ:コンピュータ
✍キーワード:00 23 B4 データ 土曜日
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● SALINGER
●60ポイント ベストアンサー

とりあえず作ってみました。

コメントにも書きましたが、数式だけでは行の追加はできないので、

数式を使わず、A列の変化とJ列の変化をキーにしてイベントが発生させて表を作るようにしました。

つまり、日付を入力すると、曜日、介助開始時間、介助終了時間、介助時間、介助事業所が自動で入力されます。

また、J列に"→"、"⇔"を入力することでも変更されます。


土曜日の19:30?23:00に関しては事業所が何になるのかわからないので、仮にB事業所としました。

コードの該当箇所を変更することで修正してください。


>第5土曜日が存在しない月はその月の最後の日曜日。

この部分はよくわからなかったので実装していません。


意図する動作ではない場合、ご指摘くださればできる範囲で修正させていただきます。


コードのコピペ場所ですが、

シートの下の方にあるシートの名前を右クリックして「コードの表示」で開く画面に全文をコピペしてください。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim mydate As Date
 
 If Target.Column = 10 And Cells(Target.Row, "B").Value = "土曜日" Then
 If Target.Value = "→" Or Target.Value = "⇔" Or Target.Value = "" Then
 Application.EnableEvents = False
 If Cells(Target.Row, "A").Value <> "" And _
 Cells(Target.Row, "A").Value = Cells(Target.Row + 1, "A").Value Then
 Rows(Target.Row + 1).Delete
 End If
 If Cells(Target.Row, "A").Value <> "" And _
 Cells(Target.Row, "A").Value = Cells(Target.Row + 1, "A").Value Then
 Rows(Target.Row + 1).Delete
 End If
 Application.EnableEvents = True
 Cells(Target.Row, "A").Value = Cells(Target.Row, "A").Value
 Else
 Exit Sub
 End If
 Else
 If Target.Column <> 1 Then Exit Sub
 
 If IsDate(Target.Value) Then
 mydate = Target.Value
 Else
 Exit Sub
 End If
 
  '曜日で分岐
 Select Case Application.WorksheetFunction.Weekday(mydate)
 Case 1
 Target.Offset(0, 1).Value = "日曜日"
 Target.Offset(0, 2).Value = ""
 Target.Offset(0, 3).Value = ""
 Target.Offset(0, 4).Value = ""
 Target.Offset(0, 6).Value = ""
 Case 2
 Target.Offset(0, 1).Value = "月曜日"
 Target.Offset(0, 2).Value = "20:00"
 Target.Offset(0, 3).Value = "21:00"
 Target.Offset(0, 4).Value = "1"
 Target.Offset(0, 6).Value = "A事業所"
 Case 3
 Target.Offset(0, 1).Value = "火曜日"
 Target.Offset(0, 2).Value = "18:30"
 Target.Offset(0, 3).Value = "19:30"
 Target.Offset(0, 4).Value = "1"
 Target.Offset(0, 6).Value = "B事業所"
 Case 4
 Target.Offset(0, 1).Value = "水曜日"
 Target.Offset(0, 2).Value = "18:30"
 Target.Offset(0, 3).Value = "19:30"
 Target.Offset(0, 4).Value = "1"
 Target.Offset(0, 6).Value = "C事業所"
 Case 5
 Target.Offset(0, 1).Value = "木曜日"
 Target.Offset(0, 2).Value = "18:30"
 Target.Offset(0, 3).Value = "19:30"
 Target.Offset(0, 4).Value = "1"
 Target.Offset(0, 6).Value = "D事業所"
 Case 6
 Target.Offset(0, 1).Value = "金曜日"
 Target.Offset(0, 2).Value = "19:00"
 Target.Offset(0, 3).Value = "21:00"
 Target.Offset(0, 4).Value = "2"
 Target.Offset(0, 6).Value = "B事業所"
 Case 7
 Target.Offset(0, 1).Value = "土曜日"
 Target.Offset(0, 2).Value = "13:00"
 Target.Offset(0, 3).Value = "15:00"
 Target.Offset(0, 4).Value = "2"
 Target.Offset(0, 6).Value = "C事業所"
 Application.EnableEvents = False
 If Target.Value <> Target.Offset(1, 0).Value Then
 Rows(Target.Row + 1).Insert
 Target.Offset(1, 0).Value = Target.Value
 End If
 Application.EnableEvents = True
 Target.Offset(1, 1).Value = "土曜日"
 Target.Offset(1, 2).Value = "16:00"
 Target.Offset(1, 6).Value = "B事業所"
 
  '第何週かで分岐
 Select Case Int((Day(mydate) - 1) / 7) + 1
 Case 1, 5
 Target.Offset(1, 3).Value = "21:30"
 Target.Offset(1, 4).Value = "5.5"
 Case 2
  'J列で分岐
 If Target.Offset(0, 9).Value = "⇔" Then
 Target.Offset(1, 3).Value = "23:00"
 Target.Offset(1, 4).Value = "7"
 Else
 Target.Offset(1, 3).Value = "17:30"
 Target.Offset(1, 4).Value = "1.5"
 Application.EnableEvents = False
 If Target.Value <> Target.Offset(2, 0).Value Then
 Rows(Target.Row + 2).Insert
 Target.Offset(2, 0).Value = Target.Value
 End If
 Application.EnableEvents = True
 Target.Offset(2, 1).Value = "土曜日"
 Target.Offset(2, 2).Value = "19:30"
 Target.Offset(2, 3).Value = "23:00"
 Target.Offset(2, 4).Value = "3.5"
 
  'この事業所がわからないのでとりあえずB事業所に
 Target.Offset(2, 6).Value = "B事業所"
 End If
 Case 3
  'J列で分岐
 If Target.Offset(0, 9).Value = "→" Then
 Target.Offset(1, 3).Value = "17:30"
 Target.Offset(1, 4).Value = "1.5"
 Application.EnableEvents = False
 If Target.Value <> Target.Offset(2, 0).Value Then
 Rows(Target.Row + 2).Insert
 Target.Offset(2, 0).Value = Target.Value
 End If
 Application.EnableEvents = True
 Target.Offset(2, 1).Value = "土曜日"
 Target.Offset(2, 2).Value = "19:30"
 Target.Offset(2, 3).Value = "23:00"
 Target.Offset(2, 4).Value = "3.5"
 
  'この事業所がわからないのでとりあえずB事業所に
 Target.Offset(2, 6).Value = "B事業所"
 Else
 Target.Offset(1, 3).Value = "23:00"
 Target.Offset(1, 4).Value = "7"
 End If
 Case 4
 Target.Offset(1, 3).Value = "23:00"
 Target.Offset(1, 4).Value = "7"
 End Select
 End Select
 End If
 
End Sub
◎質問者からの返答

ありがとうございます。

月によって第5土曜日があったりなかったりすると思うのですが、当月に第5土曜日があったら第5土曜日に介助、第5土曜日がなかったら第4日曜日といった感じです。

例えば9月の土曜日は第4土曜日までです。10月は第5土曜日まであります。

なので9月は9/27日曜日の14:00?19:00に介助を行い、10月だったら10/31土曜日16:30?21:30に介助を行なう、という事です。

でも頂いたコードも充分です。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ