【無料配信♪】Renta !全タテコミ作品第1話

Accessで、特定の記号を削除したいです。

具体的には、CSVファイル内に記述されているhtmlタグから、"(ダブルコーテーション)を全て消したいです。

ですが、Ctrl+Fで検索・置換を出して"を検索しても、
「レコードの検索が終了しました。指定した検索項目は見つかりませんでした」
と出てきます。

どうすればいいのでしょう?
Accessは2007、OSはXPです。

よろしければ助けてください。

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

A 回答 (3件)

【要旨】


『検索と置換』ダイアログで、『検索条件(H)』に「フィールドの一部分」
を指定して、検索または置換を行ってみて下さい。


【詳細】

> Ctrl+Fで検索・置換を出して"を検索しても、

Accessの場合、Ctrl+Fによる検索では、Excel等のそれとは異なり、
「完全一致検索」がデフォルトになっています。
ですので、今回の目的のためには、曖昧検索になるように条件を
指定しなおしてやる必要があります。

具体的には、冒頭に書いたとおり、『検索条件(H)』の欄で、
「フィールドの一部分」を指定すればOkです。

・「フィールド全体」:
 フィールド全体が一致、つまり完全一致
・「フィールドの一部分」
 フィールドの一部分と一致、つまり曖昧検索
・「フィールドの先頭」
 ・・・先頭一致ですね。


なお、今回は全てを削除とのことなのでこの機能で問題ありませんが、
あるパターンに合致した場合に限定する場合は、更新クエリと関数
(Replace関数など)を使用することになりますので、今後の参考まで。
「Accessで、特定の記号を削除したいで」の回答画像1
    • good
    • 0

検索・置換文字をダブルコーテーションで囲っていますか?

    • good
    • 0

>CSVファイル内に記述されている


CSVファイル上の「"」を削除したいのでしょうか

>Ctrl+Fで検索・置換を出して
どの状態ででしょうか。データシート表示上でしょうか

