こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessのクエリでvbLfのみ抽出するには

Access2010のクエリー(SQL)で

vbLfかvbCrLfが含まれているレコードを抽出するには、
SELECT [テーブル1].*
FROM テーブル1
WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*";

vbLfが含まれているレコードは抽出せず、
vbCrLfが含まれているレコードだけを抽出するには、
SELECT [テーブル1].*
FROM テーブル1
WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*";

でよいと思いますが、

vbCrLfが含まれているレコードは抽出せず、
vbLfが含まれているレコードだけを抽出するには、
どのように記述すればよいのでしょうか。

よろしくお願いします。

投稿日時 - 2016-07-26 11:42:48

QNo.9206718

困ってます

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

こんにちは、No1です
括弧というかフィールド名が足りなかったです。
WHERE [テーブル1].フィールド1 Not Like "*" & Chr(13) & Chr(10) & "*" And [テーブル1].フィールド1 Like "*" & Chr(10) & "*"

投稿日時 - 2016-07-26 13:36:51

お礼

こちらもできました。
ありがとうございました。

投稿日時 - 2016-07-26 14:59:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(6)

ANo.6

【補足】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なのだ?」と疑問が・・・。でも、それ以上は追求していません。質問者も考えてください。

投稿日時 - 2016-07-26 22:44:08

お礼

>回答では、SQL文はテスト済みってのを伝える為に
>次のDBSelect()を使っています。

DBSelect()はユーザー関数だったんですね。

>回答では、目的通りの結果を得ていますが・・・。
>書き終えて、「ウン!なぜOKなのだ?」と疑問が・・・。
>でも、それ以上は追求していません。
>質問者も考えてください。

私も回答No.4に関して
お聞きしたかったことがあったのですが
回答No.3でしたかったことが解決しましたので
時間の取れたときに自分で考えてみます。
ありがとうございました。

投稿日時 - 2016-07-27 08:42:52

ANo.5

【補足】なお

? DBSelect("SELECT * FROM Test_1 WHERE NOT Field_1 LIKE '%[!" & Chr(13) & "," & Chr(10) & "][!" & chr(10) & "]%'",,Chr(13))
1;A
B

と AND を用いなくてもできるようですが・・・。ちょっと自信はありません。

投稿日時 - 2016-07-26 13:55:10

ANo.4

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

これで、目出度く目的達成です。

【注意】 %は*に置き換えてください。

投稿日時 - 2016-07-26 13:42:05

補足

基本的なことがよく分からないので教えてください。

? DBSelect("SELECT * FROM Test_1 WHERE Field_1 LIKE '%" & Chr(10) & "%'",,Chr(13))

は、ACCESSのVBEのイミディエイトウインドウに入力するのでしょうか。
実行するとSubまたはFunctionが定義されていないとか
修正候補:区切り記号または)のコンパイルエラーが発生するのですが?

'%"と"%'"の部分ですが'*"と"*'"でよろしいのでしょうか。

よろしくお願いします。

投稿日時 - 2016-07-26 16:28:36

ANo.2

こんにちは、No1です。
WHERE ((( [テーブル1].フィールド1) Not Like "*" & Chr(13) & Chr(10) & "*" And ( [テーブル1].フィールド1) Like "*" & Chr(10) & "*"));
みたいに括弧で括って下さい。

投稿日時 - 2016-07-26 13:27:46

お礼

教えていただきました式でできました。
ありがとうございました。

投稿日時 - 2016-07-26 14:40:29

ANo.1

こんにちは
WHERE [テーブル1].フィールド1 Not Like "*" & Chr(13) & Chr(10) & "*" And Like "*" & Chr(10) & "*"
で、出来ますか?

投稿日時 - 2016-07-26 11:54:34

補足

非常にすばやい回答ありがとうございます。

上記の式を確認してみたのですが、
クエリー式'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の併用に問題があるような感じがします。
よろしくお願いします。

投稿日時 - 2016-07-26 12:15:24

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-