2010-12-07 100 views
0

我有一个Excel文档列A到J.我有列K到N与相关的数据,但没有对齐。Excel VBA匹配和排队

我需要将列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 

回答

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 
+0

大家好,这是伟大的我想我会尝试ADO,我必须通过代码,因为我有一些东西在此之前(在K-N填充值)。对于Remou来说只有一个问题,我永远不知道行数,所以我不能使用“Sheet2 $ A1:J5”和“Sheet2 $ K1:N5”,它的行数超过5行,并且会不时变化。我如何可以指定尽可能多的记录而不是5(类似于“recordCount”)。提前致谢。 – babasimana 2010-12-08 13:28:58

2

排序列KM,并将它们移到更远(如在XZ)

在列KM添加VLOOKUP()功能来拉从XZ数据基于列F

要使它漂亮的拉出#INDEX()函数的行#只有找到将数据从XZ复制到KL与MATCH()函数。否则返回一个空字符串。

列AJ用数据,用含有查找列的F值

柱XZ参照表与含有X的loopup匹配值

添加N列与=MATCH((Value in F),(XYZ Table),FALSE) 这产生无论是#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,这个工程。