Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル既存列から文字を抽出し新しい列に入力する方法
記事No171703
投稿日: 2016/12/28(Wed) 15:41
投稿者かりん
OS:Windows10
Access Version:Office2010

はじめまして。超初心者です。
お力いただければ幸いです。

以下のようにA列にある特定の文字だけ抽出し、B列を新たに作ってA列で抽出した文字のみを入れたいです。
ただA列の文字の後ろに空白などが潜んでおり、悪さをします。

最終的には、B列を最終的合計したいです。例えばABは2、CDは1



   A列         B列

あいういお AB       AB  
かきくけこ CD       CD 
さしすせそ EF       EF 
GH たちつてと       GH
AB なにぬねの       AB

何卒お願いいたします。

タイトルRe: 既存列から文字を抽出し新しい列に入力する方法
記事No171704
投稿日: 2016/12/29(Thu) 00:03
投稿者mayu
こんばんは。

> ある特定の文字だけ抽出

回答の前に、ルール・仕様を明確にしたほうがいいですね。
以下の3点、お答え願えますか。

【 1 】
---------------------------------------------------
{ 特定 }の意味するところは
部分一致なのか
パターンマッチ( ワイルドカードや正規表現 )か
どちらでしょうか。
---------------------------------------------------
ご提示いただいた
  AB
  CD
  EF
  GH
のうち、
いずれかが A列の文字列中に含まれていればいい
ということでしたら 部分一致 になりますし、

< 大文字アルファベットが2つ連続している >
という意味でしたら
パターンマッチ になります。


【 2 】
---------------------------------------------------
抽出対象である< 特定の文字 >は
どういった方法で指定するのでしょうか。
---------------------------------------------------
別テーブルに格納しているのか。
或いは
パラメータ形式( 手入力 )で 都度、指定するのか。


【 3 】
---------------------------------------------------
A列のデータに< 特定の文字 >が
< 複数回登場する >ことが ありえるのでしょうか。
あった場合、その扱いは決まっていますか。
---------------------------------------------------
例えば

XY  あいういお AB
なんたら CD GH かんたら

なんていうデータの場合、
どう処理をしたらいいのでしょうか。


なお、
> 最終的には、B列を最終的合計したいです。例えばABは2、CDは1
は、後回しにしましょう。
抽出が出来れば、簡単な集計クエリで表現が可能です。

タイトルRe^2: 既存列から文字を抽出し新しい列に入力する方法
記事No171705
投稿日: 2016/12/29(Thu) 14:41
投稿者かりん
こんにちは。

mayuさん、ご回答ありがとうございます。

わかりにくい質問で申し訳ございません。

以下ご確認ください。


> こんばんは。
>
> > ある特定の文字だけ抽出
>
> 回答の前に、ルール・仕様を明確にしたほうがいいですね。
> 以下の3点、お答え願えますか。
>
> 【 1 】
> ---------------------------------------------------
> { 特定 }の意味するところは
> 部分一致なのか
> パターンマッチ( ワイルドカードや正規表現 )か
> どちらでしょうか。
> ---------------------------------------------------
> ご提示いただいた
>   AB
>   CD
>   EF
>   GH
> のうち、
> いずれかが A列の文字列中に含まれていればいい
> ということでしたら 部分一致 になりますし、
>
> < 大文字アルファベットが2つ連続している >
> という意味でしたら
> パターンマッチ になります。


<大文字アルファベットが2つ連続している>
という意味なので
パターンマッチ でよろしいのでしょうか。

データ内にABが入った行が何行、CDが入った行が何行といった結果を出したいです。


> 【 2 】
> ---------------------------------------------------
> 抽出対象である< 特定の文字 >は
> どういった方法で指定するのでしょうか。
> ---------------------------------------------------
> 別テーブルに格納しているのか。
> 或いは
> パラメータ形式( 手入力 )で 都度、指定するのか。


インポートした別テーブルにあります。


> 【 3 】
> ---------------------------------------------------
> A列のデータに< 特定の文字 >が
> < 複数回登場する >ことが ありえるのでしょうか。
> あった場合、その扱いは決まっていますか。
> ---------------------------------------------------
> 例えば
>
> XY あいういお AB
> なんたら CD GH かんたら
>
> なんていうデータの場合、
> どう処理をしたらいいのでしょうか。


