プロが教えるわが家の防犯対策術!

カテ間違いしてしまいましたので再度投稿します。
よろしくお願いいたします。

上司からの依頼で困っています。

添付のような、マクロボタンを設定し、

・登録ボタンを押したら該当時間の下の表のセルが塗りつぶされる
・削除ボタンを押したら削除される
・表のセルをクリックしたら、名前、内容などが表示される

ように、することは可能でしょうか?

マクロは初心者ですが絶対に完成させろといわれてしまいました。。。

そもそも、このような作りこみは可能でしょうか?
ちなみに、この表は数人が共有して使う予定です。

以上、お願いいたします。

「excelで会議室予約表の作成(マクロ)」の質問画像

A 回答 (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

この回答への補足

重ね重ねありがとうございます!
私も、Wブッキングは気になっていました。。。
さっそく試してみます。

ちなみに、削除は何とか完成させることができました。
本当にmerlionXXさんのおかげです。
本当にありがとうございます。

補足日時:2011/05/24 13:08
    • good
    • 0
この回答へのお礼

お陰様で、何とか完成させました。
本当に、本当にありがとうございました。

お礼日時:2011/05/27 16:21

merlionXXです。


もうお気づきとは思いますが、ANo6で貼り付けたコードの下に、なぜか余分な14行がはりついていました。
(わたしのコピペミスに決まってますが)
End Subの下の14行は削除してください。
    • good
    • 1

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

この回答への補足

本当に申し訳ありません。
おっしゃっる通りですよね。
お恥ずかしい限りです。

お陰様で、表示させるところまではできました。
後は削除させるのに取り掛かります。

取り急ぎ、お詫びと御礼まで。
本当にありがとうございました。

補足日時:2011/05/24 10:42
    • good
    • 1

わたしのはまたエクセル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
「excelで会議室予約表の作成(マクロ)」の回答画像4

この回答への補足

ご丁寧にありがとうございます。
一度、ズレはありましたが、色が付いて、コメントが表示されました!
でもまた、うまくいかなくなってしまいました。。。

実際は入力を別シートにするので以下のようにしてみました。
アドバイスいただけましたら幸いです。

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

補足日時:2011/05/23 18:29
    • good
    • 0

尚、作成時ですが、マクロとして記録した後にそのコードを使って作成する方法があります


手元にExcel2007しか無い為に多少用語が違っているかもしれませんが

マクロ機能:Alt+F8
行った操作が記録でき、コードになって格納されます

VBAEditor:Alt+F11
実際に動作させるコードを記述するのはここです。

ちょっと画像が粗いので、タブが表示されているかどうかは判らないのですが
実際に開発する際には、設定で開発タブ等を表示させた方がいいかと思います。
ボタンやコンボボックス(ドロップダウンリスト)等、必要な物を画面上に配置する際にも使う筈です


Excel VBAに関しては色々サイトがありますので、やりたい事は割と見つかり易い方かと思います。
http://excelvba.pc-users.net/
    • good
    • 0

当方PG、今年で3年目です。



どういう会社なのかは今一つ分かりませんが…
PGとか居ない普通の会社であれば、こういうモノを結構甘く見てるような気がします
これを完成させても、今後も大変かもしれませんが…それは置いといて。

○仕様についての疑問
 作り込みは可能です。しかし、どのように作るべきかはもう少し悩むべきだと思います
 1.日付を入力する欄が見えませんが、何処で入力しますか?
   (ボタンを押した当日?入力欄が足りない?)
 2.削除ボタンを押したとき、何を基準に削除しますか?
   (開始時間、終了時間、または両方?)

○注意点
 あとで困るかと思いますので、いきなり酷い事を云いますが
 実用に耐えられないかと思います。
 ●共有
  1.共有する際には「同時に」と云う点を考えなければいけない事
  2.他人の編集を即座に反映させられるような物を考えなければならない事
    (他人に気付かずに上書きされたら意味がないですよね…)
 ●バージョンの問題
  1.画面はExcel2010ですが、全員2010を使用していますか?
    バージョンが違う場合は一部の関数や動作が異なります(※対応する事は可能ですが…
 ●例外
  1.時間以外を入力した場合
  2.開始時間と終了時間を逆にした場合
  3.文字や記号、日付を入力した場合
  4.セルをカットアンドペーストした場合
   etc...

  これらが出来ないようにロックを掛けたり、入力を確認したりするステップがそこそこあります
  その辺りは上司と色々確認しあって決めないといけないと思いますが…
  …所で、期限はどれくらいありますでしょうか…?

この回答への補足

補足させていただきます。

ご指摘の通り、こういったものを作成しても後が困ったり、実用に耐えない
場合があることは重々承知しています。(ver.の事も含めて)
ですが、上司に、その旨説明しても納得してもらえず、質問するに至りました。
とにかく作成しろの一点張りなのです。。。

上司は海外出張の為、今週いっぱいは居ません。期限はその間です。

●日付について
 入力欄を漏らしていました。
 貼り付けたものはあくまでもイメージ図です。

●仕様について
 削除:出来るなら、全て削除できるのが望ましいです。

●バージョンの問題
 全員2010ではありません。
 異なるバージョンでの関数や動作が異なるのは認識していますが
 他バージョンでも動作できるのが望ましいです。

●例外について
 あくまでも、必要事項を決められた通りに入力するということを
 前提で構いません。

●共有
 複数人が同時に入力出来なくてもかまいません。

以上、補足でした。
よろしくお願いいたします。

補足日時:2011/05/23 16:39
    • good
    • 0

可能です。


各操作をまずはマクロ登録して、各ボタンに適用させてみてください。

この回答への補足

申し訳ありません、もう少し詳しくご教授いただけましたらありがたいです。

何分素人なものでお願いいたします。

補足日時:2011/05/23 14:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!