どのソフトでの検索画面か明示してないですが、
「"」はそもそも文字列のかこみで使いますから、
「"」単独の1文字で検索文字として指定するのでなく、
「"""」とすることあります。確認してください。
それだけで済むかもしれません。

「ACCESSでやりたい」ということはシステムの一部として
機能を付与したいということでしょうか。
検索して、ということは1回限りやればいいニュアンスですが・・・・。
「削除機能を作る」「検索画面で見つからない」、
別で考えたら良いでしょうか。
    • good
    • 0

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

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

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

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

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

Qカンマ区切りのCSVファイルから""を削除したい

初めて質問いたします

以下のような形式のCSVファイルがあります
例)
品名,数量,単価,金額
"りんご",1,150,150
"バナナ",10,200,2000
"メロン","1,000","2,000","2,000,000"

上記のように、品名にはダブルクォーテションがつき、
数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています

上記のようなデータを
りんご,1,150,150
バナナ,10,200,2000
メロン,1000,2000,2000000
のように別ファイルへ出力するにはどのようにすればよいでしょうか?

プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです
よろしくお願いいたします

Aベストアンサー

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = BaseFolder.Path & "\" & "_NewFiles"

If oFs.folderExists(newFolder) = False Then
oFs.createFolder (newFolder)
End If

For Each f In BaseFolder.Files
If oFs.GetExtensionName(f) = "csv" Then
Call changeIt(f.Path, newFolder)
End If
Next

MsgBox newFolder & " フォルダ内を検証"


Sub changeIt(orgFname, trgFolder)
Dim oFs
Dim orgF
Dim newF
Dim newFname
Dim buF
Dim oReg

Dim Mcol
Dim M
Dim M1, M2
Const forReading = 1
Const forWriting = 2

Set oFs = CreateObject("Scripting.fileSystemObject")
Set oReg = CreateObject("VBScript.RegExp")
Set orgF = oFs.getFile(orgFname).openAsTextStream(forReading)

newFname = trgFolder & "\" & oFs.getBaseName(orgFname) & "_New.csv"
oFs.CreateTextFile (newFname)
Set newF = oFs.getFile(newFname).openAsTextStream(forWriting)

With oReg
.Pattern = """.*?"""
.IgnoreCase = False
.Global = True
End With

Do Until orgF.atendofstream
buF = orgF.readline
Set Mcol = oReg.Execute(buF)

For Each M In Mcol
M1 = Replace(M.Value, ",", "")
buF = Replace(buF, M.Value, M1)
M2 = Replace(M1, Chr(34), "")
buF = Replace(buF, M1, M2)
Next

newF.WriteLine buF
Loop

orgF.Close: newF.Close
Set Mcol = Nothing
Set oReg = Nothing

End Sub

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = Bas...続きを読む

QAccess(アクセス)での文字列の置換について

商品データベースをCSVでダウンロードし、一括で変更しようとしています。
Excelでは1つのセルに911文字以上のテキストが入っていると置換ができないようなんですが、アクセスではどうなのでしょう。

ちなみに、置換したいフィールドにはhtmlが入っていて、1000文字を超すフィールドもたくさんあります。

また、Excelはバージョンによって、ダブルクォーテーションを含むCSVデータ(htmlなど)は上手く1フィールドとして認識できないようです。アクセスもそのような不具合があるのかも教えていただきたいです。
よろしくお願いします。

Aベストアンサー

No.2,3です。

> 置換したい文字列は特定のフィールド内の文字列で、それ以外のフィールドで
> 仮に同じ文字列が存在しても、そこは変更してほしくなかった

なるほど、それだと確かに、一律で変換してしまうNotPadなどでは無理そうですね。


> Accessでは、レコードの移動は可能でしょうか。
> 例えば、5行目のレコード(行)を1行目に移動するといったような。

csvファイルなどをAccessに取り込んだ場合、「レコードの並び順は基本的に
保持されない」と考えておいた方が無難です。
また、Excelでの「行の切り取り→切り取ったセルの挿入」のような操作も
できません。

ただ、通し番号に相当するフィールドとデータを予め用意しておけば、
その通し番号で並べ替えを行うことで、「並び順の再現」は可能です。
また、同様に通し番号を書き換えた上で並べ替えを行うことで、
「レコードの切り取り・挿入」と実質的に同じ結果を得ることができます。

例えば、
> 5行目のレコード(行)を1行目に移動
といった場合は、通し番号のフィールド名を「ID」とすると、
 1)「ID=5」のレコードのIDを、一時的に「0」(→適当な空き番号)に書き換え
 2)「ID=0」以外の全てのIDに「1」を加算
 3)「ID=0」のIDを「1」に書き換え
という操作をした上で、IDで並べ替えてやる、といった具合です。

この書き換え・加算といった操作は、更新クエリというものを使えば、
Access上で簡単にできます。
(レコード1件ずつ、手入力でIDに1を加算していく、という必要はありません)
 *入れ替える必要のあるものがいくつもあるようだと、変換後に出力した
  csvを、Excelで処理してしまった方が速いかもしれません。
  (その辺りは、臨機応変に、ということで・・・)

No.2,3です。

> 置換したい文字列は特定のフィールド内の文字列で、それ以外のフィールドで
> 仮に同じ文字列が存在しても、そこは変更してほしくなかった

なるほど、それだと確かに、一律で変換してしまうNotPadなどでは無理そうですね。


> Accessでは、レコードの移動は可能でしょうか。
> 例えば、5行目のレコード(行)を1行目に移動するといったような。

csvファイルなどをAccessに取り込んだ場合、「レコードの並び順は基本的に
保持されない」と考えておいた方が無難です。
また、Excel...続きを読む

QAccessで、1つの項目に複数の置換えを1度でするには?

Access2003で、1つの項目に複数の置換えを1で実行したいのですが、どうすればいいのでしょうか?
編集メニューの『置換』を使うのではなく、クエリやマクロで実行したいのです。

どんどん溜めているデータを定期的に決まった文字を1度に変換できるようにしたいのです。

例えば、[会社名]フィールドに入っている
 「株式会社」 を 「(株)」 に、
 「有限会社」 を 「(有)」 に、
 「法人会社」 を 「(法)」 に、…続く…、などと置換えしたいのです。

更新クエリで、『Replace([会社名],"株式会社","(株)")』 と1つなら置換えできたのですが、複数置換えしたい場合は、同様のクエリをその数だけ作ってマクロで続けて実行させるという方法しかないのでしょうか?

できればクエリを増やしたくないので、他にいい方法がありましたら、教えて下さい。

Aベストアンサー

同一のReplace関数のネストで、下記は2つの例ですが、3つまでぐらいなら、式が長くなるが辛抱できるのでは。
Replace(Replace([学校],"北小学校","北新小学校"),"中央小学校","中央北小学校")
生徒テーブルの学校フィールドで
A生徒の学校フィールド  北小学校ー>北新小学校
B生徒の学校フィールド  中央小学校ーー>中央北小学校
になったフィールドを作れました。

QAccessで名前の間のスペースを削除したいのですが

Accessで名前の間のスペースを削除したいのですが

Aベストアンサー

細かい状況が分かりませんがAccessではReplace関数というものが使用できます。
例えば 鈴木 太郎 のようなデータがテーブルの氏名フィールドに入っている場合には、更新クエリーで次のように更新すれば間のスペースを除去できます。
Replace([氏名]," ","")

Replace関数は文字列中のある文字を別の文字に置き換える関数ですが、この例では全角スペースを""(空文字列=文字なし)に置き換えています。

QAccessのテーブル内の文字の置き換え

Accessのテーブルへ他のデータベースから品名マスターをインポートしました。その品名の中に「*」の文字が使ってあり、その「*」を「×」の文字に置き換えたいのですがなにか良い方法があれば教えて下さい。
因みに品名マスターは以下のようになっています。

コード  品名           単価   単位
00010  Becu1.2*2000     9970.0   Kg
00020  Becu1.5*2000     7980.0   Kg
      ↓

コード  品名           単価   単位
00010  Becu1.2×2000     9970.0   Kg
00020  Becu1.5×2000     7980.0   Kg

上記の用にしたいのですが。
よろしくお願いします。

Aベストアンサー

テーブルを開いて、列名(品名のところ)をクリックして選択。
編集 → 置換にて
検索文字列に [*]
置換文字列に ×

探す場所のプルダウンで「品名」がでて来ますので選択
検索条件フィールドの一部分
でどうでしょう?

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

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

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QAccessでテーブル名やクエリ名一覧の抜き出し

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

・クエリを新規作成
・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング