クエリーやレホートでテキスト型フィールドに対してグルーピングなどを行う際に英数の大文字・小文字とかな文字のカタカナ・ひらがなを区別して扱いたいのですが、アクセスでは区別できないのでしょうか?オプションやプロパティなどを見ても見つかりません。

設定で区別ができないようなら、区分用のフィールドをつくって区別をしたいと考えています。その際、その区分を自動的に入力したいのです。

たとえば、Aフィールド(テキスト型)のデータを自動的に検査して(大文字・小文字やカタカナ・ひらがなに区別したい)、Bフィールドに自動的にそれを入力する方法などはありますでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

フィールド内の文字列が英数大文字・小文字・ひらがな・カタカナのいずれかに統一されているのであれば、yoishoさんや-boya-が回答されているようにAsc関数を使用して、


最初の文字で判断できるのではないでしょうか。
クエリーのフィールドに
分類:IIF(Asc(フィールド名)>64 and Asc(フィールド名)<96,1,IIF(Asc・・・・)))
としてコードを分類してしまえば、Group by 分類
句で区別できるのはないでしょうか。
もし、全ての文字列をチェックして分類する必要があるのでしたら、小文字・大文字が混在している場合の条件をFunctionで作成して、上記と同様に
分類:Function名を記載すれば、分類フィールドで区分できると思います。
また、Functionを使用して、入力をフォームで行うのであれば、更新後のイベントで入力できますし、SQLで更新もできると思います。

ひょとしてはずしてますか?
    • good
    • 0

残念ながら、クエリー上では区別はできないようです。



データの抽出条件として区別するなら、WHERE句の記述で、StrComp関数や InStr関数を引数 compare に 0 を指定して使えば、バイナリでの比較ができると思いますが (たとえば WHERE StrComp(フィールド名, "抽出条件", 0) = 0 のように記述、詳しくはHELPで調べてみてください)、グループ化はちょっと厳しいですね。

