• ベストアンサー

アクセス 更新クエリで文字置換え

お世話になります。 先日、ご質問させていただきましたが、質問内容が変わってきたので、質問させてください。 Accessで特定の文字を置き換えたいです。 商品名の一部を置換したいのですが、 I たばこ II 文房具 (1) 工具 (2) 雑貨 これの、 Iと(1)を1に置換し、 IIと(2)を2に置換したいです。 1:1(Iを1)で置換する、式は作成出来たのですが、2:1(Ior(1)を1)で置換する式はどうしたらいいのでしょうか? 1:1で作成した、SQLは下記のようになっています。 UPDATE [★商品テーブル] SET [★商品テーブル].商品名= Replace([商品名],"(1)","1") WHERE ((([★商品テーブル].商品名) Like "*(1)*")); クエリでフィールドを増やして、作成しようとすると、商品名が重複しています。とエラーができます。 お力を貸してください。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

UPDATE [★商品テーブル] SET [★商品テーブル].商品名= Replace(Replace([商品名],"(1)","1"),"I","1") WHERE ((([★商品テーブル].商品名) Like "*(1)*") or (([★商品テーブル].商品名) Like "*I*")); かな?

d-loop
質問者

お礼

色々やってて出来ました。ありがとうございました。

d-loop
質問者

補足

すごいですねっ!!ありがとうございます。 ちなみに、(2)とIIを2にも置換したいのですが、その場合は、もう1つクエリを作るしかないのでしょうか? クエリでフィールドを増やして、作成しようとすると、商品名が重複していと出てしまうので。 お手数ですが、教えてください。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>Replace([商品名],"(1)","1") これじゃ置き換えたい数字の数だけクエリがいるのでは? あるいは数だけのネスト? 数字の後ろのスペースが必ずあるのなら 下のような変換対応テーブルを作ります 旧 新 I 1 II 2 (1) 1 (2) 2 こうしておいて UPDATE 元テーブル INNER JOIN 対応テーブル ON left(元テーブル.商品名,instr(元テーブル.商品名," ")-1) = 対応テーブル.旧 SET 元テーブル.商品名 = [新] & " " & mid(元テーブル.商品名,instr(元テーブル.商品名," ")+1); このクエリ(SQL)は結合条件に式を使用しているのでデザインビューでは作れません

d-loop
質問者

お礼

色々やってて出来ました。ありがとうございました。

d-loop
質問者

補足

ありがとうございます。 ただ、商品名にスペースがあるとは限らないです。 CHRONOS_0さんのおっしゃる通り、テーブルで、変換表を作成して、置換するのが、ベストだと思うのですが やり方がわからなくて、入れ子でやってくしかないのかなぁ。 と思って、このようなご質問にさせて頂きました。 ↓以前させて頂いた質問です。 http://oshiete1.goo.ne.jp/qa2867022.html 商品名にスペースがあるとは限らないのですが、他の方法がありましたらお力貸してください。

