2016-11-15 20 views
0

Excelに接続するAccessデータベースがあります。私は、データ レコードセットの検索基準を使用してVBAでレコードを検索

  • ユーザーは、Excelのセル内の文字列データを入力するとMS Accessのテーブル名が10の以上の列を持つMyTableで、私たちはWorksheets("Sheet1").Cells(1, 1)
  • を想定してみましょう
    1. エクセル

      からレコードセットの検索条件を使用してレコードを検索する必要があります

      私は、マクロがcolumn7とcolumn10の一致する文字列をループし、3つの列(column1、column7、column10)の対応するレコードセットをWorksheets( "ALL")にコピーする必要があります。 3,3)等

    2. データ列7および列10は、1つのレコードセル内に500文字以上の文字を表示します。検索文字列は、複数のレコードセルに存在することがあります。したがって、出力は複数のレコードセットで検出されます。

    SQLクエリに加えて、instr関数の他のオプションはありますか?

    strSQL = "SELECT Qn_No, Categories, Page_Text FROM MyTable WHERE Categories = '" & str1 & "' or “&Page_Text &" 
    

    ご協力いただければ幸いです。事前に感謝します。

  • +0

    本当に良いフレーズが必要です。あなたに必要なものはあまり明確ではありません。 – Kelaref

    +0

    @Kelarefこれを調べてくれてありがとう、私はアクセスの1つのテーブルでレコードを検索し、Excelで出力を得る必要があります。ユーザーが「マネーマーケット」としてテキストを入力すると、マクロは1つのテーブルデータの2つの特定の列に「マネーマーケット」が表示されているレコードセットの出力をフェッチする必要があります。 – Manish

    答えて

    0

    これは動作するはずです。 アクセスファイルへのパスを入力することを忘れないでください。

    Sub test() 
    
    Dim p As String 'path of access file 
    Dim dbConn As Object, dbData As Object 
    Dim ws As Worksheet 'worksheet where results will be pasted 
    Dim s As String 'text searched 
    Dim sql As String 'select statement 
    Dim cs As String 'connection string 
    Dim v As Variant 'stores query result 
    
    
    s = Worksheets("Sheet1").Cells(1, 1) 
    Set ws = Worksheets("ALL") 
    
    sql = "SELECT Qn_No, Categories, Page_Text " & _ 
        "FROM MyTable " & _ 
        "WHERE Categories = '" & s & "' OR " & _ 
         "Page_Text = '" & s & "'" 
    
    '################################ 
    cs = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
        "Data Source=" & p & ";Persist Security Info=False;" 
    
    Set dbConn = CreateObject("ADODB.Connection") 
    Set dbData = CreateObject("ADODB.Recordset") 
    dbConn.ConnectionString = cs 
    dbConn.Open 
    With dbData 
        .ActiveConnection = dbConn 
        .Source = sql 
        .LockType = 1 
        .CursorType = 2 
        .Open 
    End With 
    'Connection to access ready 
    '############################### 
    
    On Error GoTo NoRecords 'no records 
    v = dbData.GetRows 
    On Error GoTo 0 
    
    'v is zero based array, an records are transposed 
    'Handle it as you wish 
    
    ws.Cells(1, 1).Resize(UBound(v, 1) + 1, UBound(v, 2) + 1).Value = v 
    GoTo Quitter 
    
    '###################### 
    NoRecords: 
        MsgBox ("No Records Found") 
    Quitter: 
        dbData.Close 
        Set dbData = Nothing 
        dbConn.Close 
        Set dbConn = Nothing 
    
    End Sub 
    
    +0

    兄弟ありがとう!私はこれを使用して、あなたにステータスを知らせます。 – Manish

    +0

    ADOはメモリリークを引き起こす可能性があることに注意してください。DAOを検討してください。http://stackoverflow.com/questions/14396627/insert-data-form-excel-to-access-2010-using-vba/14397496#14397496さらに、DAOは迅速かつアクセスのネイティブです。 – Fionnuala

    +0

    @Kelarefこれは何の構文エラーがありますか? <"&_ " [C_Inquiry] LIKE '%'&strSearch& "%" OR "&_ " [C_TD_Response] LIKE '% "&strSearch & "% '" – Manish

    関連する問題