先頭文字だけで区別するなら、グループ化するフィールドに、-boya-さんが示していらっしゃる Asc関数を使う方法も有効かと思います (Left関数をはさむ必要はなさそうですが)。(たとえば GROUP BY (Asc(フィールド名) のように)

ということで、区分用のフィールドをつくる件ですが、
たとえばAフィールドの更新前処理のイベントで、やはり Asc関数を使って文字コードから文字の種別を判断して、Bフィールドに区分を入れるのが、一つの方法として考えられますが・・・。

蛇足として、ご存知かと思いますが、VBAモジュールでの比較なら、Option Compare ステートメントで宣言してやれば、バイナリーでの区別が可能です。
    • good
    • 0

VBAなら「Asc関数」を使えば区別できるのでは無いでしょうか?



kyukieeさんの求める機能がどう言うものかよく分かりませんでしたが、
leftで左側の一文字を持ってきてAscで返ってきた値を
参照すれば、、、
使い方はヘルプなどを参照してください。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessフィールド名でひらがな、カタカナの区別

Accessのクエリは、フィールド名のひらがな、カタカナを区別しないのでしょうか?

こんなことがありました。
VBAのプログラム(クエリ)側ではフィールド名[ひらがな]を指定している箇所で、実際のフィールド名は[ヒラガナ]であり、異なっていることに気づきました。
しかしエラーを出力せずに動作していました。テーブルを見ると、希望通りにデータは格納されていました。

問題個所のクエリと対象のフィールド名は統一する予定ですが、
この動作がMicrosoftの仕様なのか、たまたま動作しているのか、そんなことは無いのか、
ちょっと気になったので質問させて頂きました。

宜しくお願い致します。

Aベストアンサー

http://support.microsoft.com/kb/404985/ja
http://65.54.166.122/kb/883013/ja?spid=1266&sid=1270

Accessの仕様なのでしょう。

テーブルのフィールド名をヒラガナとし、
コードから

rs!ひラがナ

でもテーブルのフィールドを呼び出しますし、
ついでに、プロシージャ名を

funcああ

で登録して、

funcアア

でも呼び出せてしまいます。

たとえば、
テーブル1のフィールド名を、名前、ヒラガナ
として、

Sub funcああ()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb

Set rs = db.OpenRecordset("テーブル1")
Do Until rs.EOF
Debug.Print rs!名前
Debug.Print rs!ひラがナ
rs.MoveNext
Loop
End Sub

として、イミディエイトウィンドウで、

funcアア

として実行してもデータを表示します。

http://support.microsoft.com/kb/404985/ja
http://65.54.166.122/kb/883013/ja?spid=1266&sid=1270

Accessの仕様なのでしょう。

テーブルのフィールド名をヒラガナとし、
コードから

rs!ひラがナ

でもテーブルのフィールドを呼び出しますし、
ついでに、プロシージャ名を

funcああ

で登録して、

funcアア

でも呼び出せてしまいます。

たとえば、
テーブル1のフィールド名を、名前、ヒラガナ
として、

Sub funcああ()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb

Set rs = db.OpenRec...続きを読む

Qアクセス レポート テキストボックスの文字配置は文字数で自動的に文字配置の変更可能ですか

現在アクセスに入力されているテーブルのデーターをもとに書道展のキャプションを作成中です
タイトルと作家の名前を表示させますがタイトルが1文字数から13文字数くらいまでと様々なため
テキストボックスの文字配置が均等割り付けだと文字数の多いタイトルは2段目が間延びしておかしいです
例えば8文字までだと均等割り付けそれ以上だと左揃えなどということが可能でしょうか?
他に良い方法があれば教えてくださいよろしくお願いします
Wordの差し込み文章のように一枚ごとの編集が出来ればいうことなしなのですが?それはあり得ませんか?

Aベストアンサー

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テキストボックス名.TextAlign = 1 '左揃え
  End If
End Sub

のようになります。


> ユーザー定義関数名、「イベントプロシージャ」以外の式が指定されていますとなりました。

加えた変更を元に戻してもエラーになりますか?

とりあえず、コンパイルしてエラーが無いことを確認してください。

経験上、Access のバージョンにもよりますが、
デザインビュー以外で表示しているときに VBA の修正をしたりすると
このエラーが出ることが多いような気がしています。

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テ...続きを読む

Qエクセルとアクセスでローマ数字の大文字・小文字の区別ができない。

 よろしくお願いいたします。
 ExcelあるいはAccessにおいて,ローマ数字の大文字と小文字を区別したいと考えていますがうまくいきません。

 例えば,エクセルにおいて A1セルに「ⅰ」が入力してあって 

 =IF(A1="I","壱",IF(A1="ⅰ","一"))

という式をA2セルに入れると,「壱」という戻り値になります。アクセスでも構文が違うだけの同意の関数を使用しても同様の結果になります。つまり,大文字と小文字を区別していないということになると思います。原因と回避する方法を教えていただけたら幸いです。

Aベストアンサー

こんにちは。

Access のクエリでは以下のようになるかと思います。

IIf(StrComp([field1],"I",0)=0,"壱",IIf(StrComp([field1],"i",0)=0,"一"))

他には、文字コードで行ったり、StrConv などで比較する方法もあると思います。

Qアクセス 重複の削除と残すパターン フィールド1 顧客ナンバー〔ユニーク) フィールド2 受付区分

アクセス 重複の削除と残すパターン

フィールド1 顧客ナンバー〔ユニーク)
フィールド2 受付区分
受付は0、キャンセルは1とレコードあり

顧客ナンバー、受付区分にてグループ化すると、

0パターン 受付
01パターン 受付とキャンセル
010パターン 受付とキャンセル、再び受付
0101パターン 受付とキャンセル、再び受付とキャンセル
この4パターンになり、行数は上から1、2、3、4行
となります。

ここから教えて下さい。
01パターンと0101パターンを無かった事にし0パターンと010パターンは1だけを残したいのですが、集計オプションを使い、条件をどのように書けばよろしいでしょうか?

受付区分にて合計を出したりカウントしたりしたのですが、うまくいきません。0を10、1を11や文字に置き換える事は出来ます。

Aベストアンサー

受付、キャンセルするたびにレコードを発生させていて、再受けを区別しなくていいなら、、、
受付を1、キャンセルを-1にして合計取ればいいんじゃね? まあ、今のままの値でも

-2*([受付区分]-0.5)

で、変換できるような気もするけど。

Q大文字で書かれている英文を小文字に変換したい。

ネットから入手した歌詞カードが全文,大文字で書かれています。これをワードに添付して編集したいのですが,その手始めに,全文を小文字にしたいと思うのですが,どうしたらいいのでしょうか?
小文字を全部,大文字にするのは「フォント」「すべてを大文字」でできたのですが,逆はできないのでしょうか?

Aベストアンサー

wordでいいのですよね
「書式」「文字種変換」「すべて小文字にする」で出来ます。


人気Q&Aランキング

おすすめ情報