• ベストアンサー

Excel上のSQLでReplace関数

ExcelからADO経由でMDBにつないでいます。 SQLの中で文字列を更新したくてReplaceで置き換えようとした のですが、Accessのモジュール上でのSQLでは問題なくReplace が使えているのですが、Excelのマクロ上ではダメです。 この場合、どうしたらいいのでしょうか? ヨロシコ願いします。

noname#27115
noname#27115

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

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

どうも安易なアドバイス?をしてしまったようです。 こちらでも確認できました。申し訳なく思っています。 調べてゆくと Jet を使った SQL文では Replace関数は存在しない、との記述 http://www.accessclub.jp/bbs6/0007/das1585.html の後半 MSDN辺りに、JET のSQLで使える関数の一覧があればと思うのですが・・ SQLインジェクション対策と思われる SandBox 適用 http://support.microsoft.com/default.aspx?scid=kb;JA;239482 こちらでも、キーの値を変えてみましたが効果なし ※PCの再起動は行っておりませんので十分な検証とは言えません。 ですので、私の手に余りそうです。 RecordSetを開いて、Loopで回しながらEdit・UpDateするしか思いつきません。 スッキリと出来ないもんですかねー 回答ではなくて怪答ですみません。

noname#27115
質問者

補足

ありがとうございます。そういうことなのですね。 その処理はAccess上ですることにします。

その他の回答 (1)

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

どの様に「ダメ」なのか? dim strSql as string strsql= "あーたらこーたら" & replace(・・)" & "・・" debub.print strsql 'で内容を確認 としといて このstrSqlを渡してあげればどうでしょう?

noname#27115
質問者

補足

こんにちは。 pSQL = "UPDATE T_PC_DATA SET T_PC_DATA.Key2 = Replace(Key1,'Dynabook','DN')" pSQL = pSQL & " WHERE (((T_PC_DATA.Key0)='TOSHIBA'));" CN.Execute pSQL が、SQLですが、、 エラー内容は・・・ '式に未定義関数 'Replace'があります。 で、 その関数自体が、存在しない感じなのです。

