• ベストアンサー

Access_2002 Replace方法

Accessにてシステムを構築しておりますが、テーブルのデータのReplaceについて悩んでおります。 TableA 〔NO〕 〔型番〕 01   多分ABC 02   DEFGとのこと 03   HIだそうです 04   JKL 05   MNO・ この様なTableAの型番から余分な文字を削除する処理を行いたく、現在は更新クエリにてReplace関数を使用し 行っています。 Replace(Replace(Replace(Replace([型番],"多分",""),"とのこと",""),"だそうです゜",""),"・","") ↓ TableA 〔NO〕 〔型番〕 01   ABC 02   DEFG 03   HI 04   JKL 05   MNO この「余分な文字」は現在100以上あり、今後もどんどん増えていきます。 クエリでのReplaceは見にくくメンテナンスもしづらいです。 「余分な文字」をまとめたテーブルでも作成しそれを使ってうまい事出来ないか考えていますが アイデアが浮かびません(;_;)。 皆様のお知恵をお貸しくださいませm(_ _)m

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> 「余分な文字」をまとめたテーブルでも作成しそれを使ってうまい事出来ないか そのテーブルを作れば、クエリで一発で対応できます。 (こちらの環境で動作確認済み:WinXP Home&Excel2003) 【テーブル】 「TableA」テーブル:  フィールド = No(テキスト型・主キー), 型番(テキスト型) 「削除リスト」テーブル:  フィールド = 削除文字(テキスト型・主キー) 【クエリ】 SQL文:  UPDATE TableA, 削除リスト SET TableA.型番 = Replace([型番],[削除文字],""); 添付画像は、左から   更新クエリ適用前のテーブルのデータ(予め複製)   更新クエリ適用後のテーブルのデータ   上記SQL文をクエリのデザインビューで表示したもの です。 『削除リスト』に登録された文字パターンを複数持っている場合も含めて、問題なく 削除されることを確認しました(→No=06)。 ※2つのテーブル間にフィールドの結合がない選択クエリを作成すると、そのレコードは   双方のテーブル件数の乗算となります(一方のテーブルが5件、他方が6件なら、   選択クエリは5*6=30件を表示)。   これと同じで、上記クエリを実行すると、「○○件のレコードが更新されます」の   確認メッセージでは、テーブルの実レコード数より大きくなりますのでご注意下さい。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

実行頻度は多くなさそう&クエリでなくてもよさそう ということでVBAにて (標準モジュールに記述します) tableB の削除文字フィールドに削除する文字列が格納されているとします。 tableB の例 削除文字 多分 とのこと だそうです ・ 型番、削除文字は NULL データがないとした上での記述例:ADO使用) Public Function myRep()   Dim rsA As New ADODB.Recordset   Dim rsB As New ADODB.Recordset   Dim sTmp As String   rsA.Open "tableA", CurrentProject.Connection, adOpenForwardOnly, adLockPessimistic   rsB.Open "tableB", CurrentProject.Connection, adOpenKeyset, adLockReadOnly   If (Not rsB.EOF) Then     While (Not rsA.EOF)       sTmp = rsA("型番")       rsB.MoveFirst       While (Not rsB.EOF)         sTmp = Replace(sTmp, rsB("削除文字"), "")         rsB.MoveNext       Wend       rsA("型番") = sTmp       rsA.Update       rsA.MoveNext     Wend   End If   rsA.Close   rsB.Close End Function 削除文字を登録するのは面倒だと思います。 アルファベット A ~ Z だけを残すのであれば、以下例 Public Function myRep2(sQ As Variant) As String   Dim sRet As String   Dim sTmp As String   Dim i As Long      sRet = ""   If (Not IsNull(sQ)) Then     For i = 1 To Len(sQ)       sTmp = Mid(sQ, i, 1)       If (sTmp Like "[A-Z]") Then sRet = sRet & sTmp     Next   End If   myRep2 = sRet End Function 呼び方例 Private Sub Sample1()   MsgBox myRep2("AB漢字CDEありFG-22a2bc") End Sub の結果は、"ABCDEFGabc" となります。 更新クエリで使う時には UPDATE tableA SET tableA.型番 = myRep2([型番]); とか、

picopico_7
質問者

お礼

質問に目をとめてくださり感謝いたします。 大変参考になりました。 ご丁寧にコーディングしてくださり本当にありがとうございました。

