あるフィールドの「東京に行った。しかし・・・」の「東京」のみ置換するにはどうしたらよいでしょうか。
抽出条件の書き方で、できるのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

モジュールで関数を作って、その関数をクエリで使えば、出来ると思います。



クエリは、

UPDATE TEST_TBL SET TEST_TBL.DATA = REPL([DATA],"東京","京都");

のようにします。TEST_TBLのDATAカラムの、"東京"を"京都"に変更します。REPLが自作の関数です。

モジュールで、下記のようにREPL関数を作成します。

'
' sFrom・・・更新対象の文字列
' sFind・・・置換対象文字列
' sRepl・・・置換文字列
'
Public Function Repl( _
sFrom As String, _
sFind As String, _
sRepl As String) As String
Repl = Replace(sFrom, sFind, sRepl)
End Function

(インデントが消えて、見にくいですね。ごめんなさい)
Replace関数が直接クエリから呼べるかと思ったのですが、直接は駄目でした。また、Replace関数は、Accessのバージョンによっては、使えないかもしれません。その時は、言ってくだされば、代替案を出します。

この回答への補足

丁寧な回答ありがとうございます。
関数を使わずにIIFとかを使ってsqlのみでできないでしょうか。
参考サイトらしきサイトを見つけたのですが、素人なもので単純化できません。
http://www.akj.co.jp/aug/qa/ans0001-0050/0582.html

補足日時:2000/12/31 09:49
    • good
    • 0

こんなのはどうでしょう。


IIf(InStr(1,[DATA],"東京")=0,[DATA],IIf(InStr(1,[DATA],"東京")=1,"京都" & Mid([DATA],3),IIf(InStr(1,[DATA],"東京")>1,Left([DATA],InStr(1,[DATA],"東京")-1) & "京都" & Mid([DATA],InStr(1,[DATA],"東京")+2))))
    • good
    • 0
この回答へのお礼

サンプルを無事置換できました。いろいろなサンプルを提供していただきありがとうございました。目的に合わせて、いろいろ勉強していきたいと思います。

お礼日時:2001/01/01 06:56

ごめんなさい・・・


arataさんが書かれているように Replace関数はクエリーで直接使えませんね。すみませんでした (^_^;)
    • good
    • 0

Accessのバージョンは何なんでしょうか?


Access2000には Replace関数が追加されているので、それをクエリーでしようすればいいと思います。

Access97以前では既に回答されていますが、VBAでモジュールを作成したほうがいいと思います。私のホームページのほうにも Replace関数と同等の機能のモジュールを公開しています。

参考URL:http://www.zenko3.com/
    • good
    • 0

arataさんのやり方が綺麗だと思いますが・・・



レコードの更新:
Left([DATA],InStr([DATA],"東京")-1) & "京都" & Right([DATA],Len([DATA])-(InStr([DATA],"東京")+2))
抽出条件:like "*東京*"

でどうでしょう
(東京に行った。しかし東京は・・・はダメですよ)
    • good
    • 0

更新クエリではありませんが・・・



目的のことをしたいだけなら、
1.直接テーブルを開いた状態で「東京に行った・・・」のフィールドが選択された状態にします。
2.編集->置換 で
 検索する文字列:東京 
 置換後の文字列:京都(とかね)
 探す場所:(1.の作業で正しいフィールド名になってると思います)
 検索の条件:フィールドの一部分

これで「東京」でも、「しかし」でも置換することができます。

どうしても更新クエリということだと、文字列操作系の関数を使えばできそうですが・・・

この回答への補足

実は更新クエリで是非とも実行したいのです。というか、更新クエリでこのようなことができるのかを確認したいというほうが近いかもしれません。ご存じの方よろしくお願いします。

補足日時:2000/12/31 06:02
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2013 クエリ内別フィールドにある値より大きい場合のみ抽出する いつも大変お世話になっ

Access2013 クエリ内別フィールドにある値より大きい場合のみ抽出する

 

いつも大変お世話になっております。

 

現在 日付を基にした一覧を作成しています

 

出来事①テーブル

コード|出来事①

111|2016/3/1

222|2016/3/2

111|2016/10/5

 

 

 

出来事②テーブル

コード|出来事②

111|2016/4/1

222|2016/5/1

111|2017/2/1

 

この2つのテーブルを出来事①を基準以下のように作りたいのです

コード|出来事①|出来事②

111|2016/3/1 |2016/4/1

222|2016/3/2 |2016/5/1

111|2016/10/5|2017/2/1

 

 現在は選択クエリで

 フィールド⇒ コード    |出来事①    |出来事②

 テーブル ⇒出来事①テーブル|出来事①テーブル|出来事②テーブル

 

