在单元格等于特定值(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等。