Accessについて質問です。施設の部屋に入居している人をAccess管理したいです。画像のような入居者テーブルを作って、入居日・退去日の日付をもとに、1か月分の部屋ごとの使用状況を一覧で見れるようにしたいです。ずっと入居中の人もいれば、月途中入居の人、月途中で退去の人、同じ部屋で1か月の間に複数の人が入れ変わって使用する場合もあります。入居日を赤、退去日を青、それ以外の部屋を使用している期間は黄色というふうにできればいいなと考えております。何か良い方法があれば教えていただきたいです。よろしくお願いいたします。

1件の回答

回答を書く

1069801

2026-07-24 08:55

+ フォロー

難易度高めです

案件レベルです



超ザックリで以下の3ステップです



① フォーム表示専用の作業用テーブルを構築します

フィールドは下記のパターンの総数32個で、テーブル名は「月一覧テーブル」としてみます

・部屋番号(主キー)

・1

・2



・30

・31



② ①をソースにした帳票フォームを作成します

ヘッダーにラベル、詳細にテキストボックスを配置します

その際、名前を意味のあるものにします

ここではラベルを [ラベル1]~[ラベル31] 、テキストボックスを [1]~[31] としてみます



③ 下記のVBAを記述します

フォーム「読み込み時」イベントで実行されるようにします

※このVBAコードはお試し用であってバグ取りはしていません

※対象となる日付が固定となっています

一般的には年月を選択する機構を設置しなければならないでしょう

※のちに氏名などの情報を表示できるように余分な仕組みを仕込んでいます

※自力でカスタマイズできないのでしたら諦めて外注してみてください





Option Compare Database

Option Explicit



Private Sub Form_Load()



Dim c As Long ' Condition

Dim d As Long ' Day



'--- 条件付き書式の設置

For d = 1 To 31



With Me(\u0026quot;[\u0026quot; \u0026amp; d \u0026amp; \u0026quot;]\u0026quot;).FormatConditions

For c = .Count To 1 Step -1

Me(\u0026quot;[\u0026quot; \u0026amp; d \u0026amp; \u0026quot;]\u0026quot;).ForeColor = vbWhite

Me(\u0026quot;[\u0026quot; \u0026amp; d \u0026amp; \u0026quot;]\u0026quot;).BackColor = vbWhite

.Item(c).Delete

Next

With .Add(acExpression, , \u0026quot;Left([\u0026quot; \u0026amp; d \u0026amp; \u0026quot;],1)=\u0026quot;\u0026quot;-\u0026quot;\u0026quot;\u0026quot;)

.ForeColor = vbWhite

.BackColor = vbWhite

.Enabled = False

End With

With .Add(acExpression, , \u0026quot;Left([\u0026quot; \u0026amp; d \u0026amp; \u0026quot;],1)=\u0026quot;\u0026quot;@\u0026quot;\u0026quot;\u0026quot;)

.ForeColor = vbYellow

.BackColor = vbYellow

.Enabled = False

End With

With .Add(acExpression, , \u0026quot;Left([\u0026quot; \u0026amp; d \u0026amp; \u0026quot;],1)=\u0026quot;\u0026quot;I\u0026quot;\u0026quot;\u0026quot;)

.ForeColor = vbRed

.BackColor = vbRed

.Enabled = False

End With

With .Add(acExpression, , \u0026quot;Left([\u0026quot; \u0026amp; d \u0026amp; \u0026quot;],1)=\u0026quot;\u0026quot;O\u0026quot;\u0026quot;\u0026quot;)

.ForeColor = vbBlue

.BackColor = vbBlue

.Enabled = False

End With

End With



Next



'--- 対象日付

Dim TargetDate As Date

TargetDate = #4/1/2025#



'--- 対象の月の日の数の可視を調整

c = Day(DateSerial(Year(TargetDate), Month(TargetDate) + 1, 0))

For d = 1 To 31

