• ベストアンサー

[access]フィールドの中の特定の文字の数を出したい。

アクセス(Ver.2000)のテーブルの、一つのフィールド内に 色々な文字が並んでおります。 その中の特定の文字の数を数えたいのですが、クエリで数を出す方法は? 例えば 一行目のフィールドに『abc』 二行目のフィールドに『bcc』 という二つのレコードがあったとします。 上記をクエリで、 『a』→ 1 『b』→ 2 『c』→ 3 というように各文字の数を出したいのですが、 どのような方法で出せるでしょうか? 分かる方ご教授よろしくお願いします。

noname#22533
noname#22533

質問者が選んだベストアンサー

  • ベストアンサー
  • karihone
  • ベストアンサー率100% (1/1)
回答No.3

■テーブルの作成  新たにテーブル「T_検索文字」を作ります。フィールドは「検索文字」の1フィールドのみで 内容は、アルファベット26文字について調べるならば、 検索文字 -------- a b :(中略) y z の26レコードです。 ■選択クエリの作成  次のSQL文をクエリのSQLビューでコピペして実行してみてください。 SELECT 検索文字, Sum(Len([フィールド名])-Len(Replace([フィールド名],[検索文字],""))) AS 数 FROM テーブル名, T_検索文字 GROUP BY 検索文字 HAVING Sum(Len([フィールド名])-Len(Replace([フィールド名],[検索文字],"")))>0;  いかがでしょうか。

noname#22533
質問者

お礼

お返事有難うございます。 さっそく試して見ました。 なんとか数字が出てきました。 式1という構文が勝手に出てきたのですが、これでよいのですね? SELECT "a" AS 式1, Sum(Len([InfoData])-Len(Replace([InfoData],"a",""))) AS 数 FROM Plan_dt, T_検索文字 GROUP BY "a" HAVING (((Sum(Len([InfoData])-Len(Replace([InfoData],"a",""))))>0)); ところで、複数の文字の数を一つのSQL文で出すことは出来るのですか? 「and」で繋いでSQL文を作ってみたのですが、 『SQLステートメントの後に文字が見つかりませんでした』というエラーになりました。 SELECT "a" AS 式1, Sum(Len([InfoData])-Len(Replace([InfoData],"a",""))) AS 数 FROM Plan_dt, T_検索文字 GROUP BY "a" HAVING (((Sum(Len([InfoData])-Len(Replace([InfoData],"a",""))))>0)); and SELECT "b" AS 式2, Sum(Len([InfoData])-Len(Replace([InfoData],"b",""))) AS 数 FROM Plan_dt, T_検索文字 GROUP BY "b" HAVING (((Sum(Len([InfoData])-Len(Replace([InfoData],"b",""))))>0)); 基本的なことが分からなくて申し訳ございません。 ご教授よろしくお願いします。

その他の回答 (3)

  • karihone
  • ベストアンサー率100% (1/1)
回答No.4

No.3の続きです。 SELECT "a" ではなく、 SELECT 検索文字 としてください。ここの 検索文字 というのは、テーブル「T_検索文字」に存在するフィールド名です。

noname#22533
質問者

お礼

出来ました!! SELECTの後ろのテーブルを間違えていたのですね! 本当に助かりました。 有難うございました!

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.2

> 今処理したい一つのフィールドには月単位分の文字列が入っており、 > (例えで出した「a~c」が7月だと31日分(31桁)あります) > 月によって日数(桁数)が変わるわけですから、 > 毎月クエリを修正しなければいけないということになりますね? > かなり辛いところです。 もう少し、詳細な仕様を提示していただければ、具体的なコード(VBA)を 回答することができるかもしれません。 テーブル構成 データ例 など。

noname#22533
質問者

お礼

お返事有難うございました。 VBAも勉強したいのですが、今回はなんとかSQL文で 出来ないものかと検討しております。 何かヒントがありましたらまたご教授ください。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

ベタで処理が遅くてもいいなら、1文字ずつバラしてunionで結合してcount() 多分、こんな感じでよかったと思いますが、未テスト!!! Unionクエリ…全文字をバラして羅列するクエリ…を作る select mid(フィールド,1,1) from テーブル union all select mid(フィールド,2,1) from テーブル union all select mid(フィールド,3,1) …桁数分繰り返す で、このクエリ結果を集計クエリでGroup化してCountをとると、とりあえずクエリだけで出せます。 でも、できるなら、VBAで組んだほうが処理はいいような気がします。

noname#22533
質問者

お礼

さっそくのお返事有難うございました。 ご回答して頂いた内容でいきますと、 今処理したい一つのフィールドには月単位分の文字列が入っており、 (例えで出した「a~c」が7月だと31日分(31桁)あります) 月によって日数(桁数)が変わるわけですから、 毎月クエリを修正しなければいけないということになりますね? かなり辛いところです。 レコードは8000レコードほどのテーブルですので、 処理時間もかなりかかりそうですね。 残念ながらVBAを組むほどのスキルもありませんので、途方に暮れております。 何かいい方法はないものでしょうか…。