関連するQ&A

  • エクセルでSQLを使う

    VB6.0でのSQLは 理解しているのですが (アクセスのデータベース宣言して、使ってるんですが) エクセルでSQLを 使うには、データベースの宣言など、必要らしい。 でも、エクセルのデータやら、文字列や式まで、混ざっているシートと、データベースが頭の中で一致せず、困っています。 ある範囲を宣言するんでしょうか

  • [Access2000] Replace関数がない?

    レコードの特定文字列を置換しようと思い、いろいろ調べたところ、Access2000から「Replace」関数というのが使えるようになったとのこと。 早速クエリーで使用したところ、「式の中に未定義関数 Replace があります」というエラー表示が…。式ビルダの組み込み関数を確認しましたが、Replaceという関数はやはり存在しないようです。 何か間違っているのでしょうか?お力添えいただければ幸いです。

  • エクセルの変数をアクセスでも使いたい。

    エクセルの標準モジュールには Option Explicit Public 文字列 As String Public アクセス As Object Public Sub エクセル側テスト() 文字列 = "あ" Set アクセス = GetObject("C:\db1.mdb") If Not アクセス Is Nothing Then アクセス.Run "アクセス側テスト" End If Set アクセス = Nothing End Sub アクセス(db1.mdb)の標準モジュールには Option Compare Database Option Explicit Public 文字列 As String Sub アクセス側テスト() MsgBox 文字列 End Sub という風にコードを書きましたが やはりアクセスではエクセルで指定した変数が受け継がれません。 これを「アクセス側テスト」のマクロでもmsgboxで「あ」と表示させるにはどうすればいいのでしょうか? よろしくお願いします。

  • Replace関数について

    アクセスからエクスポートした改行を含むデータを エクセルの区切り位置で分割しようとctr➕J で試みたのですが、 改行コードの違いによりうまくいきませんでした。 改行を含む列(含まないセルもある)で、replace関数等を使って解決できることでしょうか? アクセス内で修正してからエクスポートしたほうがいいでしょうか? その場合の具体的な方法を教えてください。 よろしくお願いします。

  • ADOでのSQLついて

    こんにちは! ASPでADOを利用してSQLを使っていまして、 任意の文字列検索をやりたいのですが、うまくヒットしません。 AccessでのSQLで、likeを使った ((フィールド名) Like "*文字列*")を使いたいのですが、 ASPではアスタリスク*がうまく認識されていないような気がします。 うまくやる方法は無いのでしょうか?

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • Access起動中にエクセルからADOでデータの更新ができない

    こんばんは。原因がわからないので質問させてください。 SQLサーバーのデータをAccessのmdbへリンクテーブルしています。 (SQLサーバー → Access) 全て一つのパソコンで行なっています。(LANには接続していません) Accessのmdbファイルを起動している時に ExcelからSQLサーバーのAccessにリンクしている上記のテーブルへ ADOを使ってデータを追加しています。 (Excel → Access)  しかし、「rs.Update」の部分で  「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」 となってしまいます。 なので、一度mdbファイルを落として、コードを再開すると通るので ADOでExcel → Accessにデータを追加し終わってから再度mdbファイルを立ち上げています。 また同じ状態(mdbファイルを起動)で Excel → SQLサーバー へ更新クエリをしようとすると「時間切れになりました」となります。 (こちらもmdbファイルを落とすと再開できます。) いちいちmdbファイルを落とすのめんどうなのですが 回避する方法はありますか? cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\Documents.test.mdb" rs.Open "テーブル", cn, adOpenStatic, adLockPessimistic rs("フィールド") = True rs.Update '保存 rs.Close: Set rs = Nothing というコードを書いています。 Accessを落とせば正常に動きます。 ご教授よろしくお願い致します。

  • エクセルのReplaceで使える「?」(ハテナ)は

    エクセルのReplaceで使える「?」(ハテナ)は、 ワイルドカードとして藻文字列としても機能するのでしょうか? Sub Sample() Range("a1").Value = "aaa" Range("a1").Replace What:="a?a", Replacement:="aba" Range("a1").Value = "aaa" Range("a1").Replace What:="a?a", Replacement:="aba?" End Sub を実行すると 「?」は、文字1文字のワイルドカードとして機能しつつ、 最後に「?」が付く事から、文字列として?が置換されていますが この区別ってないのでしょうか?

  • Excel マクロ SQL実行について

    いつもお世話になっております。 現在、Excel1997と2007でマクロを作成しております。 使用している環境は様々でOSは2000~XPまでです。 っで質問なんですが、「マクロ」というシートと「データ」というシートがあったとして、「マクロ」シートにはボタンがあり、ボタンを押すとマクロが実行します。 マクロが実行されると「データ」というシートにあるデータをマクロ内のSQLで集計して、新しい「出力」というシートに吐き出します。 現在マクロ内のSQLはDAOライブラリを使用しています。EXCELマクロ内でSQLを使用する場合にDAOやADO等のライブラリを使用せずにSQLを実行することは可能でしょうか?

  • Replace関数

    更新クエリにて、品名置換のReplace関数使用で、サブフォームからボタン操作で更新クエリを実行したら以下の事が出来ます。 Replace([品名],"りんご","りんご青森") 品名 りんご を りんご青森 に置換 Replace([品名],"青森","") 品名 の 文字列から 青森 を無くす置換 これをベースに、サブフォームに、テキストボックス1 テキストボックス2 を配置して テキストボックス1 → りんご を テキストボックス2 → りんご青森 に置換 サブフォームを表示しているフォーム1から参照 Replace([品名],[Forms]![フォーム1]![テキスト1],[Forms]![フォーム1]![テキスト2]) サブフォームから参照 Replace([品名],[Forms]![フォーム1]![履歴].[Form]![テキスト1],[Forms]![フォーム1]![履歴].[Form]![テキスト2]) 上記のフォームに配置したテキストボックスから、任意の置換情報を入力して置換する流れを作っているのですが、いずれのフォームからもテキストボックスの内容を認識出来ない様です。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

専門家に質問してみよう