複数回はありませんでした。

ただ、よくよく見てみたら、 「あいうえお AB」 と 「あい AB うえお」がありました。
また、「あいうえお」のみもありまして、大文字アルファベット2文字が入っていない行は「AB」としてカウント
したいです。

>
> なお、
> > 最終的には、B列を最終的合計したいです。例えばABは2、CDは1
> は、後回しにしましょう。
> 抽出が出来れば、簡単な集計クエリで表現が可能です。

ありがとうございます。

わかりづらい点も多いと思います。申し訳ございません。よろしくお願いいたします。はじめに投稿させていただいた時より、データが複雑でしたが、もしACCESSにて対応可能でしたらお力いただければ幸いです。

タイトルRe^3: 既存列から文字を抽出し新しい列に入力する方法
記事No171707
投稿日: 2016/12/29(Thu) 19:11
投稿者mayu
なるほど。よくわかりました。

> <大文字アルファベットが2つ連続している>
> という意味なので
> パターンマッチ でよろしいのでしょうか。

No:171703 ではその可能性が高いと思っていましたけど
合致対象である< 特定の文字 >が

> インポートした別テーブルにあります。

ということですから、
< 大文字アルファベットが2つ連続していた >
のは
別テーブルに格納されていた文字列の長さが2であった
ということになりますね。

よって、部分一致の抽出で良さそうです。


以下に サンプルを載せておきますので
もし、SQL の記述場所をご存知ないようでしたら
http://accessvba.blog.so-net.ne.jp/2013-11-11
あたりをご覧下さい。


▼ DDL-SQL

CREATE TABLE T_参照
(
      rid        COUNTER NOT NULL PRIMARY KEY
    , 特定の文字 VARCHAR( 50 ) NOT NULL
) ;


■ < T_参照 >データ例

 rid  特定の文字
---------------------
 1    AB
 2    CD
 3    EF
 4    GH


▼ DDL-SQL

CREATE TABLE T_入力
(
      cid   COUNTER NOT NULL PRIMARY KEY
    , A列   VARCHAR( 255 )
) ;


■ < T_入力 >データ例

 cid     A列
-----------------------------------
 1   あいうえお AB
 2   かきくけこ CD
 3   さしすせそ EF
 4   GH たちつてと
 5   AB なにぬねの
 6   あい AB うえお
 7   くろやなぎ TE TSU KO
 8   わたしは だれ
 9   おいで ef やす
 10   EXILE CD かりた


■ DML-SQL
( T_参照テーブルから合致する値を選択 )
------------------------------------------------

SELECT x.cid
     , x.A列
     , y.特定の文字 As B列
FROM T_入力 x
   , T_参照 y
WHERE InStr( 1, x.A列, y.特定の文字, 0 ) > 0 ;

------------------------------------------------


■ 結果

 cid     A列        B列
-----------------------------------------
 1   あいうえお AB     AB
 2   かきくけこ CD     CD
 3   さしすせそ EF     EF
 4   GH たちつてと     GH
 5   AB なにぬねの     AB
 6   あい AB うえお    AB
 10   EXILE CD かりた    CD


ここまでできたら、あとは
< T_参照 >に合致する値がなかった
< T_入力 >テーブルの cid 7, 8, 9 のレコードを
{ AB }としてカウントすれば、ご希望の結果になります。

最終的な SQL は
----------------------------------------------------

SELECT Nz( t2.特定の文字, 'AB' ) As 種別
     , Count(1) As 件数
FROM T_入力 t1
LEFT JOIN
(
    SELECT x.cid
         , y.特定の文字
    FROM T_入力 x
       , T_参照 y
    WHERE InStr( 1, x.A列, y.特定の文字, 0 ) > 0
) t2
ON t1.cid = t2.cid
GROUP BY Nz( t2.特定の文字, 'AB' ) ;

----------------------------------------------------


■ 結果

 種別  件数
--------------
 AB   6
 CD   2
 EF   1
 GH   1


 では ☆

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る