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

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

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

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

Q&A

解決済

1回答

489閲覧

accessにおいて、ユーザー定義関数が機能してくれない

syosinsya109

総合スコア41

Access

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

0グッド

0クリップ

投稿2022/10/06 05:46

編集2022/10/06 09:26

前提

変数にsql文を組み立てる際に、変数の中が空なはずなのに値が格納されていたり(orderByFunction関数の最初のDebug.Print "c : " & orderbyで何故か値が入っている)、呼び出し元に値が返ってこなかったり(Debug.Print "a : " & orderbyは何故か空)、格納した内容と異なっていたり(Debug.Print "b : " & orderbyでいらない"["や"]"が付いている)しています。何故なのでしょうか。

実現したいこと

End Subの手前に書かれてあるSQLが正常に動作するようにしたい

該当のソースコード

access

1Private Sub 検索btn_Click() 2'引数1は2、引数2は3 3 '初期化 4 select句 = "SELECT *" 5 Dim where As String 6 Dim orderby As String 7 Dim groupby As String 8 9 'グループ化 10 Dim group(2) As String 11 group(0) = "選択してください" 12 group(1) = "名前" 13 group(2) = "性別" 14 15 '名前検索 16 If IsNull(名前) = False Then 17 '空白チェック 18 where = " WHERE 名前 LIKE '*" & a & "*'" 19 End If 20 '金額並べ替え 21 orderby = function(引数1, 引数2) 22 Debug.Print "a : " & orderby 23 'グループ化 24 If IsNull(グループ化) = False Then 25 If group(グループ化 - 1) <> "選択してください" Then 26 '空白チェック 27 If group(グループ化 - 1) = "名前" Then 28 '名前別のグループ化 29 groupby = " GROUP BY 名前" 30 ElseIf group(グループ化 - 1) = "性別" Then 31 '性別別のグループ化 32 groupby = " GROUP BY 性別" 33 End If 34 select = "SELECT * 35 End If 36 End If 37 Debug.Print "SQL : " & select & " FROM table" & where & groupby & orderby & ";" 38 Me.RecordSource = select & " FROM table" & where & groupby & orderby & ";" 39 40End Sub 41 42'関数 43'引数1=コンボボックスのグループ化の値、引数2=コンボボックスの並べ替えの値 どっちも0、1、2が入る 44Function orderByFunction(ByVal groupby As String, ByVal sql As String) As String 45 Debug.Print "c : " & orderby 46 '並べ替え 47 Dim sort(2) As String 48 sort(0) = "選択してください" 49 sort(1) = "昇順" 50 sort(2) = "降順" 51 52 If IsNull(groupby) = flse And groupby <> 1 Then 53 If IsNull(sql) = False Then 54 If sort(sql - 1) <> "選択してください" Then 55 '空白チェック 56 If sort(sql - 1) = "昇順" Then 57 '昇順 58 orderByFunction = " ORDER BY 年齢" 59 ElseIf sort(sql - 1) = "降順" Then 60 '降順 61 orderByFunction = " ORDER BY 年齢 DESC" 62 End If 63 End If 64 End If 65 Else 66 If IsNull(sql) = False Then 67 If sort(sql - 1) <> "選択してください" Then 68 '空白チェック 69 If sort(sql - 1) = "昇順" Then 70 '昇順 71 orderByFunction = " ORDER BY 金額" 72 ElseIf sort(sql - 1) = "降順" Then 73 '降順 74 orderByFunction = " ORDER BY 金額 DESC" 75 End If 76 End If 77 End If 78 End If 79 80 Debug.Print "b : " & orderby 81End Function

試したこと

accessでユーザー定義関数を触ったことなかったので、いろいろ調べながらここまで来ました。なのですが思い通り機能してくれません。
以下が自分が採用したサイトの一部です。
https://www.sejuku.net/blog/28904

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

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

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

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

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

sazi

2022/10/06 07:03

orderby = orderByFunction(グループ化, 金額_並べ替え) 上記の「グループ化」や 「金額_並べ替え」はどこで定義されていますか?
syosinsya109

2022/10/06 07:27

回答ありがとうございます。 すいません。それらの値はフォームデザインで設置したテキストボックスやコンボボックスの名前となっているのでプログラムでは定義していません。 そのためプログラムの一番上のコメントアウトで定義させてもらっています。 グループ化=2、金額_並べ替え=3 です。わかりにくくてすいません
guest

回答1

0

自己解決

他の言語のユーザー定義関数とは違い、accessのユーザー定義関数は関数名を戻り値用の変数に使わなければ関数外では反映されなかったみたいです!
回答してくださった方ありがとうございました。

投稿2022/10/06 09:28

syosinsya109

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問