我有一个包含A到J列的Excel文档。我有K到N列的相关数据,但没有对齐。
我需要将F列中的值与K列中的值进行匹配,以便它们排成一行。当我移动K时,我必须将L,M,N一起移动。
我无法对A列到J列进行排序 - 它们必须保留在原位。
之前的例子:
A B C D E F G H I J K L M N
data data data data data record1 data data data data record3 data data data
data data data data data record2 data data data data record1 data data data
data data data data data record3 data data data data
data data data data data record4 data data data data
示例之后:
A B C D E F G H I J K L M N
data data data data data record1 data data data data record1 data data data
data data data data data record2 data data data data
data data data data data record3 data data data data record3 data data data
data data data data data record4 data data data data
答案 0 :(得分:5)
最简单的方法可能是ADO。
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j 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 Jet 4 connection string, you can get more
''here : http://www.connectionstrings.com/excel
strCon = "Provider=Microsoft.Jet.OLEDB.4.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
strSQL = "SELECT * " _
& "FROM [Sheet2$A1:J5] a " _
& "LEFT JOIN [Sheet2$K1:N5] b " _
& "ON a.F=b.k "
rs.Open strSQL, cn, 3, 3
''Pick a suitable empty worksheet for the results
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs
''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
答案 1 :(得分:2)
对列K-M进行排序并将它们移得更远(如在X-Z中)
在K-M列中添加VLOOKUP()
函数,根据F列从X-Z中提取数据。
要使用INDEX()
函数将#行拉出#行,并且只有在找到时才会使用MATCH()
函数将数据从X-Z复制到K-L。否则返回一个空字符串。
列A-J包含数据,列F包含查找值
带有参考表的X-Z列,其中X包含循环匹配值
使用=MATCH((Value in F),(XYZ Table),FALSE)
添加N列
这会生成#N/A
或行号
K栏=IF( NOT( ISNA(Value in N) ), INDEX((X Table), (Value in N) ), "")
L栏=IF( NOT( ISNA(Value in N) ), INDEX((Y Table), (Value in N) ), "")
M列=IF( NOT( ISNA(Value in N) ), INDEX((Z Table), (Value in N) ), "")
除非你想在VBA中这样做,否则这有效。