- ベストアンサー
Access 2003での数字の奇偶判断と結果出力
- Access 2003を使用して、指定の条件に基づいて数字の奇偶を判断し、結果を出力する方法について質問です。
- 質問の内容は、Access 2003のAテーブルとBテーブルの項目に入力された数字を処理し、奇数か偶数かを判断して指定の結果を出力する方法についてです。
- 具体的には、Aテーブルの項目がAの場合はBテーブルの数字が偶数ならA、Bテーブルの数字が奇数ならBという結果を、それ以外の場合は新しい項目にCという結果を出力したいとのことです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
当方Access2000なので、2003で動かなかったらご容赦を。 1.標準モジュールに次のコードを貼り付けます。 Option Compare Database Option Explicit '条件判定はお気に召すように修正下さい Function test(target1 As String, target2 As String) As String If (Val(extractNumeric(target2)) Mod 2) = 0 Then Select Case target1 Case "A" test = "A" Case "B" test = "B" Case Else test = "C" End Select Else test = "C" End If End Function Function extractNumeric(targetString As String) As Variant extractNumeric = subMatchWord(targetString, "(\d+)") End Function Private Function subMatchWord(targetString As String, matchString As String) As String Dim regEX As Variant Dim Matches As Variant Dim match As Variant Set regEX = CreateObject("VBScript.RegExp") regEX.MultiLine = False regEX.Pattern = matchString regEX.ignorecase = True regEX.Global = False On Error GoTo errorHandle Set Matches = regEX.Execute(targetString) If Matches(0).subMatches.Count > 0 Then subMatchWord = Matches(0).subMatches.Item(0) Else subMatchWord = "" End If Set Matches = Nothing Set regEX = Nothing Exit Function errorHandle: 'Debug.Print Err.Number & Err.Description subMatchWord = "-1" End Function 2.Field2というフィールドに、AやBが、Field3というフィールドに数字を含む文字列があるとします。クエリで、新たな列に、test([field2],[field3])という式をいれます。この列に判定されますので、後はテーブル作成クエリに変更するなりして下さい。 (注)Accessでこんな無茶をするとモジュールでエラーがあった時に、エラーが何度でも発生してひどい目にあう事が分かりました。ご注意下さい。 <実行例> id............field2................field3................式1 1..........A..................200M............A............ 2..........B..................回100............B............ 3..........A..................不明................C................ 4..........B..................201r............C............
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
ANo1の補足です。 読み直してみると、A,Bが入っているのと、数値混じり文字列が入っているのはテーブルが異なるという前提なのですね。しかしながら、判定はクエリで行いますので、両テーブルを結合させて、対象のフィールドを関数に入れてやれば、単一テーブルの場合と同様に出来ると思います。 なお、文字列のマッチングについては、 vba 正規表現 で、検索してみてください。 それほど複雑な条件ではないので、VBA本来の機能でも実現可能かもしれませんが...