• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAの構文をご指導お願いいたします)

VBAでExcelのシフト表を作成する方法

このQ&Aのポイント
  • Excelのシフト表をVBAで作成する方法を教えてください。
  • 具体的には、Sheet1に日付と名前のリストがあり、担当者と役割を記号で表したシフト表を作成しています。
  • また、Sheet2には逆のシフト表を作成し、日付ごとに担当者を表示したいですが、どのような構文を使用すれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

vanpire99
質問者

補足

有難うございます。 1.の方法ですと、B2にコピーすると '); がB3に入りB4に式が入ります、B3は削除すれば問題は解消されます。 2.の方法ではWith .Cells(c.Row, j)ここがデバッグとなり進みません、1.の方法ですと他の人に式を消去されてしまうので出来ればVBAで作りたいと考えています。 同日に二人が同記号になることはあり得るのですがその時には同記号のセルを増やして二段構えで表示させたいと考えています。記号は(1)、(1)、の感じです。 宜しくお願いいたします

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! Sheet1とSheet2の列の日付は一致しているのですね? 今回の質問に関して、わざわざVBAでなくても関数の方が簡単だと思います。 一例です。 同じ日に「役割」の重複はない!という前提です。 ↓の画像でSheet2のB2セルに =IF(COUNTIF(Sheet1!B$2:B$15,$A2),INDEX(Sheet1!$A$2:$A$15,MATCH($A2,Sheet1!B$2:B$15,0)),"") という数式を入れ、列・行方向にフィルハンドルでコピー! これで画像のような感じになります。m(_ _)m

関連するQ&A

専門家に質問してみよう