アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的な質問で申し訳ございません。

Accessクエリで1レコード内における特定の文字列(アルファベット(半角/全角)とギリシャ文字(半角/全角))の個数を抽出するための抽出条件は、どうしたらよろしいのでしょうか?

(例1)
<抽出結果>
|  F1   |  F2  |  F1の個数  |  F2の個数  |
  あ12あ    い999       2           3
   う8αう    7Ωえ       2           2

また、この時「F1の個数」と「F2の個数」が一致しない場合の条件付けを行う場合の
抽出条件も教えていただきたく。

(例2)
<抽出結果※(例1)の抽出結果の場合>
|  F1   |  F2  |  F1の個数  |  F2の個数  |  個数判定  |  
  あ12あ    い999       2           3       個数不一致


お手数おかけいたしますが、どうかよろしくお願いいたします。

A 回答 (3件)

すみません、不都合が二つほど


標準モジュールは

Function countStr(s As Variant) As Long
  Dim i As Long
  For i = 1 To Nz(Len(s),0)
    If Mid(s, i, 1) Like "[A-z,A-zΑ-ω]" Then
      countStr = countStr + 1
    End If
  Next
End Function

に変更してください。
F1 と F2 のどちらかが Null だった場合のことを考慮。
また、クエリは
判定:iif(countStr([F1]) = countStr([F2]) ,"一致","不一致")
にしてください(前回F1どうしを比較してましたorz)
これで抽出条件に、"不一致"で出来るハズです。

以下は独り言です。
ギリシャ語のホームページからAccessのフィールドにコピペすると
ほとんどの文字が全角文字に変換されてしまいます。
しかし、中には半角文字のままのが少々。
なあぜぇ??
少々の半角文字になってしまう文字については nora1962 さんの回答で
SELECT regexp_count( 項目, "[a-zA-Za-zA-Zα-ωΑ-Ω△□]") FROM テーブル
△□は、その文字を順次一文字づつ追加したイメージです。
にすれば出来ました。
F1の個数:regexp_count([F1],"[a-zA-Za-zA-Zα-ωΑ-Ω△□]")
F2も同様に
判定:iif(regexp_count([F1],"[a-zA-Za-zA-Zα-ωΑ-Ω△□]") = regexp_count([F2],"[a-zA-Za-zA-Zα-ωΑ-Ω△□])","一致","不一致")

私は文字について根本的な事がわかっていないので危ない雰囲気 (^^ゞ
私の回答ではpattern をコード中に埋め込んでしまっているので出来ません。
(VBEではShift-JIS?ですのでコピペした時点で半角ギリシャ文字が『?』になります)
また前回回答でキャラクタコード云々の事をエラソーに言ってますが、これも忘れてください。
さっぱり判らなくなりました。
    • good
    • 0
この回答へのお礼

ありがとうございます。

ほとんどのことができるようになりました。

半角ギリシャ文字の件ですが、いろいろ勉強になりました。

重ねてお礼申し上げます。

お礼日時:2012/09/14 12:10

自前でFUNCTION作るしかないでしょう


Function regexp_count(source, pattern)
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.pattern = pattern
re.Global = True
Dim matches As Object
Set matches = re.Execute(source)
regexp_count = matches.Count

Set matches = Nothing
Set re = Nothing
End Function

SELECT regexp_count( 項目, "[a-zA-Za-zA-Zα-ωΑ-Ω]") FROM テーブル

で個数が得られると思います。

この回答への補足

回答ありがとうございます。

初歩的な質問で申し訳ありませんが

「SELECT regexp_count( 項目, "[a-zA-Za-zA-Zα-ωΑ-Ω]") FROM テーブル」

はどこで使用するのでしょうか?

クエリのフィールドに使用すると「サブクエリの指定が正しくありません」と表示されてしまいます。

どうぞよろしくお願いいたします。

補足日時:2012/09/14 10:36
    • good
    • 0

標準モジュールに下記のようなのを作成し


クエリでは、
F1の個数:countstr(F1) |F2の個数:countstr(F2) | 判定:iif([F1の個数] = [F1の個数] ,"一致","不一致")
とすれば出来そうですが
半角のギリシア文字の出し方が分かりませぬ。。。(以下のコードは半角ギリシア文字未対応です)
Ω ←文字化けしているかも(「Ω」の細くなっているもの)とかですよねぇ?
↑文字化けはしなくても全角文字のΩになってしまうかも。。

Function countStr(s As String) As Long
  Dim i As Long
  For i = 1 To Len(s)
    If Mid(s, i, 1) Like "[A-z,A-zΑ-ω]" Then
      countStr = countStr + 1
    End If
  Next
End Function

ここを
If Mid(s, i, 1) Like "[A-z,A-zΑ-ω○-△]" Then
にして、○の部分には半角ギリシア文字の先頭の大文字のキャラクタコード
△の部分に半角ギリシア文字の最後の小文字のキャラクタコード
を指定してあげれば出来るかも知れません。

この回答への補足

ご回答いただきありがとうございます。

また、ギリシャ文字の件、了解です。でも結構引っかかってるっぽいです。

一つ質問なんですが、

クエリの中の「 判定:iif([F1の個数] = [F1の個数] ,"一致","不一致")」の
抽出条件で「不一致」のものを抽出させたいのですが、
抽出条件を"不一致"とすると、パラメータの設定が出てきてしまいます。

何か良い方法はございませんでしょうか?

補足日時:2012/09/13 22:04
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す