• 締切済み

Accessクエリの抽出条件に関するご質問

Accessクエリの抽出方法に関し、以下のようなことはできるのでしょうか? 特定のフィールド内にカタカナ文字列のみのレコードがあった場合、別のフィールド内の対応するレコードの中身を検索し、ヒットした場合の横の文字列(左横、右横どちらか)がカタカナだった場合のみ抽出させたい。 (例) テーブル名:TEST フィールド:「No」、「文字列」、「例文」 No   文字列          例文 1   ああああ      あいああああお。 2   あアああ      あいあアああお。        3   アアアア       あイアアアアお。 4   アああア       あイアああアお。 5   イイイイ        イイイイアアお。 6   漢字漢字      あイ漢字漢字お。 7   ウウウウ      あウウウウ字お。 <抽出結果> No   文字列          例文       3   アアアア       あイアアアアお。 5   イイイイ        イイイイアアお。 ・No3は、文字列がカタカナのみ、例文中にヒットし、ヒットした左の文字がカタカナ「イ」である。 ・No5は、文字列がカタカナのみ、例文中にヒットし、ヒットした右の文字がカタカナ「ア」である。 ※No1,2,4,6はそもそも文字列がカタカナのみじゃない為、抽出しない。 ※No7は、文字列がカタカナのみ、例文中にヒットしたが、ヒットした左右の文字列がカタカナじゃないため抽出しない。 非常にわかりづらくてすいません。 こんな複雑なことができるかわかりませんが、ご教示のほどよろしくお願いいたします。

みんなの回答

回答No.4

30,000件はさすがにできないけど、数行のデータと例示のデータをExcelで入力して、リンクテーブルにして試してみましたが、問題なく動作しました。(Office2007, Win7 64bit) 原因として考えられるのは、下記のようなことですが、こちらで再現できない以上、実物のファイルを見ずに原因を特定するのは困難です。 私が提示した関数以外の場所でのエラー。 例示のデータ以外でのエラー。 関数、クエリの記述に間違いがある。

candle1
質問者

お礼

すいません。 色々ありがとうございました。 リンクテーブルじゃなく、テーブルに情報をもたせたら、できるようになりました。 この度は、ありがとうございました。

回答No.3

> 何万というレコードで、実際に試してみたところ、一部「不明」というエラーが発生しました。 もう少し具体的に説明してもらえますか。 クエリを開こうとしたときに「不明」というエラーメッセージがでるのですか。 それとも開いた結果にどこかのフィールドに「不明」と表示されるのですか。 とりあえず、テーブルを作成して、提示のデータを入力して、クエリを開いてみましたがエラーなく開きました。 別の部分でのエラーのような気がします。

candle1
質問者

補足

説明不足ですいません。 クエリを実行した時に、結果として「不明」というエラーが発生し、1行のレコードだけが表示され、すべて「#Name?」という表示がされます。 その他環境設定に関しましては、 ・端末はOffice2007 ・Access2007 ・テーブルは、Excel2007のリンクテーブル ※レコード数(Excelの行数)は30,000レコード になります。 もしかしたら、Excel2007のリンクテーブルがおかしいのでしょうか? お手数おかけいたしますがよろしくお願いいたします。

回答No.2

前回の回答ですが、投稿時に半角が全角に変換されてしまいましたが、 If str1 Like "*[!ア-ンア-ン]*" Then Exit Function の ア-ンア-ン の後半のア-ンは半角です。 半角のカタカナがないのなら、 If str1 Like "*[!ア-ン]*" Then Exit Function でもOKです。 MyLikeCompare = str2 Like "*[ア-ンア-ン]" & str1 & "*" _ Or str2 Like "*" & str1 & "[ア-ンア-ン]*" の部分も同様です。

candle1
質問者

補足

回答ありがとうございます。 何万というレコードで、実際に試してみたところ、一部「不明」というエラーが発生しました。 いろいろフィルタリングをして、実際のエラーレコードを絞り込んだところ、以下のレコードにて発生しておりました。 <エラー事象> 文字列:重合体 例文:S LaiおよびG.W.Knightは、実質的に線状である(substantially linear)エチレン重合体のレオロジー的挙動を特徴付ける目的で新しいレオロジー的測定、即ちダウレオロジーインデックス(DRI)を紹介し、これは、重合体が「長鎖分枝の結果として示す弛緩時間(relaxation time)を正規化した値」を表す[ANTEC ’93 Proceedings、InsiteTM Technology Polyolefins(ITP)-New Rules in the Structure/Rheology Relationship of Ethylene &-Orefin Copolymers、New Orleans、La.、1993年5月]。 文字列「重合体」はカタカナのみじゃないので、原因が不明ですが、なぜかわかりますでしょうか? 以上お手数おかけいたしまして恐縮ですが、ご教示の程よろしくお願い致します。

回答No.1

Accessのクエリ上の比較では、ひらがなとカタカナを区別しないので、VBAのユーザー定義関数を作成してそれを利用することになります。 標準モジュールを新規作成します。 Option Compare Database Option Explicit と記述されていると思います。(Option Explicit はない場合もあります。 それを下記のように書き直してください。 Option Compare Binary Option Explicit さらに、下記のコードを追加してください。 Public Function MyLikeCompare(str1, str2) As Boolean If IsNull(str1) Or IsNull(str2) Then Exit Function If str1 Like "*[!ア-ンア-ン]*" Then Exit Function MyLikeCompare = str2 Like "*[ア-ンア-ン]" & str1 & "*" _ Or str2 Like "*" & str1 & "[ア-ンア-ン]*" End Function このモジュールを、名前を mdl_BinaryCompare として保存します。 TESTテーブルからクエリを作成して、下記のフィールドを追加します。 フィールド MyLikeCompare([文字列],[例文]) 抽出条件 True SQLでは、 SELECT TEST.* FROM TEXT WHERE MyLikeCompare([文字列],[例文]) = True;

関連するQ&A