下面给出的示例中,我想使用VBA获得多对多的映射关系

input1:

RICEFW ID RTM ID 1 1 2 1 3 1 3 2 4 2 4 3 

input2:

 RTM ID DT ID 1 1 2 2 3 2 1 4 3 4 

输出会是这样的:

 RICEFW ID RTM ID DT ID 1 1 1 1 1 4 2 1 1 2 1 4 3 1 1 3 1 4 3 2 2 4 2 2 4 3 2 4 3 4 

行的顺序不一定是相同的,但应该有10个不同的RICEFW / RTM / DT组合。 我是新来的VBA你的帮助将非常感激。

您可以使用Excel的ADO 。

 Dim cn As Object Dim rs As Object Dim strFile As String Dim strCon As String Dim strSQL As String Dim i As Integer ''This is not the best way to refer to the workbook ''you want, but it is very convenient for notes ''It is probably best to use the name of the workbook. strFile = ActiveWorkbook.FullName ''Note that if HDR=No, F1,F2 etc are used for column names, ''if HDR=Yes, the names in the first row of the range ''can be used. '' ''This is the ACE connection string, you can get more ''here : http://www.connectionstrings.com/excel strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _ & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" ''Late binding, so no reference is needed Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Open strCon ''Sheet or range, or named range strSQL = "SELECT a.[RICEFW ID], a.[RTM ID], b.[DT ID]" _ & "FROM [Sheet5$A1:D7] a INNER JOIN [Sheet5$D1:E6] b " _ & "ON a.[RTM ID] = b.[RTM ID] " _ & "ORDER BY a.[RICEFW ID], a.[RTM ID]" rs.Open strSQL, cn, 3, 3 ''Pick a suitable empty worksheet for the results For i = 0 To rs.Fields.Count - 1 Worksheets("Sheet5").Cells(1, i + 7) = rs(i).Name Next Worksheets("Sheet5").Cells(2, 7).CopyFromRecordset rs ''Tidy up rs.Close Set rs = Nothing cn.Close Set cn = Nothing