Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1094 / 2272 ツリー ←次へ | 前へ→

【8812】改行を削除する方法 ゆずぽん 06/11/21(火) 9:00 質問[未読]
【8813】Re:改行を削除する方法 飛ばない豚 06/11/21(火) 10:15 回答[未読]
【8814】Re:改行を削除する方法 小僧 06/11/21(火) 10:20 回答[未読]
【8815】Re:改行を削除する方法 ゆずぽん 06/11/21(火) 12:25 お礼[未読]

【8812】改行を削除する方法
質問  ゆずぽん  - 06/11/21(火) 9:00 -

引用なし
パスワード
   こんにちは。
WindowsXP Access2000を使っています。
メモ型のフィールド(フィールド内に改行あり)から
特定の文字列を削除したく、クエリで関数を書きました。

Replace([AAA],"???","")
”AAAフィールドの文字列???をNullにする”

この関数でクエリを実行すると、
AAAフィールド

”実行前”        ”実行後”
+++(改行)   →   +++(改行)
???(改行)  →   (改行)
***(改行)   →   ***(改行)

と文字列は消えるのですが改行までは消えずに
空白の行が残ってしまいます。
できれば、空白の行はなくしたいのですが(上記なら実行後2行になる)
改行を消す方法はあるのでしょうか?
よい方法があれば教えてください。
よろしくお願いします。

【8813】Re:改行を削除する方法
回答  飛ばない豚  - 06/11/21(火) 10:15 -

引用なし
パスワード
   ▼ゆずぽん さん:
> Replace([AAA],"???","")
> ”AAAフィールドの文字列???をNullにする”

Replace(Replace([AAA],"???",""),Chr(13) & Chr(10) & Chr(13) & Chr(10),Chr(13) & Chr(10))
"改行(Chr(13) & Chr(10))2連続の場合、1つに置換。"

これでどうでしょう。(^・ω・^)

【8814】Re:改行を削除する方法
回答  小僧  - 06/11/21(火) 10:20 -

引用なし
パスワード
   ▼ゆずぽん さん:
おはようございます。

>改行を消す方法はあるのでしょうか?

まず改行についてですが、
VBA内では「vbCrLf」という定数を使うことが可能です。

またクエリ内で処理したい場合はCr(キャリッジリターン)とLf(ラインフィード)
をキャラクターコードで連結させます。Chr(13) & Chr(10)


> 空白の行が残ってしまいます。

ご提示のようなデータですと、

+++ CrLf ??? CrLf *** CrLF

というデータが

+++ CrLf CrLf *** CrLF

となるわけですよね。

空白行についてはCrLfが連続で出現するので、
こちらを1つにしてあげれば良さそうです。

Replace(Replace([Data],"???",""),
Chr(13) & Chr(10) & Chr(13) & Chr(10),Chr(13) & Chr(10));


ただしこれでは先頭に???があった場合は処理できません。

力技になってしまいますが、
まず初めに Left([AAA],3) が ??? であった場合はMid([AAA],6) に変換し、
その後上記の処理を行うとうまくいくと思われます。


Function exReplace(varData As Variant, strFind As String) As Variant

  If Not IsNull(varData) And Len(varData) > Len(strFind) Then
    If Left(varData, Len(strFind)) = strFind Then
      varData = Mid(varData, Len(strFind & vbCrLf) + 1)
    End If
    
    varData = Replace(varData, strFind, "")
    varData = Replace(varData, vbCrLf & vbCrLf, vbCrLf)
  End If
  
  exReplace = varData
End Function

とモジュールに記述して

UPDATE テーブル名 SET AAA = exReplace([AAA],"???");

こんな感じでしょうか。

【8815】Re:改行を削除する方法
お礼  ゆずぽん  - 06/11/21(火) 12:25 -

引用なし
パスワード
   ▼小僧 さん・飛ばない豚さん:
ありがとうございました。成功しました。
改行をどう表現したらいいかわからなかったので、
複数の方法を教えていただき、大変勉強になりました。
また、何かありましたらよろしくお願いします。

1094 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078209
(SS)C-BOARD v3.8 is Free