- ベストアンサー
AccessのクエリでvbLfのみ抽出する方法
- Access2010のクエリー(SQL)を使用して、vbLfが含まれるレコードのみを抽出する方法を説明します。
- vbLfの代わりにvbCrLfが含まれるレコードのみを抽出する方法も説明します。
- vbLfが含まれるレコードとvbCrLfが含まれるレコードを分けて抽出する方法を説明します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、No1です 括弧というかフィールド名が足りなかったです。 WHERE [テーブル1].フィールド1 Not Like "*" & Chr(13) & Chr(10) & "*" And [テーブル1].フィールド1 Like "*" & Chr(10) & "*"
その他の回答 (5)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】DBselect()について 回答では、SQL文はテスト済みってのを伝える為に次のDBSelect()を使っています。それ以上の意味はないのでDBSelect()についての説明は割愛しています。 Public Function DBSelect(ByVal strQuerySQL As String, _ Optional colDelimita As String = ";", _ Optional rowDelimita As String = ";") As String On Error GoTo Err_DBSelect Dim R As Integer ' 行インデックス Dim N As Integer ' 行総数 - 1 Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim fld As ADODB.Field Dim strList As String ' 全てのデータを区切子で連結して格納 Set cnn = CurrentProject.Connection Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then N = .RecordCount - 1 .MoveFirst For R = 0 To N For Each fld In .Fields With fld strList = strList & .Value & colDelimita End With Next fld strList = Mid(strList, 1, Len(strList) - 1) & rowDelimita .MoveNext Next R Else strList = "" End If End With Exit_DBSelect: On Error Resume Next rst.Close Set rst = Nothing DBSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", rowDelimita & "[END]", ""), "") Exit Function Err_DBSelect: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr(13) & Chr(13) & _ "・Err.Description=" & Err.Description & Chr(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBSelect End Function このように ADODB を利用した場合には、ワイルドカードが *→%になります。 【補足】AND を使わないについて。(以下は、私のかってのサイトからの引用です。) パターン照合: LIKE WHERE節にキーワード LIKE を使って、特定の文字列を含む行を抽出することができます。 WHERE <文字型列> LIKE '<値>' <文字型列>には、CHAR型の列の名前を記述し<値>には文字列をシングルクォーテーション(’)で囲んで指定します。<値>の文字列には、次のようなワイルドカード文字列を使うことができます。 % 0個以上の文字に対応します。(%→*) _ 任意の1文字に対応します。 [...] 各カッコ内に指定した文字に対応します。 [^...] 各カッコ内に指定した文字以外に対応します。(^→!) 次に、キーワードLIKEを使った Accessプロジェクトの DBSelect関数の例文を幾つか紹介します。 [イミディエイト] ? DBSelect("名前, 住所1", "得意先一覧", , "名前 LIKE '山%'",,True) 山田 太郎;大川市; ? DBSelect("名前, 住所1", "得意先一覧", , "名前 LIKE '_木%'",,True) 鈴木 一郎;久留米市; ? DBSelect("名前, 住所1", "得意先一覧", , "名前 LIKE '[山,中]%'",,True) 中村 健太;筑後市;山田 太郎;大川市; ? DBSelect("名前, 住所1", "得意先一覧", , "名前 LIKE '[^山,中]%'",,True) 鈴木 一郎;久留米市;日高 進;柳川市; AND を使わない為には [...] 各カッコ内に指定した文字に対応します。 [^...] 各カッコ内に指定した文字以外に対応します。 をりようしますが、^はAccessでは!を使います。 回答では、目的通りの結果を得ていますが・・・。書き終えて、「ウン!なぜOKなのだ?」と疑問が・・・。でも、それ以上は追求していません。質問者も考えてください。
お礼
>回答では、SQL文はテスト済みってのを伝える為に >次のDBSelect()を使っています。 DBSelect()はユーザー関数だったんですね。 >回答では、目的通りの結果を得ていますが・・・。 >書き終えて、「ウン!なぜOKなのだ?」と疑問が・・・。 >でも、それ以上は追求していません。 >質問者も考えてください。 私も回答No.4に関して お聞きしたかったことがあったのですが 回答No.3でしたかったことが解決しましたので 時間の取れたときに自分で考えてみます。 ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】なお ? DBSelect("SELECT * FROM Test_1 WHERE NOT Field_1 LIKE '%[!" & Chr(13) & "," & Chr(10) & "][!" & chr(10) & "]%'",,Chr(13)) 1;A B と AND を用いなくてもできるようですが・・・。ちょっと自信はありません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Private Sub Form_Current() Select Case ID Case 1 Me.Field_1 = "A" & Chr(10) & "B" Case 2 Me.Field_1 = "A" & Chr(13) & "B" Case 3 Me.Field_1 = "A" & Chr(13) & Chr(10) & "B" Case Else End Select End Sub 結果は添付図の通りです。 ? DBSelect("SELECT * FROM Test_1 WHERE Field_1 LIKE '%" & Chr(10) & "%'",,Chr(13)) 1;A B 3;A B ? DBSelect("SELECT * FROM Test_1 WHERE Field_1 LIKE '%" & Chr(13) & Chr(10) & "%'",,Chr(13)) 3;A B 求めるのは、先のSQL文の結果からChr(13) Chr(10) を除外したそれ。 ? DBSelect("SELECT * FROM Test_1 WHERE Field_1 LIKE '%" & Chr(10) & "%' AND NOT Field_1 LIKE '%" & Chr(13) & Chr(10) & "%'",,Chr(13)) 1;A B これで、目出度く目的達成です。 【注意】 %は*に置き換えてください。
補足
基本的なことがよく分からないので教えてください。 ? DBSelect("SELECT * FROM Test_1 WHERE Field_1 LIKE '%" & Chr(10) & "%'",,Chr(13)) は、ACCESSのVBEのイミディエイトウインドウに入力するのでしょうか。 実行するとSubまたはFunctionが定義されていないとか 修正候補:区切り記号または)のコンパイルエラーが発生するのですが? '%"と"%'"の部分ですが'*"と"*'"でよろしいのでしょうか。 よろしくお願いします。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは、No1です。 WHERE ((( [テーブル1].フィールド1) Not Like "*" & Chr(13) & Chr(10) & "*" And ( [テーブル1].フィールド1) Like "*" & Chr(10) & "*")); みたいに括弧で括って下さい。
お礼
教えていただきました式でできました。 ありがとうございました。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは WHERE [テーブル1].フィールド1 Not Like "*" & Chr(13) & Chr(10) & "*" And Like "*" & Chr(10) & "*" で、出来ますか?
補足
非常にすばやい回答ありがとうございます。 上記の式を確認してみたのですが、 クエリー式'SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Not Like "*" & Chr(13) & Chr(10) & "*" And Like "*" & Chr(10) & "*"の構文エラー:演算子がありません。 というエラーになります。 このコードの2つ目のLikeの箇所が反転表示されています。 念のため以下のことを確認してみました。 ・Not Like "*" & Chr(13) & Chr(10) & "*" のみであればOKです。 ・同様に、Like "*" & Chr(10) & "*"のみの場合もOKです。 ・ANDの前後を同じLike "*" & Chr(10) & "*"にすると 同様のエラーになります。 どうもLIKEとANDの併用に問題があるような感じがします。 よろしくお願いします。
お礼
こちらもできました。 ありがとうございました。