フロアのどこに座っているかわからないので、Excelで座席位置を確認できるようにする。
要件整理
背景画像として座席表がある(シート上に画像を貼り付けてある)
ユーザーが朝、自分の席に図形(オブジェクト)を配置する
→ 任意の図形(例えば「●」などの円)を使う
日が終わったら、その図形を一括削除するボタンが欲しい
解決策概要
座席位置を示す図形の名前に特定の接頭辞(たとえば "座席_")をつける
マクロではその接頭辞がついた図形だけをまとめて削除する
ボタンはマクロ実行用に配置
手順とコード
-
図形を配置する際のルール
-
図形を挿入したら、**名前を「座席_ユーザー名」**などに変更する。
(図形を選択 → 名前ボックスでリネーム) -
マクロコード(VBA)
Excelの Alt + F11 でVBAエディタを開く
挿入 → 標準モジュール
以下を貼り付け:
Sub ResetSeatMarkers()
Dim shp As Shape
Dim deletedCount As Integer
deletedCount = 0
For Each shp In ActiveSheet.Shapes
If Left(shp.Name, 3) = "座席_" Then
shp.Delete
deletedCount = deletedCount + 1
End If
Next shp
MsgBox deletedCount & " 件の座席マーカーを削除しました。", vbInformation
End Sub
ボタンの設置方法
Excelシートに戻る
「開発」タブ → 「挿入」→ 「フォームコントロールのボタン」
任意の場所にドラッグ
表示されるダイアログで ResetSeatMarkers を選択
マクロの仕様
- Excelの座席表シートに、座席マーカー(丸い図形)を自動で追加します。
- 座る席の位置(セル)を選択し、その位置に円形の図形(●)を配置。
- 図形には自動で**名前「座席_ユーザー名」**をつける。
- 図形の色は自由に変更可能(標準で青に設定)。
ユーザー名はマクロ実行時に入力ボックスから入力します。
Sub AddSeatMarker()
Dim userName As String
Dim marker As Shape
Dim targetCell As Range
Dim leftPos As Double, topPos As Double
Dim width As Double, height As Double
' ユーザー名を入力
userName = InputBox("あなたの名前を入力してください(例:Yamada)", "ユーザー名入力")
If userName = "" Then Exit Sub
' セルが選択されているかチェック
If TypeName(Selection) <> "Range" Then
MsgBox "まず、座っている席に該当するセルを選択してください。", vbExclamation
Exit Sub
End If
Set targetCell = Selection.Cells(1)
' 図形の大きさと位置(セルの中央に配置)
leftPos = targetCell.Left + (targetCell.Width / 4)
topPos = targetCell.Top + (targetCell.Height / 4)
width = targetCell.Width / 2
height = targetCell.Height / 2
' 円形の図形を作成
Set marker = ActiveSheet.Shapes.AddShape(msoShapeOval, leftPos, topPos, width, height)
' 図形の書式
With marker
.Name = "座席_" & userName
.Fill.ForeColor.RGB = RGB(0, 112, 192) ' 青色
.Line.Visible = msoFalse
.LockAspectRatio = msoTrue
End With
End Sub
使い方手順(ユーザー向け)
- 自分が座っている席のセルを選択
- ボタンから「AddSeatMarker」マクロを実行
- 名前を入力すると、そのセルにマーカーが付きます
- 終業時は、前述の「ResetSeatMarkers」マクロで一括削除
座席表は画像で張り付けるので、セルを選択できない。
その場合は、Ctrl + 6 によって、シート上のすべてのオブジェクトを非表示にする。
セルを選択する。
再度 Ctrl +6 をクリックすることによって再表示する。