我有一张Excel工作表,其中包含列中包含信息的行列表。 我还有一个参考表(或在同一张表中进一步复制),其中许多行也包含列中的字符串/值,格式相同。
项目表中A列中的许多行在参考区域中都有重复。
工作表将不时有不同的行,但列格式将始终相同。
我需要的宏功能必须执行以下操作:
检查第2行A列是否在同一列中的列表下方进行匹配(不会出现三元组)。 如果有的话,将列中E,F,G,H,I,J列中的单元格复制到第2行。
如果未找到重复项,或者复制并粘贴信息,请重复第3行等的处理,直至不再填充行。
那就是它。听起来很简单,但我还没弄清楚如何编写这个函数。
广泛的谷歌搜索没有给我一个类似的例子。 如果我错过了什么,请原谅我,但我试图找到类似的问题并且失败了。
我觉得解决这个问题并不是很难,所以希望有人可以提供帮助:)
修改
所以我设法解决了这个问题:
我将参考表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完成了这项工作。
谢谢大家!
答案 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完成了这项工作。
谢谢大家!