Excel VBA для сопоставления и выравнивания строк - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть документ Excel со столбцами от A до J. У меня есть столбцы с 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  

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Самый простой способ, вероятно, будет 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
2 голосов
/ 07 декабря 2010

Сортировка столбцов K - M и перемещение их дальше (как в XZ)

В столбцах KM добавьте функцию VLOOKUP() для извлечения данных из XZ на основе столбца F.

Всделайте так, чтобы он вытащил строку # с помощью функции INDEX() и только в случае обнаружения скопируйте данные из XZ в KL с помощью функции MATCH().В противном случае вернуть пустую строку.

Столбцы AJ с данными, со столбцом F, содержащим значения поиска

Столбец XZ со справочной таблицей, где X содержит значения совпадения цикла

Добавитьдля столбца 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, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...