2014-09-11 6 views
0

У меня есть две первенствует структура таблицы и порядокПрисоединяйтесь две таблицы Excel

структура содержит

Product | Component | Order_Quantity 
A  | C1  | 1 
A  | C2  | 3 
A  | C3  | 3 
B  | C1  | 1 
B  | C4  | 2 
C  | C1  | 1 
D  | C2  | 3 
C  | C3  | 3 

порядка содержат

Order_n | Product | Quantity 
1  | A  | 10 
2  | B  | 10 
3  | A  | 10 
4  | C  | 10 
6  | B  | 10 

Как я могу присоединиться две таблицы в Excel 2013 (без питания pivot или другое надстройка), чтобы увидеть результат следующим образом:

Order_n | Product | Order_Qty | component | Quantity | Total_QTY 
1  | A  | 10  | C1  | 1  | 10 
1  | A  | 10  | C2  | 3  | 30 
1  | A  | 10  | C3  | 3  | 30 
2  | B  | 10  | C1  | 1  | 10 
2  | B  | 10  | C4  | 2  | 20 
3  | A  | 10  | C1  | 1  | 10 
3  | A  | 10  | C2  | 3  | 30 
3  | A  | 10  | C3  | 3  | 30 
4  | C  | 10  | C1  | 1  | 10 
4  | C  | 10  | C3  | 3  | 30 
6  | B  | 10  | C1  | 1  | 10 
6  | B  | 10  | C4  | 2  | 20 
+0

В Excel выберите Data-> FromOtherSources-> FromMicrosoftQuery. Выберите файлы Excel. Найдите файл Excel с этими двумя листами и импортируйте данные. там будет мастер, который позволит вам присоединиться к этим листам так, как вы этого хотите. – cha

ответ

1

Вам придется использовать VBA. Это должно работать ... Не удалось проверить все это, поэтому дайте мне знать, если это сработает.

Sub JoinTables() 

    Dim cn 
    Dim rs 
    Dim strFile As String 
    Dim strCon As String 
    Dim strSQL As String 
    Dim strTbl1 As String 
    Dim strTbl2 As String 
    Dim JoinField As String 
    Dim Table1Name As String 
    Dim Table2Name As String 
    Dim Table3Address As String 
    Dim Table1Worksheet As String 
    Dim Table2Worksheet As String 
    Dim Table3Worksheet As String 



    ' CHANGE THESE! 
    Table1Name = "structure": Table1Worksheet = "Sheet1" ' Name of table and name of the worksheet it is on 
    Table2Name = "order": Table2Worksheet = "Sheet1" 
    Table3Address = "A2": Table3Worksheet = "Sheet2" ' The result 
    JoinField = "Product" 
    ' ================================== 

    strFile = ThisWorkbook.FullName 
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _ 
    & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" 

    Set cn = CreateObject("ADODB.Connection") 
    Set rs = CreateObject("ADODB.Recordset") 

    cn.Open strCon 

    strTbl1 = " [" & Table1Worksheet & "$" & Replace(ThisWorkbook.Worksheets(Table1Worksheet).ListObjects(Table1Name).Range.AddressLocal, "$", "") & "] AS T1 " 
    strTbl2 = " [" & Table2Worksheet & "$" & Replace(ThisWorkbook.Worksheets(Table2Worksheet).ListObjects(Table2Name).Range.AddressLocal, "$", "") & "] AS T2 " 
    strSQL = "SELECT * FROM " & strTbl1 & " LEFT JOIN " & strTbl2 & " ON T1." & JoinField & "=T2." & JoinField 

    rs.Open strSQL, cn 

    ThisWorkbook.Worksheets(Table3Worksheet).Range(Table3Address).CopyFromRecordset rs 

    rs.Close 
    cn.Close 

End Sub 
+1

Зачем использовать VB, когда есть собственные функции для этого? – MattClarke

+0

Я стараюсь избегать VBA и надстройки и вместо этого использовать нативный fuctionality; как я могу сделать это по-своему? – user2253258

+0

В третий раз подряд это меня беспокоит, единственное замечание OP «это не совсем то, что я хотел», а не «спасибо вам за то время, которое вы взяли для меня» (вы не пишете что-то подобное просто 5 минут). Поясните, что вы хотите, и будьте более благодарны, пожалуйста. Ну, я закончил с предоставлением ответов на этом сайте. Чао. – Roemer

Смежные вопросы