関連するQ&A

  • Access リストから文字の置換(Replace)  

    Accessで特定の文字を置き換えたいです。 ただ、置換するだけなら、Replace([商品名],"ⅰ","1")でいいような気がしますが、 置換したい文字が複数あり 今後も増えていくのでテーブルでリストを作成しました。 元の文字 置換文字 ⅰ     1 ⅱ     2 I     A II     B 元の文字を、置換文字に置き換えたいです。 また、商品名は、 I たばこ II 文房具 になっているものや、 商品券ⅰ、ビール券ⅱ と言うのがあるので、置換文字の入る場所はバラバラです。 質問がわかりにくくてすみません。 どうぞよろしくお願いします。

  • アクセスのクエリの作り方

    初心者なので教えてくださいませんか? アクセスでテーブルを複数作成して、それをクエリで結合するときに、どのテーブルからどのフィールドを選べばいいのかわかりません。 例えば・・・ 売上テーブル:NO 売上日 商品コード 数量 商品テーブル:商品コード 商品名 単価 この二つのテーブルを結合するクエリを作ります。 NO 売上日 商品コード 商品名 単価 数量 上記のフィールドを使用したいのですが、このとき、商品コードをどちらのテーブルのを使ったらよいのでしょう。 その判断は何からしたらよいのでしょうか。 うまく説明できているかわかりませんが、よろしくお願いします。

  • ACCESS【更新クエリの中断ができない】

    ACCESS初心者です。質問がわかりにくかったらすみません。 ACCESSの更新クエリで、レコードのカンマをスペースに置き換える式を作りました。 クエリを実行すると、 ”更新クエリを実行すると、テーブルのデータが更新されます” と、メッセージが表示され”はい”で次に進むと ”*件のレコードが更新されます。”と正確な件数が表示されます。 ただ、ここでやはり中断したいと思い、”いいえ”を選択しても、 レコードは更新されてしまいます。何故でしょうか?教えてください。 ______________________ フィールド:     型名 テーブル:      データ統合 レコードの更新:  Replace([型名],","," ") 抽出条件:     Like"*,*"

  • access2007 フォームの設定

    access初心者です。 access2007を使用しています。 テーブル:商品テーブル --- フィールド:商品コード,商品分類,商品名 syo0001,文房具,のり syo0002,文房具,はさみ syo0003,筆記用具,蛍光ペン syo0004,筆記用具,油性ペン syo0005,筆記用具,水性ペン syo0006,ノート,A4ノート syo0007,ノート,B5ノート syo0008,ノート,メモ帳 商品テーブルが上記のようにあったとします。 フォームで商品分類と商品名のコンボボックスを作り、 商品分類のコンボボックスで「文房具」を選択した後、 商品名のコンボボックスを開いたときに「のり」「はさみ」だけが 表示できるようにしたいです。 (同様に筆記用具を選ぶと、「蛍光ペン」「油性ペン」「水性ペン」が表示される。) このようなこと可能でしょうか。 ご回答をどうか、よろしくお願い致します。

  • アクセスの更新クエリ

    私は以前に、アクセスの桁あわせについての質問をしたことがあるものです。その時は『Format関数』を利用してやる方法を教えていただいたのですが、新たに疑問が出たので質問をさせていただくことにしました。 状態としましては、今エクセルのシートを二つインポートし、片方は1~20の連番のフィールド(テキスト型)があります。もう一つは01~20の連番のフィールド(テキスト型)です。この二つのテーブルの間にリレーションシップをとりたいので型は揃えていないといけないので、『Format関数』を利用し、【Format(Val([code]),"00")】と入力し更新クエリを実行しました。 実際に処理をしていくと、フィールド名が同じのテーブルが幾つもある状態なのですが、この場合その都度更新クエリをテーブルの数だけ作成しなくてはいけないのでしょうか?それとも、フィールド名が同じの場合何か1つの更新クエリで桁をあわせることは可能なのでしょうか? 長くなってしまいましたが、どなたかご存知の方教えて下さい。お願いします。

  • 複数の文字を置換した場合はフィールドを分けるしかないですか?

    Replace関数は1つのフィールドに対して1つしか使えないのでしょうか? フィールド「タイトル」の「あ」と「い」を置換したい場合、 式1: Replace([タイトル],"あ","あああ") 式2: Replace([タイトル],"い","いいい") と、ふたつフィールドを作成するしかないのでしょうか? 式3: Replace([タイトル],"あ","あああ") and Replace([タイトル],"い","いいい") という風にしたら 「指定した式の構文が正しくありません」というエラーになってしまいます。 この例えは2つだからいいですが Replaceを使いたい文字が複数ある場合もフィールドに対して1つずつしか置換できないのでしょうか? 当方アクセス2003です。 よろしくお願いします。

  • Access クエリで文字を左詰めで表示したい

    仕事で商品管理のシステムを作っています。 商品のカテゴリ別(食品、雑貨等)に売上金額を抽出する選択クエリを作成し、商品コードや商品名、単価、個数、売上金額等を表示しているのですが、商品名のフィールドだけ文字が右詰めで表示されてしまいます。これを左詰めで表示したいのですが、設定できる方法はありますか? クエリをもとにフォームを作成し、左詰めの書式設定をしようかとも思ったのですが、カテゴリ別にフォームを作成するとかなりの数になる為、できるだけクエリで左詰め表示ができないかと考えております。どなたかご教示下さいますよう、お願いいたします。

  • access2010 クエリの置換について

    お世話になります。アクセス初心者です。 調べてみましたが、いまいちピントこなかったので、こちらで質問させてください。 現在、以下のようなテーブルがあります。 (科目コード)(科目名) ・・  11  国語  21  古文 211  社会 212  理科 221  体育 222  英会話   ・   ・ このテーブルを用いて、クエリを作成します。テーブルのデータはそのまま残し、クエリのみ変更させます。科目コードを以下のように置き換えるように、関数を作成しました。 11→教養 21→専門 211→演習 212→演習 221→実技 222→実技  ・ 科目区分: Replace (Replace (Replace([科目名コード],"11","教養"),"21","専門"),"221","実技")   しかし、実際出てきたクエリは、  11  教養  21  専門 211  専門1 212  専門2 221  2専門 222  実技   のようになってしまいます。これを、条件のように、、“教養”、“専門”、“演習”、“実技”ときちんと置き換えることは可能でしょうか? お休みの中、申し訳ありませんが、ご回答のほどよろしくお願いします。

  • アクセス2003でのクエリーの抽出条件について教えてください

    教えてください アクセス2003であるデータを条件を付けて抽出しようと 思ってます。 データあいうえおテーブル 人   最小  最大 A   1  10(1~10の間ということです) B   11  20 C   21  30 というデータがあったとします。 かきくけこテーブル 判定  範囲1  範囲2       I  0  14(A,B,Cで1~10であるならIということです。0<1 10<14)  II  14  26  III  27  30 というものでクエリーを実行した場合 結果として A  1  10  I B  11  20  II(IとIIでBのデータ範囲がかぶっていますが、IIの方が多くかぶっているのでII) C  21  30  II(IIとIIIでBのデータ範囲がかぶっていますが、IIの方が多くかぶっているのでII) と判定できる抽出条件はどうすればよいでしょうか? ちなみに私はVB等は組めません(式ビルダが精いっぱいです。) 回答でそれ以外でお願いします。 いろいろしらべて最初に範囲抽出からスタートし between and でやってみましたが、その場合範囲と最大が同じものが 2重計上されていました。(抽出条件難しいです。) 例があると助かります。 よろしくお願いします。

  • クエリを使ってテーブルを更新したいのですが

    すみません、大学でやっているプロジェクトが行き詰ってしまい、初めて書き込みをさせていただきます。 今私はaccess 2003でレストランの在庫管理システムを作ろうとしているのですがフィールド間の計算がうまくいかないので困っています。テーブルは3つあり テーブル  :商品テーブル ーーーーーーーーーーーーーーーーーーーーー フィールド :商品名(主キー)text フィールド :販売数 number ーーーーーーーーーーーーーーーーーーーーー テーブル  :グラムテーブル ーーーーーーーーーーーーーーーーーーーーー フィールド :グラムテーブルId(主キー)auto number フィールド :商品名 text フィールド :食材名 text フィールド :食材に使うグラム数 number ーーーーーーーーーーーーーーーーーーーーー テーブル  :食材テーブル ーーーーーーーーーーーーーーーーーーーーー フィールド  :食材名(主キー)text フィールド  :食材の在庫 number ーーーーーーーーーーーーーーーーーーーーー リレーションシップは商品テーブルとグラムテーブルが1対多の関係で、食材テーブルとグラムテーブルも1対多の関係です。 私の中のイメージでは使用者が商品テーブルの販売数を打ち込んで食材の在庫数が変わっていくような感じで作りたいので、とりあえず、更新クエリを使って 食材テーブル.食材の在庫:[食材の在庫]-([商品テーブル.販売数]*[グラムテーブル.食材に使うグラム数]) という式を打ち込みましたが変化はありませんでした。なにか、間違っている部分もしくは変更しなきゃならない部分があるならご教授お願いいたします。 わかりにくい文で本当にすみません。

専門家に質問してみよう