質問: 当日の出勤者のみ表示したいと考えています。 以下の図のようなシフト表を作成しています。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/eb2c0851ef68cbf674c3b1a78cf4fa5a.png) 2枚目の図は、私が理想とするイメージ図です。 ●出勤者のみ、詰めて表示される。 ●出勤者の出勤、退勤、休憩も同時に表示される ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/123f3160dc22e2c509821610b716f9b4.png) 今までは、関数で出勤者を抽出していました。 そのため、作業シートを2枚使用しています。 作業シートを使用せずにVBAで出来るようになれば理想通りです。 皆様の知恵をお借りしたいと考えています。
回答: 基本的な部分のみVBAで書いてみました。 ``` Dim src_ws As Worksheet Dim dst_ws As Worksheet Dim src_row As Long Dim dst_row As Long Dim dd As Long Set src_ws = Worksheets("Sheet1") Set dst_ws = Worksheets("Sheet2") src_row = 2 dst_row = 3 dd = 1 Do ' 名前がなければ終了 If src_ws.Cells(src_row, 1) = "" Then Exit Do ' 出勤が登録されているか If src_ws.Cells(src_row + 1, dd + 2) <> "" Then dst_ws.Cells(dst_row, 1) = src_ws.Cells(src_row, 1) ' 名前 src_ws.Cells(src_row + 1, dd + 2).Copy dst_ws.Cells(dst_row, 2) ' 出勤 src_ws.Cells(src_row + 2, dd + 2).Copy dst_ws.Cells(dst_row, 3) ' 退勤 src_ws.Cells(src_row + 3, dd + 2).Copy dst_ws.Cells(dst_row, 4) ' 休憩 dst_row = dst_row + 1 End If src_row = src_row + 4 Loop ``` このコードでは変数ddの値を対象の日付に見立てています。 dd = 2 にすれば、2日が対象になります。 これをベースに関数化したり、装飾を加えたりすれば、それなりになるかなと思います。