Excel - 合并匹配的行

时间:2018-02-05 14:02:23

标签: excel vba excel-vba

我有一张Excel工作表,其中包含列中包含信息的行列表。 我还有一个参考表(或在同一张表中进一步复制),其中许多行也包含列中的字符串/值,格式相同。

项目表中A列中的许多行在参考区域中都有重复。

工作表将不时有不同的行,但列格式将始终相同。

我需要的宏功能必须执行以下操作:

检查第2行A列是否在同一列中的列表下方进行匹配(不会出现三元组)。 如果有的话,将列中E,F,G,H,I,J列中的单元格复制到第2行。

如果未找到重复项,或者复制并粘贴信息,请重复第3行等的处理,直至不再填充行。

像这样:
enter image description here

那就是它。听起来很简单,但我还没弄清楚如何编写这个函数。

广泛的谷歌搜索没有给我一个类似的例子。 如果我错过了什么,请原谅我,但我试图找到类似的问题并且失败了。

我觉得解决这个问题并不是很难,所以希望有人可以提供帮助:)

修改

所以我设法解决了这个问题:

我将参考表I放在一个单独的工作簿中(将其命名为TagReference.xlsb)。

在项目工作簿单元格O1中添加了功能
= VLOOKUP(A1; [TagReference.xlsb] Sheet1!$ A:$ E; 5; false)
然后自动填充到1500行,这很充足。

这给了我列E的值。我将其作为值复制并粘贴到列中。

然后我对列F做了同样的事情 = VLOOKUP(A1; [TagReference.xlsb] Sheet1!$ A:$ F; 6; false
依此类推,直到填满所有栏目。

将所有内容记录为宏,现在它可以正常工作:)

我是Excel中的一个完整的菜鸟,所以我最需要一点开始,然后= VLOOKUP完成了这项工作。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

s = s& “从[ DATA $] AS a,[参考 $] AS b”

DATA是工作表的名称(Sheet包含列中包含信息的行列表)。

参考是工作表的名称(参考表)

Sub test()
    Dim s As String, Ws As Worksheet

    s = "SELECT a.name, a.device, a.address, a.datatype, b.rawmin, b.rawmax, b.engmin, b.engmax, b.unit, b.format, a.description, a.alarmoptions, a.trendoptions "
    s = s & "FROM [DATA$] AS a, [Reference$] AS b "
    s = s & "WHERE a.name = b.name "

    Set Ws = Sheets.Add

    ExeSQL Ws, s

End Sub

Sub ExeSQL(Ws As Worksheet, strSQL As String)

    Dim Rs As Object
    Dim strConn As String
    Dim i As Integer

    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & ThisWorkbook.FullName & ";" & _
            "Extended Properties=Excel 12.0;"


    Set Rs = CreateObject("ADODB.Recordset")
    Rs.Open strSQL, strConn

    If Not Rs.EOF Then
         With Ws
            .Range("a1").CurrentRegion.Clear
            For i = 0 To Rs.Fields.Count - 1
               .Cells(1, i + 1).Value = Rs.Fields(i).Name
            Next
            .Range("a" & 2).CopyFromRecordset Rs
        End With
    End If
    Rs.Close
    Set Rs = Nothing
End Sub

答案 1 :(得分:0)

所以我设法解决了这个问题:

我将参考表I放在一个单独的工作簿中(将其命名为TagReference.xlsb)。

在项目工作簿单元格O1中添加了该功能 = VLOOKUP(A1; [TagReference.xlsb] Sheet1!$ A:$ E; 5; false) 然后自动填充到1500行,这很充足。

这给了我列E的值。我将其作为值复制并粘贴到列中。

然后我对F列做了同样的事情 = VLOOKUP(A1; [TagReference.xlsb] Sheet1!$ A:$ F; 6; false 依此类推,直到填满所有栏目。

将所有内容记录为宏,现在它可以正常工作:)

我是Excel中的一个完整的菜鸟,所以我最需要一点开始,然后= VLOOKUP完成了这项工作。

谢谢大家!