Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Microsoft 365)
抽出方法
投稿日時: 25/04/03 15:30:49
投稿者: 水の味

数字、数字+()、数字+ABC等が混在しているフィールドで
数字のみのデータを抽出する方法を教示願います。
 

25232-96302
08332-1107
25232-96302(ザイ)   ←
08332-1107(ザイ)   ←
133AL21232FA    ←
1126682F7      ←
416129-10080
01859877-7560
35059877-6180
69859877-1751(試作) ←
52859877-7560
21859877-1420C   ←
21859877-1420
 
 上記←列以外の数字のみの抽出(ハイフンは含まれてもOK)です
 よろしくお願いします。
 

回答
投稿日時: 25/04/03 17:55:26
投稿者: Suzu

ハイフンの文字コード次第ですが、
半角ハイフン - (&H2D) で良いなら 数式の「マイナス記号」と認識させる事ができます。
 
ですので、Eval 関数 にて、
【数値】【マイナス記号】【数値】 の計算結果、【数値】と認識させる事ができるでしょうから
あとは、IsNumeric 関数を使えば良いでしょう。
 
Eval 関数
https://support.microsoft.com/ja-jp/topic/eval-%E9%96%A2%E6%95%B0-8c4a1b10-85ba-40db-b0c8-5290da4d4166
 
IsNumeric 関数
https://support.microsoft.com/ja-jp/topic/isnumeric-%E9%96%A2%E6%95%B0-67795d2f-e53e-47a3-b107-c39df0ae2559

回答
投稿日時: 25/04/04 07:51:18
投稿者: sk

引用:
数字のみの抽出(ハイフンは含まれてもOK)

( SQL ビュー)
-------------------------------------------------------------------
SELECT [テーブル名].*
FROM [テーブル名]
WHERE (Replace(Nz([テーブル名].[フィールド名],""),"-","")<>"") 
  AND (Not Replace(Nz([テーブル名].[フィールド名],""),"-","") Like "*[!0-9]*");
-------------------------------------------------------------------
 
以上のような選択クエリを作成できればよい、ということでしょうか。

回答
投稿日時: 25/04/04 09:37:55
投稿者: hatena
投稿者のウェブサイトに移動

下記でもいいかな。
 

SELECT テーブル名.*
FROM テーブル名
WHERE テーブル名.フィールド名 Not Like "*[!-0-9]*";

 
Suzuさんのもいいアイデアだと思いますが、EVal関数は、関数とか指数表記も受け付けますので注意が必要です。
 

IsNumeric(Eval("Int(1)"))
IsNumeric(Eval("1234E5"))

投稿日時: 25/04/04 11:13:09
投稿者: 水の味

skさん回答ありがとうございました。
654件のデータが190件に整理され助かりました。
 
2パターン出来ましたがデザインビューでは同じ表記でした。
結果も同じです。
 
SELECT [セイヒンマスター2].*
FROM セイヒンマスター2
WHERE (Replace(Nz([セイヒンマスター2].[品番],""),"-","")<>"")
AND (Not Replace(Nz([セイヒンマスター2].[品番],""),"-","")Like"*[!0-9]*");
 
SELECT [セイヒンマスター20240901].*
FROM セイヒンマスター20240901
WHERE (((Replace(Nz([セイヒンマスター20240901].[品番],""),"-",""))<>"" And (Replace(Nz([セイヒンマスター20240901].[品番],""),"-","")) Not Like "*[!0-9]*"));
 
 
suzuさん回答ありがとうございました
関数のハードルが少し高く私にとっては上手くいかなかったので
この場はギブアップとさせていただきました。
 
この度はありがとうございました。