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

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

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

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

Q&A

解決済

2回答

785閲覧

access コンボボックスによるフィルタリングの汎用関数

yuujiMotoki

総合スコア90

Access

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

0グッド

0クリップ

投稿2018/10/18 05:03

編集2018/10/18 05:25

ACCESSでグラフを表示するための、分割フォームを作っています。

イメージ説明

### 課題

分割フォームを利用して、右側のテーブル = 左側のフォーム上のグラフを連動させたいと思っています。

###質問内容

複数のフィルタリング条件が考えられるため、AND条件の検索が必要です。
使用するユーザーが動的にコンボボックスを追加できるように、
コンボボックスのコントロールソースから、フィルタ条件を関数で作成してフィルタをかけています。

データのフィルタリングはまでは、できてはいるのですが、
この先のやり方が見えずに、今の方法に疑問を感じています。

もっとほかに、かしこいやり方があったら教えて欲しいのでしょうか?
(以上で、だいたいの私のやりたいイメージをお伝えできていると思いますが・・・)

VBA

1 2フォームのフィルタ条件 3 4 [グラフデータ].Pad='167_169' AND [グラフデータ].試験名='サーマルサイクル(TC)' AND [グラフデータ].NO='101' 5

SQL

1 2各コンボボックスの値ソース 3 4SELECT [グラフデータ].Pad FROM グラフデータ; 5SELECT [グラフデータ].試験名 FROM グラフデータ GROUP BY [グラフデータ].試験名; 6SELECT [グラフデータ].NO FROM グラフデータ GROUP BY [グラフデータ].NO;

VB

1フォームモジュール 2 3Option Compare Database 4Option Explicit 5 6Private Sub CmbNo_AfterUpdate(): GoFilter: End Sub 7Private Sub CmbPad_AfterUpdate(): GoFilter: End Sub 8Private Sub CmbTest_AfterUpdate(): GoFilter: End Sub 9 10Sub GoFilter(): Set_Fileter Me: End Sub 11

VB

1標準モジュール 2 3Option Compare Database 4Option Explicit 5 6 7 8Public Sub Set_Fileter(Form As Variant) 9Dim key 10Dim filt: filt = "" 11Dim obj 12Dim i: i = 0 13 14For Each obj In Form.Controls 15 With obj 16 If .ControlType = acComboBox Then 17 Debug.Print .RowSource 18 19 key = Replace(Replace(正規表現(.RowSource, "SELECT .+ FROM").Item(0).Value, " FROM", ""), "SELECT ", "") 20 If Not IsNull(.Value) Then filt = filt & " " & key & "='" & .Value & "' AND " 21 i = i + 1 22 End If 23 End With 24Next 25 26Form.Filter = Left(filt, Len(filt) - 5) 27Debug.Print Form.Filter 28 29Form.FilterOn = True 30 31End Sub 32 33 34 35Function 正規表現(msg As String, strPattern As String) As Object 36 Dim RE As Object 37 Set RE = CreateObject("VBScript.RegExp") 38 With RE 39 .Pattern = strPattern ''検索パターンを設定 40 .IgnoreCase = True ''大文字と小文字を区別しない 41 .Global = True ''文字列全体を検索 42 Set 正規表現 = .Execute(msg) 43 End With 44End Function 45 46 47

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

アクセスのグラフに関しては、WINDOWSのGRAPHコンポーネントとの連携が悪いため、あきらめることにしました。この点では、EXCELの方に軍配が上がる結果となりました。

投稿2018/10/30 02:31

yuujiMotoki

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

しかしながら、うまく動いてくれません。

具体的に求める結果とその相違を示さないと分かりませんよ。

1)分割フォームのフィルタ式は、これで間違っていませんでしょうか?

フィルターが適用されていないならFilterOnプロパティがTrueになっていないからではないでしょうか。

ただ、そもそも分割フォームはデータシートビューがフィルターの役割です。
意図した動作になるかは言及できません。

2)もっとマシな方法はありませんでしょうか?

分割フォームではなくて、サブフォームを使用する方が目的に合いそうな気がします。

投稿2018/10/18 05:27

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問