VBAで、ユーザーの当日シフト表を作成しようとしております。
以下のシートを3つ用意しました
シート1:(列は、4行目から開始されます)
|名前|出勤|シフト1|シフト2|シフト3|シフト4|シフト5|シフト6|
|AAA |++ |--- |--- |--- |--- |--- |--- |
|BBB |++ |--- |--- |--- |--- |--- |--- |
|CCC |++ |--- |--- |--- |--- |--- |--- |
|DDD |++ |--- |--- |--- |--- |--- |--- |
別途、日付セル(2桁日付が表示:C2に配置)があります
シート2:(名前以外の数字の列は、2桁表記の日付(文字列)です)
|名前|01 |02 |03 |04 |05 |06 |
|AAA |S-1 |S-2 |(null)|S-2 |(null)|S-2 |
|BBB |S-3 |(null)|S-1 |S-2 |S-3 |(null)|
|CCC |(null)|S-1 |(null)|S-2 |S-1 |(null)|
|DDD |(null)|(null)|S-1 |S-2 |S-3 |S-2 |
シート3:
|シフト名|列1|列2|列3|列4|列5|列6|
|S-1 |〇 |〇 |〇 |× |× |〇 |
|S-2 |× |× |× |〇 |〇 |〇 |
|S-3 |〇 |〇 |× |〇 |× |× |
上記を以下(①~③)のように使用したいと思っております
①シート1の日付とシート2の数字列を突き合わせ、そこでの各自のシフト状況を取り、
シート1の「出勤」に出力する
※この時点では、以下を想定しております(日付は[02]を指定)
シート1に以下が出力
|名前|出勤 |シフト1|シフト2|シフト3|シフト4|シフト5|シフト6|
|AAA |S-2 |--- |--- |--- |--- |--- |--- |
|BBB |(null) |--- |--- |--- |--- |--- |--- |
|CCC |S-1 |--- |--- |--- |--- |--- |--- |
|DDD |(null) |--- |--- |--- |--- |--- |--- |
②出勤に出力された値とシート3の「シフト名」列を突き合わせ、「列1」~「列6」の値を
シート1の「シフト1」~「シフト6」へ出力する
※この時点では、以下を想定しております
|名前|出勤 |シフト1|シフト2|シフト3|シフト4|シフト5|シフト6|
|AAA |S-2 |--- |--- |--- |〇 |〇 |〇 |
|BBB |(null) |--- |--- |--- |--- |--- |--- |
|CCC |S-1 |〇 |〇 |〇 |--- |--- |〇 |
|DDD |(null) |--- |--- |--- |--- |--- |--- |
③出勤のない人を非表示とする
※最終時点では、以下を想定しております
|名前|出勤 |シフト1|シフト2|シフト3|シフト4|シフト5|シフト6|
|AAA |S-2 |--- |--- |--- |〇 |〇 |〇 |
|CCC |S-1 |〇 |〇 |〇 |--- |--- |〇 |
③に関しては、以下のコードで達成できたのですが、他の個所の書き方がわかりませんでした。
申し訳ございませんがお分かりになられる方、ご教授願います
'対象外のユーザーは非表示
Application.ScreenUpdating = False
For Rw = 13 To 25
If Range("D" & Rw) = "" Then
Rows(Rw).EntireRow.Hidden = True
End If
Next
Application.ScreenUpdating = True
(上から、sheet1・sheet2・skeet3)
①sheet2のD5の値とsheet2の4行目の値を突き合わせる
②突き合わせた結果のsheet2の縦列(例:23日の場合、sheet2の23日の7~19行目)をsheet1のD13~d20に貼る
③shhet1のD13~d20で入力されている値とsheet3のB列を突き合わせて、一致した個所のsheet3のD~V列をsheet1のE~Xに貼る
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 05:49
2021/04/23 07:44
2021/04/23 08:26
2021/06/29 07:45