- ベストアンサー
VBAでExcelのシフト表を作成する方法
- Excelのシフト表をVBAで作成する方法を教えてください。
- 具体的には、Sheet1に日付と名前のリストがあり、担当者と役割を記号で表したシフト表を作成しています。
- また、Sheet2には逆のシフト表を作成し、日付ごとに担当者を表示したいですが、どのような構文を使用すれば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 投稿後気になったので、再び顔を出しました。 VBAで!というご希望なので、もしかして同じ日に「役割」の重複があるのでしょうか? その場合は関数では難しいので、やはりVBAになってしまうと思います。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, c As Range, wS As Worksheet Set wS = Worksheets("Sheet1") With Worksheets("Sheet2") .Range("B2:AF15").ClearContents For j = 2 To wS.Cells(1, Columns.Count).End(xlToLeft).Column 'B列~1行目データが入っている最終列まで For i = 2 To 15 '2行目~15行目まで '▼ Sheet1のi行・j列にデータがあれば、Sheet2のA列何行目のデータと一致するか? If wS.Cells(i, j) <> "" Then Set c = .Range("A:A").Find(what:=wS.Cells(i, j), LookIn:=xlValues, lookat:=xlWhole) '▼ Sheet2の一致した行のj列が空白の場合は、Sheet1のi行・A列データをそのまま表示 'そうでない場合は今あるデータと「半角スペース」と新たにSheet1のi行・A列データを追加表示 With .Cells(c.Row, j) If .Value = "" Then .Value = wS.Cells(i, "A") Else .Value = .Value & " " & wS.Cells(i, "A") End If End With End If Next i Next j .Columns.AutoFit End With End Sub 'この行まで ※ 関数でないのでデータ変更があるたびに マクロを実行する必要があります。m(_ _)m
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
補足
有難うございます。 1.の方法ですと、B2にコピーすると '); がB3に入りB4に式が入ります、B3は削除すれば問題は解消されます。 2.の方法ではWith .Cells(c.Row, j)ここがデバッグとなり進みません、1.の方法ですと他の人に式を消去されてしまうので出来ればVBAで作りたいと考えています。 同日に二人が同記号になることはあり得るのですがその時には同記号のセルを増やして二段構えで表示させたいと考えています。記号は(1)、(1)、の感じです。 宜しくお願いいたします