というところまで設定しまして、

この出来事②のフィールドの抽出条件を出来事①より後の日付、と設定したいのです。

日付が特定の日であれば > #月/日/年#

といった条件を入れればよいのでしょうが、##の中をフィールドに指定することはできるのでしょうか?

 

宜しくご教示ください

Access2013 クエリ内別フィールドにある値より大きい場合のみ抽出する

 

いつも大変お世話になっております。

 

現在 日付を基にした一覧を作成しています

 

出来事①テーブル

コード|出来事①

111|2016/3/1

222|2016/3/2

111|2016/10/5

 

 

 

出来事②テーブル

コード|出来事②

111|2016/4/1

222|2016/5/1

111|2017/2/1

 

この2つのテーブルを出来事①を基準以下のように作りたいのです

コード|出来事①|出来事②

111|2016/3/1 |2016/4/1

222|2016/3/2 ...続きを読む

Aベストアンサー

それぞれ日付型のフィールドであればそのまま >[フィールド名] と条件を指定すればいいです。

Q抽出条件が複数ある場合で,抽出元のデータに未入力がある場合

Accessを利用して住所録のデータベースを作成しています。

検索用フォームのレコードソースにクエリを指定して,フォーム上にテキストボックスを2つ配置し,コマンドボタンをクリックして抽出結果をフォームに表示させます。一つめのテキストボックスには氏名,二つ目のテキストボックスには,勤務先の入力をします。以下の条件での検索結果をフォーム上に表示させたいのですが,(3)の場合に,勤務先がない(未入力の)人のデータも同時に抽出されてしまいます。

(1)氏名のみの条件で該当する人
(2)氏名及び勤務先の条件で該当する人
(3)勤務先のみの条件で該当する人
(4)条件を入力しない場合

<住所録>
ID___氏名_________フリガナ___________勤務先
1____鈴木 健一__スズキ ケンイチ__新日本商事
2____中村 主水__ナカムラ モンド___新日本商事
3____山田 太郎__ヤマダ タロウ_____


クエリには
WHERE ((([tbl THE CARD].氏名) Like "*" & [Forms]![frm_検索用]![氏名] & "*") AND (([tbl THE CARD].勤務先) Like [Forms]![frm_検索用]![勤務先] & "*")) OR ((([tbl THE CARD].氏名) Like "*" & [Forms]![frm_検索用]![氏名] & "*") AND ((([tbl THE CARD].[勤務先]) Like [Forms]![frm_検索用]![勤務先] & "*") Is Null)) OR ((([tbl THE CARD].勤務先) Like [Forms]![frm_検索用]![勤務先] & "*"))
ORDER BY [tbl THE CARD].ID;
と記載しました。

例えば,氏名と勤務先の両方の検索結果を表示させる場合,
・氏名が該当し,勤務先が空白のデータ
が抽出されます。氏名と勤務先の両方に検索条件をいれたときには,勤務先が空白のデータを抽出しないようにしたいのですが,どうしたら良いでしょうか。氏名だけで検索するときには,勤務先が空白かどうかは考慮しない結果を表示させたいと思います。

過不足があると思いますが,ご指導宜しくお願いします。

Accessを利用して住所録のデータベースを作成しています。

検索用フォームのレコードソースにクエリを指定して,フォーム上にテキストボックスを2つ配置し,コマンドボタンをクリックして抽出結果をフォームに表示させます。一つめのテキストボックスには氏名,二つ目のテキストボックスには,勤務先の入力をします。以下の条件での検索結果をフォーム上に表示させたいのですが,(3)の場合に,勤務先がない(未入力の)人のデータも同時に抽出されてしまいます。

(1)氏名のみの条件で該当する人
(2)氏名及...続きを読む

Aベストアンサー

横レス失礼致します。

No.1の方の組み方では、検索条件とするフィールドを追加するほど、複雑になっていきます。
VBAで対応されるのでしたら、以下のようにした方が、簡単にフィールドの追加ができます:


Private Sub 表示_Click()
On Error Goto エラー処理

  Dim StrWhr As String   'Where条件式
  Dim StrMsg As String   '表示メッセージ
  Dim StrSrc As String   'レコードソース
  Dim stDocName As String   '表示用フォームの名前

  '検索条件が指定されているもののみを、Andで順次連結してWhere条件式を作成
  If Nz(Me!氏名, "") <> "" Then
    StrWhr = "氏名 Like '*" & Me!氏名 & "*'"
  End If
  If Nz(Me!勤務先, "") <> "" Then
    StrWhr = IIF(StrWhr = "", "", StrWhr & " And ") & "勤務先 Like '*" & Me!勤務先 & "*'"
  End If
  If Nz(Me!住所, "") <> "" Then
    StrWhr = IIF(StrWhr = "", "", StrWhr & " And ") & "住所 Like '*" & Me!住所 & "*'"
  End If
  '以降、検索条件を入力するテキストボックスごとに、以下のセットで追加すればOKです。
  'If Nz(Me!○○, "") <> "" Then
  '  '曖昧検索の場合
  '  StrWhr = IIF(StrWhr="", "", StrWhr & " And ") & "○○ Like '*" & Me!○○ & "*'"
  '  '完全一致検索(数値型)の場合
  '  'StrWhr = IIF(StrWhr="", "", StrWhr & " And ") & "○○ = " & Me!○○
  'End If

  '↓~~~OpenFormのWhere条件で絞り込みをする場合、ここの一団は不要~~~↓
  If StrWhr="" Then
    StrSrc = "Select * From [tbl THE CARD] Order By ID;"
  Else
    StrSrc = "Select * From [tbl THE CARD] Where " & StrWhr & " Order By ID;"
  End If
  '↑~~~OpenFormのWhere条件で絞り込みをする場合、ここの一団は不要~~~↑

  '確認メッセージで「OK」を選択したら、絞り込み(または解除)を実行
  If MsgBox(StrMsg, vbOKCancel, "確認") = vbOK Then
    'レコードソースの切替で対応する場合
    '(フォーム側のレコードソースは空白にしておくと、コントロールに一瞬エラーが表示
    ' されるものの、表示は速くなります)
    DoCmd.OpenForm stDocName
    Forms(stDocName).RecordSource = StrSrc
    'フィルタ条件で対応する場合(一旦レコードを読み込んでからの絞り込みになる分、
    ' 表示は遅くなります)
    'DoCmd.OpenForm stDocName, , , StrWhr
  End If

終了処理:
  Exit Sub
エラー処理:
  MsgBox Err & Error$, , Me.Name & " 表示"
  Resume 終了処理
End Sub


・・・以上です。

横レス失礼致します。

No.1の方の組み方では、検索条件とするフィールドを追加するほど、複雑になっていきます。
VBAで対応されるのでしたら、以下のようにした方が、簡単にフィールドの追加ができます:


Private Sub 表示_Click()
On Error Goto エラー処理

  Dim StrWhr As String   'Where条件式
  Dim StrMsg As String   '表示メッセージ
  Dim StrSrc As String   'レコードソース
  Dim stDocName As String   '表示用フォームの名前

  '検索条件が指定されてい...続きを読む

Qアクセス iif計算式 フィールド1 品名 フィールド2 単価 フィールド3 割り引きbit(1あり

アクセス iif計算式

フィールド1 品名
フィールド2 単価
フィールド3 割り引きbit(1あり、0なし)
フィールド4 割引後単価

上記なようなフィールドで割引きがあるに1が立った場合、フィールド4に一定の額100円をマイナスした額を返すには、iifではどのように書くのでしょうか?

Aベストアンサー

https://support.office.com/ja-jp/article/IIf-%E9%96%A2%E6%95%B0-32436ecf-c629-48a3-9900-647539c764e3

iif(条件式,trueの場合,falseの場合)
iif(割り引きbitが1か?,単価から100円マイナス,"")

Qアクセス 正味の算出 フィールド1 オートID フィールド2 顧客No フィールド3 商品名 フィー

アクセス 正味の算出

フィールド1 オートID
フィールド2 顧客No
フィールド3 商品名
フィールド4 単価

このようなテーブル構成で、顧客Noでグループ化して、IDのカウントした結果が1、2となります。
その際、1の場合は1、2の場合は0.5と別フィールドに記載する方法を教えて下さい。

Aベストアンサー

>本当はIDのカウントが2以下なら1を3以上なら999(数値で0、1以外なら何でも良いです)

IIf([IDのカウントした結果のフィールド名]>=3,999,1)

QACCESS2000でクエリを抽出条件で抽出

VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。

抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。

strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"

クエリーのカラム名は全角漢字です。

どこがおかしいのでしょうか?

よろしくお願いいたします。

Aベストアンサー

where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"
where (クエリー.カラム名)=#" & Format(Date, "yyyy/mm/dd") & "#"
では?
日付型の場合、# で、文字型は ' 、数値 は無しです
全角右括弧は投稿の際の手違い?


人気Q&Aランキング

おすすめ情報