関連するQ&A

  • ACCESS2000でExcelから特定フィールドをインポートしたい

    ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、 うまくいきません。 Excelはフィールド数が254フィールドもあり、 テーブルにインポートしたいフィールド数は30フィールドです。 Excelでは特定フィールドをインポートすることができないようなので、 一時テーブルに全てのフィールドをインポート後 必要なフィールドだけ取り出そうとやってみたのですが、 以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と インポートエラーが出てしまいます。 DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls" また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も やってみたのですが、インポート定義作成時に 「フィールド'ID'はインポートまたはエクスポートしようとしている テーブルまたクエリに存在しません」 というエラーが出てしまいます。 どうしたらインポートできるでしょうか。よろしくお願いします。

  • Access テーブルを繋げたり、文字を抜き出したりしたい

    Access2003です。 Aテーブル Bテーブル Cテーブル 名前    ランク   備考 あああ   AAA     ABC いいい   BBB     DEF ううう    CCC     GHI えええ   DDD     JKH ※フィールド数は、各テーブルに1つのみ とあります。 これをクエリで編集したいのですが、行いたいことが2点 1)1文字挿入して繋げる AテーブルとBテーブルを繋げるのですが、間に1文字挿入したいです。 「あああ~AAA」 と、「~」を挿入 2)1文字だけ抜き出す Cテーブルの真ん中の1文字だけ抜き出す 1レコード目だと、「B」だけ抽出 基本的な操作かもしれませんが、出来ません。

  • アクセス メモ型 255文字以上入れられない

    アクセスでテーブルデザインでメモ型にしています。 そのフィールドには何文字でも入力できるようですが、 そのフィールドをフォームのテキストボックスのコントロールソースにすると なぜか255文字以上入力できません。 テーブルは一度クエリにして、フォームのレコードソースとしています。 ダイレクトにテーブルを開いて、そのメモ型のフィールドに情報を入れることは出来ますが フォームからは255文字以上は入力できません。 これを回避する方法をご教授ください。

  • フィールド数の多すぎる・フィールド数が一定でないテーブルのデータ結合の仕方?

    私は、accessについてあまり詳しくないものなのですが、仕事上50近くあるデータを一つにまとめたいんです。 データは2つありまして、 1.それぞれのテーブルが微妙にフィールド数が異なる場合の結合  例)・Aのテーブルのフィールド名     名前 クラス名 出身県 出身コード 血液型 性別        ・Bのテーブルのフィールド名    名前 出身県 血液型 性別    ・Cのテーブルのフィールド名    名前 クラス名 出身コード 血液型    ⇒このように微妙に異なる。しかもレコード数がかなり多いのです。これは、ユニオンクエリは使えないですよね?何かいい方法はないでしょうか? 2.テーブルの構造は同じなのですが、フィールド数が多くてユニオンクエリを使おうとすると、『フィールド数が多すぎる』とエラーメッセージがでてしまう。この場合の対処方法でいいのはないでしょうか? なにぶん、私はaccessをあまり使わないのでわかりにくい質問だと思いますが、どなたかすみませんが教えてください。お願いします。

  • ACCESS 特定テーブル上の特定フィールドの許容サイズ(バイト数)を

    ACCESS 特定テーブル上の特定フィールドの許容サイズ(バイト数)を調べる関数はありますか?

  • ACCESS2003でクエリのフィールド数の確認

    恐れ入ります。 このサイトでも他でも検索してみたのですが、当方の検索の仕方が悪く見当たらないので質問させて頂きます。 タイトルの通りなのですが、テーブルでもクエリでもレコード数は下に表示されるのにフィールドについてそういった機能はないのでしょうか? このクエリにはフィールドがいくつあるのかすぐに分かる様な機能があるのかないのか、またあるのならどのように確認すれば良いのかお教え下さい。 大変作業が非効率で困っています。 宜しくお願い致します。

  • Access2000: 複数のフィールド内の特定文字を含むレコードの検索・抽出をどのように設定方法

    一つのレコード内にField01, Field02, Field03があります。 Access2000を使用しています。 Main Form(MF)に設置したText Box01 とTex Box02に任意のあいまいな文字をエントリーした場合、 (1) その両方(2)そのいずれか、 の文字を含む複数のレコード検索・抽出を行いたいと思います。 事情に応じて(1)或いは(2)の結果をQuery(FormやReportのベース)に表示させる良い方法を 教えて下さい。(QueryやVBA等のコードの書き方等)

  • アクセス フィールド 500個

    アクセスでは、1テーブルでフィールド個数が255までと、制限があるようですが、1レコードに500個のフィールドが必要となりました。2個のテーブルを開いて、500個のフィールドに対して、レコードを単票形式で入力できる様にするには、どうしたらよろしいか?よろしくお願いいたします。

  • Accessのテーブル内のフィールド数

    教えて下さい。 Access2003(2007)では、テーブル内のフィールド数が最大255となっていますが最大フィールド数255以上ある、Accessと同じようなものはあるのでしょうか?(OpenofficeのBase等) 他DBからテーブルをリンクテーブルで貼り付けているのですがフィールド数が255以上あり取り込み先のAccessではフィールド数をすべて表示できない状態です。 よろしくお願いします。

  • アクセス  右から6文字削除したい

    テーブル1の件名フィールドが 「あいうえおかきくけこ」 というのが数レコードある場合、 クエリ1で 「あいうえ」 だけ表示させるようにするにはどうすればいいですか? 件名フィールドの文字数に規則はありません。 10文字だったり20文字だったり。 test: Right([テーブル1]![件名],6) だと、 「おかきくけこ」 となり、本当は表示させたい「あいうえ」が非表示になってしまいます。 なんだか訳がわからなくなってきましたが、 「右から6文字非表示にして、残りの文字は表示させたい」 です。 ご教授よろしくお願い致します。

専門家に質問してみよう