関連するQ&A

  • Access_フィールドの文字列に日本語があるかを識別

    下記のようなテーブルがあります。 ↓ 例:テーブルA 〔No〕 〔型番〕 01   ABC候 02   おそらく DEF 03   GHI迄 04   JKL以上 05   MNO 〔型番〕フィールドには純粋に英字のみの型番を入力していきたいの ですが諸事情により不規則な日本語やスペース等が含まれてくることが あります。 本来必要とするテーブル ↓ 〔No〕 〔型番〕 01   ABC 02   DEF 03   GHI 04   JKL 05   MNO 〔型番〕に日本語が含まれているフィールドを抽出できるよう クエリで処理できないか思案していますが良いアイデアが浮かびません。 皆様のお知恵をお貸し頂きたくよろしくお願いいたします。

  • str_replaceで文字化け

    お世話になります。 PHPでstr_replaceを使用しましたら、 「ー」や「・」などの文字が、文字化けを してしまいました。 いろいろ調べたのですが、よく分からずに 困っています。 PHPで文字の置換を行いながら、文字化けを しない方法はどのようにしたらよいのでしょうか。 $abc = str_replace(" ", "", $abc); のあとに$abcを出力しましたら、文字化けをして しまいました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Accessで、別のテーブルにある同じフィールドを結合する(至急)

    いつも大変お世話になっております。m(_ _)m 分かりましたら、至急お願いしたいのですが Accessで、別々のテーブル(またはクエリ)に同じ「型番」「数量」というフィールドがあって、それぞれ別々の情報が入っています。 それを、1つに結合することは可能ですか? 例) テーブルA: 型番/数量 ABC/5 DEF/3 テーブルB: GHI/2 JKL/3 この2つのテーブル(A・B)を1つのフィールドに表示したい。 型番/数量 ABC/5 DEF/3 GHI/2 JKL/3 というように。。。 Accessの基本にのっとっていないのかもしれませんが、何とかできたらと思います。できるだけ簡単な方法で・・・ どうぞよろしくお願いします。

  • AccessでReplace関数を使うときに…

    Access2003を使っています。 1つのフィールドに入っている文字列が何種類かあります。 ここでは10種類あるとします。 それぞれ、 在庫あり/在庫わずか/お取り寄せ/商品なし/販売終了/品切れ中4月21日入荷/品切れ中5月14日入荷/品切れ中6月1日入荷/品切れ中7月31日入荷/品切れ中8月31日入荷/ これを、在庫あり/在庫わずか/お取り寄せ は「0」に、それ以外は「1」にしたいのです。 いろいろ調べた結果、Replace関数というものを知り、使ってみたのですが、 Replace(Replace(Replace(Replace(Replace(Replace([在庫],"在庫あり","0"),"在庫わずか","0"),"お取り寄せ","0"),"商品なし","1"),"販売終了","1"),"品切れ中*","1") としても、最後の「"品切れ中*"」がうまく働きませんでした。どうやら「*」は使えないようです。 ただ、10種類ならまだ10回カッコを書いていくだけでいいですが、品切れ中の日付が100日分などとなるとそうも行きません。ですので何かいい方法をお持ちの方、おしえていただけませんでしょうか?よろしくお願いいたします。 (特にReplace関数にこだわっているわけではありません。ただ、あまりAccessには詳しくないので、クエリのデザインビューで紐付ける程度のことしかやっておりません。お手数をお掛けしますがよろしくお願いいたします。)

  • 加工バッチ

    加工バッチの件で質問させて頂きます。 テキストログファイルの文字列をバッチで加工したい。 テキストファイルの文字列にはコロン(:)、スペース( )、 セミコロン(;)を区切り文字として使用していますが、 それをバッチで全てスペースで区切りしたいのですが可能でしょうか。 例えば ABC DEF GHI JKL: MNO;PQR;STU;VWXYZ バッチ起動後--------> ABC DEF GHI JKL MNO PQR STU VWXYZ よろしくお願いします。

  • 一括置換をしたい

    ワード2003を使っています。 あるテキストデータの 「ABC」という文字列を「DEF」に置換したいんです。 同様に、 「GHI」を「JKL」に、 「MNO」を「PQR」に置換したいんです。 このように3つの文字列をボタンひとつで置換するにはどのようにすれば良いでしょうか? よろしくお願い致します。

  • 複数種類の括弧でくくられてない文字をマッチングさせたい

    Perlの正規表現で質問です。 複数種類の括弧、たとえば()、【】、[]などで囲まれていない文字をマッチングさせたいのです。 括弧は1行に複数ある可能性があり、ない場合もあります。 (abc)【def】ghi【jkl】 だとghiの部分。 【abc】【def】(ghi)jkl(mno) だとjklです。 頭に必ず括弧が来たり、括弧が一回だけなら括弧閉じるの種類をor検索ではじけるのですが、何回くるかわからないのでどうしたらいいか困っています。 方法がありましたら教えてください。

    • ベストアンサー
    • Perl
  • CSVファイルの任意の列をダブルクォーテーションで囲みたいのですが・・・。

    CSVファイルの任意の列をダブルクォーテーションで囲みたいのですが・・・。 例えば  abc,def,ghi,jkl  mno,pqr,stu,vwx     ↓  abc,"def",ghi,"jkl"  mno,"pqr",stu,"vwx" というように、2番目と4番目の列の文字列をダブルクォーテーションで囲む、といった具合にです。 調べてみるとVBAを使用する方法はあるようですが、EXCELやその他のフリーソフト等を使用して処理する方法はありませんでしょうか。 よろしくお願いいたします。

  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • Excel で他のセルの値を参照するには?

    よろしくお願いします。 (使用:Excel2000、2003) Excelでは、例えば下記のようにセルに入力すると 他のセルの値を参照できます。 =A1 しかし、これでは1つのセルあたり1つのセルしか参照できません。 例えば、  セルA1:「abc_def_ghi」という文字列が入っている  セルA2:「jkl_mno_pqr」という文字列が入っている とします。 この状態で、セルA3にA1とA2から値を参照して 「abc_mno」(A1から「abc」をA2から「mno」を参照しています)と いったようにするにはどのようにすれば良いでしょうか? MS-DOSでバッチファイルを作成するときの環境変数のように 値を参照したいという意図です。 お手数ですが、ご存知のかたがいらっしゃいましたら宜しくお願いします。