• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessでの禁止文字チェック)

Accessでの禁止文字チェック方法とは?

30246kikuの回答

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#2です。 > Dim rs As New ADODB.Recordset 行で > で「ユーザ定義型は定義されていません」が出てしまい、 VBE のメニュー「ツール」→「参照設定」で、 Microsoft ActiveX Data Objects X.Y Library を追加してみてください。 X.Y は、2.5 とか 2.8 とか。 2007 をメインで使ってますが、2000 形式にしたりするので、私は 2.5 を参照してますけど。 なお、DAO でする場合は以下のような感じに Public Function DicMake() As Boolean   Dim rs As DAO.Recordset   If (dic Is Nothing) Then Set dic = CreateObject("Scripting.Dictionary")   dic.RemoveAll   Set rs = CurrentDb.OpenRecordset(sTable)   While (Not rs.EOF)     dic.Item(rs(sField).Value) = Null     rs.MoveNext   Wend   rs.Close   Set rs = Nothing   DicMake = True End Function 仕様がもう少し固まっていれば・・・記述も変わってきます。 #2では、 「名称」内に許可文字が複数回出現しても、それは許可しています。 (「名称」が "アイアイ" であっても許可) また、「文字」が1文字長でなくても処理できるように冗長にしています。が、 許可の「文字」が、"アイ" "ア" であった場合、処理順を考える必要があります。 "アイアイ" を "アイ" "ア" の順で処理すると、全て削除され表示対象になりませんが、 "ア" "アイ" の順で処理すると、"イイ" が残ります。 許可の「文字」が、"イイ" "ア" であった場合、処理順を考える必要があります。 "アイアイ" を "ア" "イイ" の順で処理すると、全て削除され表示対象になりませんが、 "イイ" "ア" の順で処理すると、"イイ" が残ります。 レコードセットを得る時等で、順を考える必要があります。 テーブル名を指定する際に、SQL記述にして順を指定・・・とか 例えば、クエリで見た時の記述(文字列長が長い順で、昇順) SELECT * FROM 許可文字一覧 ORDER BY Len(文字) DESC, 文字; を指定するとか・・・ また、出現頻度が高い順に得られていると、少ないループで処理できると思います。 「文字」は1文字長しかない場合、以下の様な記述でも良いのかも・・・ (クエリに変更はありません) Public Function DicCheck(vSrc As Variant) As Boolean   Dim sS As String   Dim i As Long   DicCheck = True   If (dic Is Nothing) Then Exit Function   If (dic.Count = 0) Then Exit Function   sS = vSrc & ""   For i = 1 To Len(sS)     If (Not dic.Exists(Mid(sS, i, 1))) Then Exit Function   Next   DicCheck = False End Function > キャッシュに展開せずに、DicCheck だけを実行する形に > 変えようとしていますが、うまく修正できません。 #2での 削除する(Replace を使う)方法で毎回レコードセットを得るものにすると (DAO での例になります) Public Function DicCheck(vSrc As Variant) As Boolean   Dim rs As DAO.Recordset   Dim sS As String   DicCheck = True   sS = vSrc & ""   Set rs = CurrentDb.OpenRecordset("許可文字一覧")   Do While (Not rs.EOF)     sS = Replace(sS, rs("文字"), "")     If (Len(sS) = 0) Then Exit Do     rs.MoveNext   Loop   rs.Close   Set rs = Nothing '  sS = Trim(sS)   If (Len(sS) = 0) Then DicCheck = False End Function の記述だけで、クエリは SELECT * FROM データ一覧 WHERE DicCheck(名称); でいけると思います。 「文字」が1文字長しかなかった場合は、FindFirst で検索し、 NoMatch で判断する等いろいろ考えられると思います。 > 許可文字数が150字程度と少ないので > キャッシュに展開しない方法をご教授いただけないでしょうか。 おそらく、 処理スピードは許可文字の件数ではなく、「名称」の件数に大きく左右されると思います。 (「名称」の件数がどれだけかわかりませんが、1件ごとに OpenRecordset するので・・・) 環境にあった速い方法を見つけられたらと思います。 (Dictionary 展開が速い・・・・ わかりません)

2010greentea
質問者

お礼

お礼が遅くなり申し訳ありません。 ライブラリを追加してキャッシュに展開するロジックを 活用させていただきました。 何度も丁寧な回答をありがとうございました。

