- ベストアンサー
excelで会議室予約表の作成(マクロ)
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 後は削除させるのに取り掛かります。 がんばってください。 でも、さきほどのではいくらでも重複予約ができてしまいますね。 きっと上司に言われると思いますよ。 sei_s95さんががんばってる間に、わたくしはさきほどのコードにダブルブッキング防止機能を付加してみました。 こんなのはどうでしょう? Sub 登録() Dim x As Long, y As Long, z As Long, i As Long Dim ws As Worksheet Dim Rng As Range, c As Range Set ws = Sheets("TEST") With Sheets("Sheet1") x = .Range("A2:A50").Find(What:=ws.Range("D2").Value, LookIn:=xlFormulas, _ LookAt:=xlWhole).Row y = .Rows(1).Find(What:=ws.Range("D3").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = .Rows(1).Find(What:=ws.Range("D4").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 Set Rng = .Range(.Cells(x, y), .Cells(x, z)) For Each c In Rng If c.Interior.ColorIndex <> xlNone Then i = i + 1 End If Next c Select Case True Case i = Rng.Count MsgBox "ダブルブッキング!!", vbCritical, "Σ( ̄ロ ̄lll) ": End Case i > 0 MsgBox "指定時間の一部が予約されています。", vbCritical, "ヾ( ̄□ ̄; )ノ!": End Case Else MsgBox "予約しました。", vbInformation, "(´^∇^)σ" End Select With Rng .Interior.ColorIndex = 6 .ClearComments With .Cells(1) .AddComment .Comment.Visible = False .Comment.Text Text:=ws.Range("A2").Value & "/" & ws.Range("D3").Text End With End With End With End Sub LookAt:=xlWhole).Row y = .Rows(1).Find(What:=Range("D3").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = .Rows(1).Find(What:=Range("D4").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 .Range(.Cells(x, y), .Cells(x, z)).Interior.ColorIndex = 6 .Range(.Cells(x, y), .Cells(x, z)).ClearComments With .Cells(x, y) .AddComment .Comment.Visible = False .Comment.Text Text:=Range("A2").Value & "/" & Range("D3").Text End With End With End Sub
その他の回答 (6)
- merlionXX
- ベストアンサー率48% (1930/4007)
merlionXXです。 もうお気づきとは思いますが、ANo6で貼り付けたコードの下に、なぜか余分な14行がはりついていました。 (わたしのコピペミスに決まってますが) End Subの下の14行は削除してください。
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo4 merlionXXです。 > 実際は入力を別シートにするので以下のようにしてみました。 > アドバイスいただけましたら幸いです。 ご自身でアレンジできないなら最初からありのままの姿で質問なさったほうが良いのでは? 二度手間になります。 お書きになったコードを見る限り、 会議室予約表はSheet1にある。 日付欄はA2:A50 時間欄は1行目 入力するのはSheet1でないが、シート名は不明。但し、マクロ実行時には必ずアクティブである。 そのアクティブなシートで 日付はD2 開始時間はD3 終了時間はD4 A2セルは、多分予約者名か会議名 普通、こんなことは回答者に解読させるのではなく質問者が明記することだと思いますよ。 入力するシート名がわからなかったので、とりあえず TEST というシート名としました。 下記コードの、Set ws = Sheets("TEST") の TEST 部分を実際のものに書き換えてください。 Sub 登録() Dim x As Long, y As Long, z As Long Dim ws As Worksheet Set ws = Sheets("TEST") With Sheets("Sheet1") x = .Range("A2:A50").Find(What:=ws.Range("D2").Value, LookIn:=xlFormulas, _ LookAt:=xlWhole).Row y = .Rows(1).Find(What:=ws.Range("D3").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = .Rows(1).Find(What:=ws.Range("D4").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 .Range(.Cells(x, y), .Cells(x, z)).Interior.ColorIndex = 6 .Range(.Cells(x, y), .Cells(x, z)).ClearComments With .Cells(x, y) .AddComment .Comment.Visible = False .Comment.Text Text:=ws.Range("A2").Value & "/" & ws.Range("D3").Text End With End With End Sub
補足
本当に申し訳ありません。 おっしゃっる通りですよね。 お恥ずかしい限りです。 お陰様で、表示させるところまではできました。 後は削除させるのに取り掛かります。 取り急ぎ、お詫びと御礼まで。 本当にありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
わたしのはまたエクセル2000なので、あなたのでもできるかどうかは自信がありませんが・・・。 データの配置は添付画像を見てください。 Sub 登録() Dim x As Long, y As Long, z As Long x = Range("A11:A41").Find(What:=Range("A4").Value, LookIn:=xlFormulas, _ LookAt:=xlWhole).Row y = Rows(10).Find(What:=Range("A5").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = Rows(10).Find(What:=Range("A6").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 Range(Cells(x, y), Cells(x, z)).Interior.ColorIndex = 6 Range(Cells(x, y), Cells(x, z)).ClearComments With Cells(x, y) .AddComment .Comment.Visible = False .Comment.Text Text:=Range("A2").Value & "/" & Range("A3").Value End With End Sub Sub 削除() Dim x As Long, y As Long, z As Long x = Range("A11:A41").Find(What:=Range("A4").Value, LookIn:=xlFormulas, _ LookAt:=xlWhole).Row y = Rows(10).Find(What:=Range("A5").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = Rows(10).Find(What:=Range("A6").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 Range(Cells(x, y), Cells(x, z)).Interior.ColorIndex = xlNone Range(Cells(x, y), Cells(x, z)).ClearComments End Sub
補足
ご丁寧にありがとうございます。 一度、ズレはありましたが、色が付いて、コメントが表示されました! でもまた、うまくいかなくなってしまいました。。。 実際は入力を別シートにするので以下のようにしてみました。 アドバイスいただけましたら幸いです。 Sub 登録() Dim x As Long, y As Long, z As Long x = Range("sheet1!A2:A50").Find(What:=Range("D2").Value, LookIn:=xlFormulas, _ LookAt:=xlWhole).Row y = Rows("sheet1!1").Find(What:=Range("D3").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column z = Rows("sheet1!1").Find(What:=Range("D4").Text, LookIn:=xlValues, _ LookAt:=xlWhole).Column - 1 Range(Cells(x, y), Cells(x, z)).Interior.ColorIndex = 6 Range(Cells(x, y), Cells(x, z)).ClearComments With Cells(x, y) .AddComment .Comment.Visible = False .Comment.Text Text:=Range("A2").Value & "/" & Range("D3").Value End With End Sub
- deltaforce_1
- ベストアンサー率34% (88/255)
尚、作成時ですが、マクロとして記録した後にそのコードを使って作成する方法があります 手元にExcel2007しか無い為に多少用語が違っているかもしれませんが マクロ機能:Alt+F8 行った操作が記録でき、コードになって格納されます VBAEditor:Alt+F11 実際に動作させるコードを記述するのはここです。 ちょっと画像が粗いので、タブが表示されているかどうかは判らないのですが 実際に開発する際には、設定で開発タブ等を表示させた方がいいかと思います。 ボタンやコンボボックス(ドロップダウンリスト)等、必要な物を画面上に配置する際にも使う筈です Excel VBAに関しては色々サイトがありますので、やりたい事は割と見つかり易い方かと思います。 http://excelvba.pc-users.net/
- deltaforce_1
- ベストアンサー率34% (88/255)
当方PG、今年で3年目です。 どういう会社なのかは今一つ分かりませんが… PGとか居ない普通の会社であれば、こういうモノを結構甘く見てるような気がします これを完成させても、今後も大変かもしれませんが…それは置いといて。 ○仕様についての疑問 作り込みは可能です。しかし、どのように作るべきかはもう少し悩むべきだと思います 1.日付を入力する欄が見えませんが、何処で入力しますか? (ボタンを押した当日?入力欄が足りない?) 2.削除ボタンを押したとき、何を基準に削除しますか? (開始時間、終了時間、または両方?) ○注意点 あとで困るかと思いますので、いきなり酷い事を云いますが 実用に耐えられないかと思います。 ●共有 1.共有する際には「同時に」と云う点を考えなければいけない事 2.他人の編集を即座に反映させられるような物を考えなければならない事 (他人に気付かずに上書きされたら意味がないですよね…) ●バージョンの問題 1.画面はExcel2010ですが、全員2010を使用していますか? バージョンが違う場合は一部の関数や動作が異なります(※対応する事は可能ですが… ●例外 1.時間以外を入力した場合 2.開始時間と終了時間を逆にした場合 3.文字や記号、日付を入力した場合 4.セルをカットアンドペーストした場合 etc... これらが出来ないようにロックを掛けたり、入力を確認したりするステップがそこそこあります その辺りは上司と色々確認しあって決めないといけないと思いますが… …所で、期限はどれくらいありますでしょうか…?
補足
補足させていただきます。 ご指摘の通り、こういったものを作成しても後が困ったり、実用に耐えない 場合があることは重々承知しています。(ver.の事も含めて) ですが、上司に、その旨説明しても納得してもらえず、質問するに至りました。 とにかく作成しろの一点張りなのです。。。 上司は海外出張の為、今週いっぱいは居ません。期限はその間です。 ●日付について 入力欄を漏らしていました。 貼り付けたものはあくまでもイメージ図です。 ●仕様について 削除:出来るなら、全て削除できるのが望ましいです。 ●バージョンの問題 全員2010ではありません。 異なるバージョンでの関数や動作が異なるのは認識していますが 他バージョンでも動作できるのが望ましいです。 ●例外について あくまでも、必要事項を決められた通りに入力するということを 前提で構いません。 ●共有 複数人が同時に入力出来なくてもかまいません。 以上、補足でした。 よろしくお願いいたします。
- aokii
- ベストアンサー率23% (5210/22062)
可能です。 各操作をまずはマクロ登録して、各ボタンに適用させてみてください。
補足
申し訳ありません、もう少し詳しくご教授いただけましたらありがたいです。 何分素人なものでお願いいたします。
お礼
お陰様で、何とか完成させました。 本当に、本当にありがとうございました。
補足
重ね重ねありがとうございます! 私も、Wブッキングは気になっていました。。。 さっそく試してみます。 ちなみに、削除は何とか完成させることができました。 本当にmerlionXXさんのおかげです。 本当にありがとうございます。