戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
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/

      返信ありがとうございます。
      早速試しましたいい感じに動いています!ありがとうございました!



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G