vba - 从数据库中查找值,并将匹配值的列表获取到其他表

  显示原文与译文双语对照的内容
0 0

从列表中查找相应的光盘代码,并将它们复制到摘要表的DiscName列中。 一些实验名称将有多个光盘代码,所以当我运行宏时,它应该与实验室名称匹配。 任何帮助都将得到极大的赞赏。 不确定是否可以上传摘要工作表的图像,但我看起来像这样。


Col 1 col 2 col 3
Lab name Disc Name
(say abcd) xxxx
 yyyy
 zzzz
 pppp

这个列表看起来像这样。


Col 1 Col 2
Lab name Disc name
abcd xxxxx
abcd yyyyy
abcd zzzzz
abcd ppppp
bcda qqqqq
bcda rrrrr
bcda iiiii
bcda jjjjj
bcda kkkkk 

我刚整理好桌子,这样看起来更清楚了。 希望这有助于更好地理解我的查询。 感谢你的帮助。

我尝试了这个代码,但是我无法在摘要工作表的下一行之后写下下一个光盘名。 它重复相同的光盘名。 理想情况下,它应该继续填写在列表中显示的所有相关光盘名称的摘要表。

子 Vlooker ( )

Dim FindString fcomp cont") 范围内的每个fcomp的范围 Dim Rng 。范围("源比较范围的范围


FindString = fcomp


 With Sheets("list").Range("q2:q106") 'range of cells to search
 Set Rng =. Find(What:=FindString, _
 After:=.Cells(1), _
 LookIn:=xlValues, _
 LookAt:=xlWhole, _
 SearchOrder:=xlByRows, _
 SearchDirection:=xlPrevious, _
 MatchCase:=False)

 If Rng Is Nothing Then



 Else
 Do While fcomp = FindString
 fcomp.Offset(0, 1).Value = Rng.Offset(0, 1)
 fcomp.Offset(1, 1).Value = Rng.Offset(0, 1) 
 Loop

 End If
 End With

下一个 fcomp

结束子

这就是我想要真正的symple术语。


Go to List, Check A2. 
If list A2 matches with Summary A2 then 
go to summary b2
make summary b2 value = to list b2 value
then chekc next row in list
if found match with summary a2 then
go to summary, last actioned cell, go one row down and make value = to the value in column b in list against the matching cell
Repeat this process till all matches found for summary a2.
Start this process when ever value of summay a2 changes.

时间: 原作者:

0 0

这个函数将像你所要求的那样做一些事情。 将代码放入VBA编辑器中的新 MODULE 中。

确保第二个选项卡被称为"映射"( 或者更改代码) 。 这个选项卡应该有两个列,就像你在问题中所标识的那样。

然后将单元格B2设置为公式 =DisciplineLookup ( B1 ),你应该会看到查询的数据。 注意,你还必须在对齐选项卡上编辑列B 到"换行文本"的格式。

我不认为这就是你想要的,但它可以解决你的问题。 如果这不起作用,你可以能需要调查创建一个新选项卡,并在运行时将它的输出报告。

注意,如果你已经启用了自动计算,即使你更新基础数据,也可以能需要按CTRL+ALT+F9键重新计算所有。


Function DisciplineLookup(TheLabName As String) As String

 Dim objSheet As Worksheet, intUsedRows As Integer
 Set objSheet = Sheets("Mappings")
 intUsedRows = objSheet.UsedRange.Rows.Count

 'Get all of the relevant data into a VBA array.
 Dim objData() As Variant
 objData = objSheet.Range("A2","B" & CStr(intUsedRows)).Value
 Dim objDisciplines As New Collection


 'Find rows matching the passed parameter, and add them to a collection
 Dim intI As Integer
 For intI = 1 To intUsedRows - 1
 If objData(intI, 1) = TheLabName Then
 objDisciplines.Add objData(intI, 2)
 End If
 Next

 'Format the collection into a new concatenated string
 'Note this may be really slow if you have a lot of data
 ' If so, look into using an array and the JOIN function
 Dim strDisciplines As String, strDiscipline As Variant
 strDisciplines =""
 For Each strDiscipline In objDisciplines
 strDisciplines = strDisciplines & CStr(strDiscipline) & vbCrLf
 Next

 'trim trailing CRLF
 If Len(strDisciplines)> 0 Then
 strDisciplines = Left(strDisciplines, Len(strDisciplines) - 2)
 End If

 DisciplineLookup = strDisciplines

End Function

...