質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

accessのVBAで条件付き書式を設定したい。

t_msd
t_msd

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1回答

0グッド

0クリップ

3135閲覧

投稿2022/01/14 15:12

編集2022/01/14 15:14

締め切り一覧をaccessの表形式のフォームで管理しています。
締め日のレコードは赤文字で表示し、締め日を意識付けたいのですが
うまくvbaを組むことができません。

例えば、締め日が本日のものだけを赤くしたいときは以下のコードを記載していますが
一番上のレコードの日付が条件に合致していると、すべてのレコードが赤文字になり
一番上のレコードの日付が条件に合致していないと、すべてのレコードの色が変わりません。

Private Sub Form_Open(Cancel As Integer)

If [入力日時] = #1/15/2022# Then
[入力日時].ForeColor = &HFF
End If

End Sub

どのようにしたらレコードごとに条件判定をさせることができるでしょうか。

※条件式書式を使っていないのは、締め日の条件を
1億円以上は土日水除く5営業日前、1億円未満は土日水を除く2営業日前としており
その判別式の組み方がvbaでしか分からなかったためです。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

Accessは、コントロールのプロパティを各レコード毎に保持しいるわけではないので、すべてのレコードで同じ設定になります。
レコード毎に書式を変えたい場合は、条件付き書式しかありません。

※条件式書式を使っていないのは、締め日の条件を

1億円以上は土日水除く5営業日前、1億円未満は土日水を除く2営業日前としており
その判別式の組み方がvbaでしか分からなかったためです。

フォームのレコードソースのクエリにその条件をもとに締め日を計算する演算フィールドを追加して、それをもとに条件付き書式を設定してください。

「1億円以上は土日水除く5営業日前、1億円未満は土日水を除く2営業日前」という条件は式だけだと複雑になりすぎるので、ユーザー定義関数をVBAで作成するといいでしょう。

テーブルのフィールド構成などの情報が不足しているので、一般的な場合のサンプルコードを提示しておきますので、必要に応じて修正して使用してください。

標準モジュールに下記の関数を作成します。

VBA

1Public Function 締日(金額, 日付) 2 If IsNull(金額) Then Exit Function 3 If IsNull(日付) Then Exit Function 4 5 Dim cnt As Long, days As Long 6 cnt = 0 7 If 金額 >= 100000000 Then days = 5 Else days = 2 8 締日 = 日付 9 Do 10 締日 = 締日 - 1 11 Select Case Format(締日, "aaa") 12 Case "土", "日", "水" 13 Case Else 14 cnt = cnt + 1 15 End Select 16 Loop Until cnt = days 17End Function

クエリのフィールド欄に下記の式を設定します。

Query

1締日: 締日([金額],[日付])

これで締日が表示されますので、これを元に条件付き書式を設定すればいいでしょう。

投稿2022/01/15 04:02

hatena19

総合スコア32217

t_msd👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

t_msd

2022/01/16 17:15

ご丁寧にありがとうございます。 レコードごとに計算をさせることは出来たので条件付き書式も出来ると思っていましたが、そういうものなのですね。 明日、上記を元に組んでみたいと思います。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。