VBAを用いて予約表の作り方を教えてほしい | |
---|---|
[194696] VBAを用いて予約表の作り方を教えてほしい- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ ま -(2022/01/30(04:31)) □U R L/ 名前、日程、開始時間、終了時間、会議名、ゲスト参加か否か、をいれたら同じシートの表の該当する範囲が塗りつぶされるようにしたいです。重複したら「既に予約されています」という表示もつけたいです。 (例)2月2日の10時から11時までなら、2月2日の10時から11時に該当するセルが塗りつぶされる。なおかつ他の情報(名前、会議名、ゲスト参加か否か)はコメント挿入される。 A B C D E F 〜 9 会議室|9:30 10:00 10:30 11:00 11:00 〜 10 2月1日| ̄ ̄  ̄ ̄ ̄  ̄ ̄ ̄  ̄ ̄ ̄  ̄ ̄ ̄  ̄ ̄ 11 2月2日| 13 2月3日| ↓ | 40 | みたいな表です時間は18:00まであります |
[194697] Re[1]: VBAを用いて予約表の作り方を教えてほしい- ■記事引用/メール受信=OFF■ □投稿者/ 与太郎 -(2022/01/30(20:05)) □U R L/ もう完全に「作成お願いします」サイトになってしまいましたね。 日本語も、「教えてください」ではなく、 「作成してください、お願いします」でしょう。 見苦しさ満開です。 |
[194698] Re[2]: VBAを用いて予約表の作り方を教えてほしい- ■記事引用/メール受信=OFF■ □投稿者/ ま -(2022/01/30(21:04)) □U R L/ そうですね。見苦しくて申し訳ありません。 では、指定の時間を示したセルを塗りつぶすマクロの組み方を教えてください。お願いします。そこだけで大丈夫です。他は自分で考えますので。 |
[194699] Re[3]: VBAを用いて予約表の作り方を教えてほしい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2022/01/30(21:57)) □U R L/ 名前から順に値を入れて行き、参加/否を入れ終わったら、塗りつぶし、メモを追加 データ位置固定です。 日付:空きチェックしていません 開始時間:空きチェックしています 終了時間:空きチェックしています なお、削除機能は入れてありません。(名前:削除で開始時間を入れたら該当を削除で良いのでは) excel2016 すごく汚いです。 すべてシートモジュール(シートタブを右クリックしてコードの表示で出てくるペイン)に貼り付けます。 一度initを実行して下さい。 >指定の時間を示したセルを塗りつぶすマクロの組み方を教えてください Case 7 以降 対応する行列セルの内部色を変えるだけです。 'Const DEBUGFLG = True 'シートを手作業でいじる場合は有効にすること Sub init() Dim i As Long ' Range("A1:T50").Clear Range("A1:A6").Value = Application.Transpose(Split("名前 会議日 開始時間 終了時間 会議名 ゲスト")) Range("A9").Value = "大会議室" With Range("B6").Validation .Delete .Add xlValidateList, xlValidAlertStop, xlBetween, "参加,否" .InputMessage = "お選びください" End With With Range("B9").Resize(, 2) .Value = Array("9:30", "10:00") .AutoFill Range("B9:T9") Range("T9").Font.ColorIndex = 2 '18:30が必要だが,色で消している End With With Range("A10:A40") .ClearContents .Cells(1).Value = "2022/2/1" '開始日 .DataSeries xlColumns, xlChronological, xlDay, 1, VBA.DateAdd("M", 1, .Cells(1).Value) - 1 End With Range("A10:A40,B2").NumberFormatLocal = "m""月""d""日"";@" End Sub Private Sub Worksheet_SelectionChange(ByVal target As Range) Dim s As String, i As Long Dim r As Range, rr As Range, r1 As Range If DEBUGFLG Then Exit Sub Application.EnableEvents = False If target.CountLarge > 1 Then End_Trap "B1" If Intersect(target, Range("B1:B7")) Is Nothing Then End_Trap "B1" Range(target.Offset(1), Range("B7")).ClearContents Select Case target.Row Case 2 To 7: Emp_Check (target.Row) End Select Select Case target.Row Case 2 '会議日 1ヶ月分 With target.Validation .Delete .Add xlValidateList, xlValidAlertStop, xlBetween, _ "=" & Range("A10", Range("A10").End(xlDown)).Address .InputMessage = "お選びください" End With Case 3 '開始時間 空き時間 Set r = Range("A9").Offset(Day(Range("B2").Value)) On Error Resume Next Set rr = Range(Cells(r.Row, "B"), Cells(r.Row, "S")).SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If rr Is Nothing Then MsgBox "空きがありません" End_Trap "B2" Else For Each r1 In rr s = s & Format(Cells(9, r1.Column).Value, "h:mm") & "," Next s = Left$(s, Len(s) - 1) End If With target.Validation .Delete .Add xlValidateList, xlValidAlertStop, xlBetween, s .InputMessage = "お選びください" End With Case 4 '終了時間 開始時間以降の空き時間 Set r = Range("A9").Offset(Day(Range("B2").Value)) i = (target.Offset(-1).Value - TimeValue("9:30")) / TimeValue("0:30") + 2 Set rr = Range(Cells(r.Row, i), Cells(r.Row, "S")) If rr Is Nothing Then Else For Each r1 In rr If r1.Value = "" Then s = s & Format(Cells(9, r1.Column).Value + TimeValue("0:30"), "h:mm") & "," Else Exit For End If Next s = Left$(s, Len(s) - 1) End If With target.Validation .Delete .Add xlValidateList, xlValidAlertStop, xlBetween, s .InputMessage = "お選びください" End With Case 7 '入力完了 Set r = Range("A9").Offset(Day(Range("B2").Value)) '日 Set r1 = Range("B9:S9").Find(Range("B3").Text, , xlValues, xlWhole) '開始時間 Set rr = Range("B9:T9").Find(Range("B4").Text, , xlValues, xlWhole) '終了時間 With Range(Cells(r.Row, r1.Column), Cells(r.Row, rr.Column - 1)) '日の開始時間〜終了時間1つ前 .Value = r1.Column + 2 '使用中フラグセット .Interior.ColorIndex = r1.Column + 2 .Font.ColorIndex = r1.Column + 2 '文字色をセル色と同じにし、見せない s = Range("B1").Value & vbLf & Range("B5").Value & vbLf & "ゲスト:" & Range("B6").Value For Each r In .Cells r.AddComment s Next End With MsgBox Range("B2").Text & " " & Range("B3").Text & " - " & Range("B4").Text & vbLf & _ s & vbLf & "を追加しました" Application.EnableEvents = True Range("B1").Select End Select Application.EnableEvents = True End Sub Private Sub End_Trap(target As String) Range(target).Select Application.EnableEvents = True End End Sub Private Sub Emp_Check(rw As Long) Dim i As Long For i = 1 To rw - 1 If Cells(i, "B").Value = Empty Then End_Trap "B" & i Next End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194700] Re[4]: VBAを用いて予約表の作り方を教えてほしい- ■記事引用/メール受信=OFF■ □投稿者/ ま -(2022/01/31(22:15)) □U R L/ Kazuo様ありがとうございます! 実際マクロを実行してみたら予想以上に素晴らしいものができてて感動しました! VBAも授業で受けたぐらいの知識しかないので、マクロで分からないところは自分で調べて勉強していきます! 最後に質問なのですが、2月以降を試していたところどうしても28日以降が出てこないのですがどうすればその月相応の日数になりますか?教えていただけるとありがたいです。 |
[194701] Re[5]: VBAを用いて予約表の作り方を教えてほしい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2022/01/31(22:52)) □U R L/ 確かに、 With Range("B9").Resize(, 2) .Value = Array("9:30", "10:00") .AutoFill Range("B9:T9") ’★これでセレクションチェンジが発生し、月変更非対応 Range("T9").Font.ColorIndex = 2 '18:30が必要だが,色で消している End With With Range("A10:A40") .ClearContents .Cells(1).Value = "2022/12/1" '★開始日 .DataSeries xlColumns, xlChronological, xlDay, 1, VBA.DateAdd("M", 1, .Cells(1).Value) - 1 End With 一番上の 'Const DEBUGFLG = True 'シートを手作業でいじる場合は有効にすること ↳ シートいじる場合は有効にすること として下さい。 あと、B6入力を追加ください。 Case 6 target.Value = "否" '入力確率が多い方 Case 7 '入力完了 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194705] Re[6]: VBAを用いて予約表の作り方を教えてほしい- ■ / 記事引用/メール受信=OFF■ □投稿者/ ま -(2022/02/01(19:33)) □U R L/ 返信ありがとうございます。 早速試しましたいい感じに動いています!ありがとうございました! |
このトピックに書きこむ |
---|