SQL в VBA правое соединение без данных из первой таблицы - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь объединить данные из нескольких рабочих книг и использовать их в текущей рабочей книге вместо функции VLOOKUP.Поэтому я не хочу возвращать ключевой столбец, только те, которые соответствуют критериям в ключевом столбце в текущей книге.

Я получил «Синтаксическая ошибка в предложении FROM».

Все работает нормально без «RIGHT JOIN»" часть.Я использую ADO.

    "SELECT t1.number " & _
    "FROM" & _
        "(SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Src1.xlsm' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
        "UNION ALL " & _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Src2.xlsb' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']" & _
        "UNION ALL " & _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Src2.xlsb' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']) t1" & _
    "RIGHT JOIN [Sheet1$] " & _
        "IN '" & ThisWorkbook.FullName & "' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] t2 ON t2.key = t1.key;"

Данные выглядят как

ThisWorkbook.Fullname:

key | someColumns | number 
k1  | somedata    |
k3  | somedata    |
k5  | somedata    |

\ Src1.xlsm (также Src2):

key | number
k1  | 15
k2  | 11
k3  | 8
k4  | 16
k5  | 7

Вероятный результат в Thisworkbook.fullname

key | someColumns | number 
k1  | somedata    | 15
k3  | somedata    | 8
k5  | somedata    | 7

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте

Dim Ws As Worksheet
Dim Rs As Object
Sub getRs(strSQL As String)
    Dim strConn As String
    Dim i As Integer

    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & ThisWorkbook.FullName & ";" & _
            "Extended Properties=Excel 12.0;"

    Set Rs = CreateObject("ADODB.Recordset")
    Rs.Open strSQL, strConn

End Sub
Sub test()
    Dim strQuery As String

   strQuery = "SELECT t1.number " & _
    "FROM [Sheet1$] as t2 LEFT JOIN " & _
        "(SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Src1.xlsm' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
        "UNION ALL " & _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Src2.xlsb' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']) as t1 " & _
        "ON t1.key = t2.key Where not isnull(t2.key) "


    getRs strQuery
    Range("c2").CopyFromRecordset Rs
    Rs.Close
    Set Rs = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...