2010-12-07 99 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,這個工程。