関連するQ&A

  • 禁止文字をエクセルかアクセスでチェックする方法について

    あるデータ一覧に、禁止文字が含まれているかをエクセルorアクセスで確認したいのですが、関数やSQLが分かりません。 どなたかお教え頂ければ大変助かります。 【やりたいこと】 「◆データ一覧」に、「◆禁止文字一覧」が含まれているかをデータチェックしたい。 以下の場合だと、「◆データ一覧の1、2レコードめ」がデータ精査結果になればOK。 ------------------------------------------ ◆データ一覧 1レコードめ  あいうAお 2レコードめ  かきくけB 3レコードめ  さしす1C ◆禁止文字一覧 1レコードめ  A 2レコードめ  B 3レコードめ  D ------------------------------------------ どうぞ、よろしくお願いいたします。

  • アクセスのデータ型について

    ルックアップウィザードを利用してテーブルを作成しています。  項目がア、イ、ウの3項目ありそれぞれにルックアップウィザードを利用したのですが、おなじように操作したつもりがア、イのデータ型はテキストになって、ウのデータ型は数値型になりました。  ウのデータ型がテキスト型にならないのは何故なんでしょうか。  オフィスXPを使用しています。

  • ACCESSについて

    エクセルでは、重いので、ACCESSでデータベースを作ろうと初めてやる気になった者です。 ACCESSでこのようなことが出来るのでしょうか?あくまでも例えなので現実味が無いかも知れません。 社員の通勤経路について管理を行うとします。 社員の数は、1000人程度。 Aさんは、A社のAというバス停からHというバス停まで路線バスに乗るとします。 Bさんは、同じくA社のBというバス停からHというバス停まで。Cさんは、同じくA社のCというバス停からJというバス停まで。Dさんは、B社のAからQまで。というように1000人が各々違ったバス通勤経路を利用しているが共通した区間もあるとします。どの区間を誰が利用しているのかを抽出するようなデータベースを作りたいと考えています。バス停の名前は、A,B,Cときれいに並んでいる会社もあればバラバラな会社もあるとします。そのため、バス停A~バス停Bまでの区間を"ア"区間,B~C間を"イ"区間,C~D間を"ウ"区間(以下同様)区間ごとに固有の名称を割り当て、"ウ"という区間を利用している社員のリストがほしいと考えた場合。各自のデータベースとしては、利用する区間の一覧(例えばAさんの場合、ア、イ、ウ、エ、オ、カ、キとすると)を入力しておき"ウ"が含まれる人を検索すればAさん,Bさん、Cさんがヒットするというようなことを行いたいと思います。その場合、Aさん、Bさん、Cさんは、共通でウ、エ、オ、カ、キの区間を通過するので、この経路を共通1ルートと定義して、Aさんのデータ入力を、ア,イ,共通ルート1と入力しておけば、入力の手間が省けて便利だと思います。しかし、検索するときは、あくまでも、"ウ"区間を検索すうるので、どこかで、データを自動的に置き換える必要があるような気がします?どのようにすれば実現できるのでしょうか?どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?宜しくお願い致します。

  • 一太郎13での文字の縦ライン統一について

    一太郎13での文字の縦ライン統一について アンケート設問用紙に 1 ○○について  (1) ○○についてどう思いますか。    ア 良い    イ 普通    ウ 悪い という項目を作りましたが、 「アイウ」より左側の部分を全角スペース3文字分で打っても、    ア 良い    イ 普通     ウ 悪い のようにずれてしまうことがあります。 タブだと3文字以上右にずれてしまいます。 ワードのように同じ幅のスペースとして認識してくれません。 どうすればきれいに揃いますか? また、画像にあるように、文字間の幅はどのようにしたら文書全体で均一になりますか? (均等割り付けをしていない部分の文字間が詰まってしまい、困っています。) ちなみに、データは別の方が作成したものです。 (ワードに変換すると余白等がおかしくなったので、一太郎で作業することにしました。)

  • 保有資格の管理をしているのですが、

    保有資格の管理をしているのですが、 現在あるデータは下記の並びの所有状況一覧と 氏名一覧(200名程度)資格名称一覧(20こ程度)です。 ―所有状況一覧(500行ほどのデータ) A   B   C      氏名 資格名 取得日 あ  ア   2009/1/1 あ  イ   2009/1/2 い  イ   2008/1/3 資格名称がア、イ、ウの3種類とした場合下記のように それぞれが未取得の資格の一覧を抽出したいのですが、 A   B    氏名 資格名   あ  ウ い  ア い  ウ 個人毎に取得している資格数が異なるため1人当たりの行数が統一されていないので 関数の力での照合は無理かと判断したのですが マクロ等で処理することは可能なのでしょうか? マクロについては作業に必要な度に何とかしのいできているだけで 自分がやりたいことができるのかすら分からない状況なのですが、 もしいい方法がありましたら、ご教示宜しくお願いします。

  • エクセル ある文字列が含まれるセルを検索する方法

    初めて問い合わせします。大量のデータを検証しなければいけません。 関数などで方法を教えて頂ければ幸いです。 1セルに対し、1セルを検索する方法はわかっております(countifやifを使って) でも、セル単位ではなく文字列単位での検索方法を知りたいと思います。 わかりづらいかもしれませんが、現状をお知らせします。 シート1「登録データ一覧」(5万件) A列1行目 ア社 A列2行目 イ社 A列3行目 ウ社 A列4行目 エ社 A列5行目 ☆ーア社 A列6行目 ウー☆社 シート2「検索したい社名一覧」(500社) A列1行目 ア社 A列2行目 イ社 A列3行目 ウ社 <出したい結果> (1)検索したい会社が、シート1上で何社登録があるか ア社→【答え:2社】 イ社→【答え:1社】 ウ社→【答え:2社】 (2)登録データ一覧上、検索したい会社が存在するか ア社→【答え:○】 イ社→【答え:○】 ウ社→【答え:○】 エ社→【答え:×】 ☆ーア社→【答え:○】 ウー☆社→【答え:○】 よろしくお願いします。

  • 数学のとき方を教えてください。

    二次関数y=axx+bx+cのグラフは、2点(5,7)、 (0,12)を通り、頂点は直線y=x上にあるという。このとき、係数が整数であるのは a=ア b=イ c=ウ である。 アイウに当てはまるものを求めよ。 という問題ですがとき方を教えてください。 アイウの答えは アは1 イは-6 ウは12です。 ちなみに一番上のy=axx+bx+cのxx(エックス)はエックスの2乗を表しています。 よろしくお願いします。

  • 正規表現で一部の語尾を否定した条件を作りたい

    いつも大変お世話になっております。 PHP環境にて、以下のようなことで困っております。 元の文章($bunshou)の中に半角全角に関わらずカタカナの「アイウ」という文字列があり、 それを「あいう」に変換したい場合、 eregi_replace ("(ア|ア)+(イ|イ)+(ウ|ウ)","あいう", $bunshou); とすると、変更できたのですが、 もし、「アイウエ」、「アイウイア」と、『後ろに"エ"や"イア"が入っているときだけこの変換を行いたくない』時はどのように書けばよいのでしょうか。 つまり、以下のような条件です。 1.アイウ→「あいう」に変換したい 2.アイウお→「あいうお」と表示したい 3.アイウエ→変換したくない 4.アイウイア→変換したくない 上記の1~3までを、または1~4全てを一度に実効したい場合、どのように正規表現で書けばよいか教えて頂けますと大変たすかります。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • Ruby1.9で全角文字を半角文字にうまく変換できません。

    Ruby1.9で全角文字を半角文字にうまく変換できません。 英数字までは以下のロジックでうまく出来たのですが、カナが正しく変換されません。 何か良い知恵をどうかご教示のほどお願いいたします。 ※★→←★の間の文字は半角カナです(ブラウザ上全角カナとなってしまうため、便宜上補足しました)。 moji = "イあ1Aa" moji.tr('a-zA-Z0-9ア-ン', 'a-zA-Z0-9★→ア-ン←★') 結果:★→ウ←★あ1Aa 何故か半角のイではなく半角のウとなってしまう。    ※アの場合のみ正しく半角のアに変換される。

    • ベストアンサー
    • Ruby
  • Accessのクエリ

    下記のようなテーブルがあります フィールド 利用者 利用日 ア支店  イ支店  ウ支店         Aさん  1/1 たまご   りんご  みかん         Bさん  1/3 りんご   トマト   たまご         Cさん  1/3 ねぎ    たまご  いも クエリ等で、各支店のいずれかで「たまご」を購入した利用者を抽出したい場合 どのように設定したらよいでしょうか? もちろん、各支店のいずれでも「たまご」を購入していない利用者は抽出されないように。 クエリで、ア支店の抽出条件に「たまご」と入れ、イ支店とウ支店にor条件(またはの所) を入れるとア支店の条件が優先されてしまいます。 Access勉強中のものです。ご教授お願いします。