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

この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と関連する良く見られている質問

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

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ベストアンサー

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

QAccess VBA(条件付きクエリ実行する方法)

タイトルについて、御教示ください。
以下のような事を実行できるVBAを教えてください。

■前提条件
クエリ1・2:チェックボックス付クエリ

■やりたいこと
・クエリ1・クエリ2に両方一つもチェックが入っていない場合 →クエリAを実行
・クエリ1に1つ以上チェックが入っている(クエリ2には1つもチェックが入っていない)場合 →クエリBを実行
・クエリ2に1つ以上チェックが入っている(クエリ1には1つもチェックが入っていない)場合 →クエリCを実行
・クエリ1・クエリ2に両方1つ以上チェックが入っている場合  →クエリDを実行

上記のように、チェックボックスの入る条件によって、
実行するクエリを変更する事は可能なのでしょうか。

Aベストアンサー

あれ?いつぞやの?

さて、可能ではありますが、その実行トリガーは?
ボタン押下時?

まぁ何にしても、そのクエリのチェックのTrueの数をそれぞれDcount関数で取得し条件分岐すれば出来ますよね。

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   '表示用フォームの名前

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

QVBAからADOを使ってクエリのクエリを作成したい

VBAからADOを使ってクエリのクエリを作成したい

ADO初心者です。

VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。

なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

Aベストアンサー

SELECT文の中にSELECT文ですが、わかりますか?。

重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば
クエリのクエリと同じ結果を得られると思いますし、
重複しているものは何だったかという後から調べることがあったときには重宝します。

処理ができさえすればシンプルでもいいなら、
機能分けてもいいでしょう。

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円マイナス,"")

QVBAでアクセスのクリエの抽出条件を変更

エクセルで、契約管理表を作っています。
仕様としては、エクセルとアクセルを使用し、
エクセルからアクセスのデータベースを操作
するようにしています。
(複数拠点で仕様する為。)

アクセスでは「T_契約メイン」というテーブルと
「T_契約今月」というクエリがあって、今月分の
データのみ抽出できるようになっています。

これを、エクセルのVBAのフォームでADOとSQL等を
利用してデータ取得、編集、新規契約の登録などを
行うように考えています。

ここまでの内容は無事、作成する事が出来ています。

ここからが質問なのですが、クエリ「T_契約今月」の抽出
条件をエクセルVBAから変更するにはどのようにコードを
書けばいいのでしょうか?

毎月毎月、アクセルを開いてクエリのデザインビューで
抽出条件を変更すればいいのでしょうが、あんまりスマート
では無いですよね。

出来れば、エクセル側からVBAで設定変更等のフォームや
ボタンを作って、処理したいのですが…。

とりあえずアクセスに繋げるところまでは分かるので、
クエリの抽出条件変更の部分のコードの記載方法を
教えて頂けないでしょうか?

どうぞよろしくお願いいたします。

エクセルで、契約管理表を作っています。
仕様としては、エクセルとアクセルを使用し、
エクセルからアクセスのデータベースを操作
するようにしています。
(複数拠点で仕様する為。)

アクセスでは「T_契約メイン」というテーブルと
「T_契約今月」というクエリがあって、今月分の
データのみ抽出できるようになっています。

これを、エクセルのVBAのフォームでADOとSQL等を
利用してデータ取得、編集、新規契約の登録などを
行うように考えています。

ここまでの内容は無事、作成する事が出来て...続きを読む

Aベストアンサー

VBAを持ち出さずとも、Excelに抽出条件を入力するセルを設け
Accessにリンクして抽出条件とすればいいのでは

リンクテーブルの名前を「エクセル」、フィールド名を「抽出条件」とすれば
Accessのクエリの抽出条件欄に

In (select 抽出条件 from エクセル)

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)

QVBAをつかってクエリの情報を抽出するには??

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。
以下にどのように記述しているか記します。
------------
Public Function value()
On Error GoTo ERRORRR
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)
Debug.Print rs.EOF
Do Until rs.EOF
Debug.Print rs!ID
Debug.Print rs!登録状態
Debug.Print rs!開通年月日
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
Exit Function
ERRORRR:
msgbox Err.number & ":" & Err.description
End Function

--------
開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。)

使用しているACCESS Ver:ACCESS97

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
...続きを読む

Aベストアンサー

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1").Value = pr1
qd.Parameters("pr2").Value = pr2

Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。

これでいけると思います。

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1")....続きを読む

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を見た人がよく見るQ&A

人気Q&Aランキング