Excel VBA匹配和排列 [英] Excel VBA to match and line up rows

查看:120
本文介绍了Excel VBA匹配和排列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有A到J列的Excel文档。我有列K到N与相关数据,但不对齐。



我需要匹配值从值在列F中的值为列K,因此它们排成一行。当我换K时,我必须将L,M,N一起移动。



我不能排列A到J的列 - 它们必须保持原位。



之前的示例:

  ABCDEFGHIJKLMN 

数据数据数据数据记录1数据数据数据记录3数据数据数据

数据数据数据数据记录2数据数据数据数据记录1数据数据数据

数据数据数据数据数据记录3数据数据数据数据

数据数据数据数据数据记录4数据数据数据数据

示例:

  ABCDEFGHIJKLMN 

数据数据数据数据记录1数据数据数据记录1数据数据数据

数据数据数据数据数据记录2数据数据数据数据

数据数据数据数据数据记录3数据数据数据数据记录3数据数据数据

数据数据数据数据record4数据数据数据


解决方案

最简单的方法可能是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

''这不是最好的方法来引用工作簿
你想要,但它是非常方便的笔记
''最好使用工作簿的名称。

strFile = ActiveWorkbook.FullName

''请注意,如果HDR =否,F1,F2等用于列名称,
''如果HDR =是,可以使用范围
的第一行中的名称。
''这是Jet 4连接字符串,您可以在这里获得更多
':http://www.connectionstrings.com/excel

strCon =Provider = Microsoft.Jet.OLEDB.4.0; Data Source =& strFile _
& ;扩展属性=Excel 8.0; HDR =是; IMEX = 1;

''后期绑定,所以不需要引用

设置cn = CreateObject(ADODB.Connection)
设置rs = CreateObject(ADODB.Recordset )

cn.Open strCon

strSQL =SELECT *_
& FROM [Sheet2 $ A1:J5] a_
& LEFT JOIN [Sheet2 $ K1:N5] b_
& ON aF = bk

rs.Open strSQL,cn,3,3


'为结果选择合适的空工作表

工作表(Sheet3)。单元格(2,1).CopyFromRecordset rs

''整理
rs.Close
设置rs = Nothing
cn.Close
设置cn =没有


I have an Excel document with columns A to J. I have columns K to N with related data, but not aligned.

I need to match value from value in column F with value in column K so they are lined up. When I shift K, I have to shift L, M, N together.

I cannot sort columns A to J - they must remain in place.

Example before:

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

Example after:

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  

解决方案

The easiest way would probably be 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

这篇关于Excel VBA匹配和排列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