Me(\u0026quot;[\u0026quot; \u0026amp; d \u0026amp; \u0026quot;]\u0026quot;).Visible = (d \u0026lt;= c)

Me(\u0026quot;[ラベル\u0026quot; \u0026amp; d \u0026amp; \u0026quot;]\u0026quot;).Visible = (d \u0026lt;= c)

Next



'--- 対象日付よりワークテーブルのレコードを構築

BuildWorkRecords TargetDate

Me.Requery



End Sub



Sub BuildWorkRecords(TargetDate As Date)



Dim strYM As String

Dim i As Long

Dim LastDay As Long



strYM = Format(TargetDate, \u0026quot;yyyy/mm\u0026quot;)

LastDay = Day(DateSerial(Year(TargetDate), Month(TargetDate) + 1, 0))



CurrentDb.Execute \u0026quot;DELETE FROM 月一覧テーブル\u0026quot;

CurrentDb.Execute \u0026quot;INSERT INTO 月一覧テーブル ( 部屋番号 ) SELECT 部屋番号 FROM 入居者テーブル;\u0026quot;



With CurrentDb.OpenRecordset( _

\u0026quot;SELECT 月一覧テーブル.*, 入居者テーブル.入居者名, 入居者テーブル.入居日, 入居者テーブル.退去日 FROM 月一覧テーブル\u0026quot; _

\u0026amp; \u0026quot; INNER JOIN 入居者テーブル ON 月一覧テーブル.部屋番号 = 入居者テーブル.部屋番号\u0026quot; _

)

Do Until .EOF

.Edit

If Format(!入居日, \u0026quot;yyyy/mm\u0026quot;) \u0026lt;= strYM And IsNull(!退去日) Then

For i = IIf(Format(!入居日, \u0026quot;yyyy/mm\u0026quot;) = strYM, Day(!入居日), 1) To LastDay

If Format(!入居日, \u0026quot;yyyy/mm/dd\u0026quot;) = strYM \u0026amp; Format(i, \u0026quot;\\/00\u0026quot;) Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;I\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

Else

If Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;), 1, 1) \u0026lt; \u0026quot;A\u0026quot; Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;@\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

End If

End If

Next

End If

If Format(!退去日, \u0026quot;yyyy/mm\u0026quot;) \u0026gt;= strYM And IsNull(!入居日) Then

For i = 1 To LastDay

If Format(!退去日, \u0026quot;yyyy/mm/dd\u0026quot;) = strYM \u0026amp; Format(i, \u0026quot;\\/00\u0026quot;) Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;O\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

Exit For

Else

If Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;), 1, 1) \u0026lt; \u0026quot;A\u0026quot; Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;@\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

End If

End If

Next

End If

If Format(!入居日, \u0026quot;yyyy/mm\u0026quot;) \u0026lt;= strYM And Format(!退去日, \u0026quot;yyyy/mm\u0026quot;) \u0026gt;= strYM Then

For i = IIf(Format(!入居日, \u0026quot;yyyy/mm\u0026quot;) = strYM, Day(!入居日), 1) To LastDay

If Format(!入居日, \u0026quot;yyyy/mm/dd\u0026quot;) = strYM \u0026amp; Format(i, \u0026quot;\\/00\u0026quot;) Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;I\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

ElseIf Format(!退去日, \u0026quot;yyyy/mm/dd\u0026quot;) = strYM \u0026amp; Format(i, \u0026quot;\\/00\u0026quot;) Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;O\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

Exit For

Else

If Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;), 1, 1) \u0026lt; \u0026quot;A\u0026quot; Then

.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value = \u0026quot;@\u0026quot; \u0026amp; Mid(.Fields(\u0026quot;[\u0026quot; \u0026amp; i \u0026amp; \u0026quot;]\u0026quot;).Value, 2)

End If

End If

Next

End If

.Update

.MoveNext

Loop



End With



End Sub

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有