在单元格等于特定值(VBA)的同时在表单中search查询

我试图编写一个代码来search列中的查询,同时在另一列中保持一定的值。

例如:只要列A = 100中的任何单元格,然后在列B中search“文本1”

当这个100变成200时,然后在列B中search“文本2”,等等,直到表格的最后一行。

这是我的代码:

Sub SearchQuery() Dim i As Long For i = 2 To Sheets("New Sheet").Cells(Rows.Count, 1).End(xlUp).Row 'Criteria search If Sheets("New Sheet").Cells(i, 1).Value = "40042710" Then If Sheets("New Sheet").Cells(i, 2).Value = "11:35:00 AM" Then 'Set the Cell value End If End If Next i End Sub 

当只有两个直接链接的值时, Scripting.Dictionary对象可以certificate是非常有用的。 dictionary.Exists(key)函数使得testing有效密钥变得简单。 类似的Scripting.Collection对象缺less这个function。

这里有一个粗略的片段,展示了如何使用它。 请注意,您需要设置对Microsoft Scripting Runtime的引用,或者使用后期绑定

 Sub Example() Dim keyRange As Range Dim valueRange As Range Dim keyCell As Range Dim valueCell As Range Dim searchKey As String Dim searchValue As String Dim noDuplicateSearches As Boolean: noDuplicateSearches = True Dim criteria As New Dictionary With criteria ' criteria as key-value pairs .Add "100", "Text 1" .Add "200", "Text 2" End With Set keyRange = Sheets(1).Columns(1).SpecialCells(xlCellTypeConstants) Set valueRange = Sheets(1).Columns(2).SpecialCells(xlCellTypeConstants) For Each keyCell In keyRange searchKey = keyCell.Value If criteria.Exists(searchKey) Then ' on a valid key searchValue = criteria(searchKey) For Each valueCell In valueRange If valueCell.Value = searchValue Then ' on a valid value Debug.Print "Found", searchValue, _ "using", searchKey, _ "at", valueCell.Address End If Next valueCell If noDuplicateSearches Then criteria.Remove searchKey End If Next keyCell End Sub 

当然,每次运行子程序时生成整个criteria字典远非最佳。 您可以select使用不同的子元素来初始化(或卸载!)字典而不是公用variables。

我假设你确切地知道你的search依赖于什么值。 我会使用类似下面的链接search列:

如何通过VBA代码Cells.Find在excel列中查找值

然后,我会按照Select Case来再次search任何你想要的东西。

以下链接是MSDNselect案例页面: https : //msdn.microsoft.com/en-us/library/cy37t14y.aspx

例如:search列A的值为100.如果存在,则相应地设置Cells.Find()参数。 如果在列A中找不到值100,则search200等。