Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用instr从另一个表行中出现的源表行中查找3个匹配的单元格值_Excel_Search_Vba - Fatal编程技术网

Excel 使用instr从另一个表行中出现的源表行中查找3个匹配的单元格值

Excel 使用instr从另一个表行中出现的源表行中查找3个匹配的单元格值,excel,search,vba,Excel,Search,Vba,我对使用它进行编码非常陌生,下面出现的内容可能看起来非常可怕 这段代码目前所做的是在一个单独的工作表中对另一个表的一行中出现的所有3个必需值进行instr搜索(出于测试目的)。从该行复制A单元格值,将其粘贴到当前正在搜索的源表行旁边的单元格中,并用绿色填充对其进行颜色编码 我想让它做的是,注意在另一个工作表中有一个完整的其他数据表,并让它逐行搜索给定行中匹配的所有3个必需值 一旦它得到一个精确的命中,我希望它为已经确认为所有3个必需值匹配的行输出一个单元格值 另一个工作表中的表是动态的,因为它每

我对使用它进行编码非常陌生,下面出现的内容可能看起来非常可怕

这段代码目前所做的是在一个单独的工作表中对另一个表的一行中出现的所有3个必需值进行instr搜索(出于测试目的)。从该行复制A单元格值,将其粘贴到当前正在搜索的源表行旁边的单元格中,并用绿色填充对其进行颜色编码

我想让它做的是,注意在另一个工作表中有一个完整的其他数据表,并让它逐行搜索给定行中匹配的所有3个必需值

一旦它得到一个精确的命中,我希望它为已经确认为所有3个必需值匹配的行输出一个单元格值

另一个工作表中的表是动态的,因为它每天增加或减少总行数

有人能帮我吗

现在,这里是我的新手代码:

Private Sub Match_Click()
Dim i As Integer, row As Integer, narrative1 As String, transDate As Date, 
amount As Double, result As String
row = 2
i = 1
narrative1 = Worksheets("Sheet2").Range("D" & row)
transDate = Worksheets("Sheet2").Range("B" & row)
amount = Worksheets("Sheet2").Range("J" & row)


Do While Cells(i, 1).Value <> ""

If narrative1 > "" Then
  If InStr(1, UCase(Worksheets("Sheet1").Range("D22")), UCase(narrative1)) And 
  InStr(1, Worksheets("Sheet1").Range("B22"), transDate) And InStr(1, 
  Worksheets("Sheet1").Range("H22"), amount) Then
  result = Worksheets("Sheet1").Range("A3").Value
Else
  result = ""
End If
End If

i = i + 1

If Worksheets("Sheet2").Range("A" & row).Value = "" Then result = ""
Worksheets("Sheet2").Range("K" & row).Value = result

If result <> "" Then Worksheets("Sheet2").Range("K" & row).Interior.Color = 
RGB(198, 224, 180)

If Worksheets("Sheet2").Range("A" & row).Value = "" Then 
Worksheets("Sheet2").Range("K" & row).Interior.ColorIndex = xlNone

row = row + 1
narrative1 = Worksheets("Sheet2").Range("D" & row)
transDate = Worksheets("Sheet2").Range("B" & row)
amount = Worksheets("Sheet2").Range("J" & row)
Loop

End Sub
Private子匹配\u Click()
Dim i为整数,行为整数,旁白1为字符串,transDate为日期,
金额为双倍,结果为字符串
行=2
i=1
叙述1=工作表(“表2”)。范围(“D”和行)
transDate=工作表(“Sheet2”)。范围(“B”和行)
金额=工作表(“表2”)。范围(“J”和行)
执行While单元格(i,1)。值“”
如果叙述1>“那么
如果说明(1,UCase(工作表(“表1”)。范围(“D22”)),UCase(说明1))和
仪表(1,工作表(“表1”)。量程(“B22”)、转换日期)和仪表(1,
工作表(“表1”)。范围(“H22”)、金额)然后
结果=工作表(“表1”).范围(“A3”).值
其他的
result=“”
如果结束
如果结束
i=i+1
如果工作表(“Sheet2”).Range(“A”和row).Value=“”则结果=“”
工作表(“表2”)。范围(“K”和行)。值=结果
如果结果为“”,则工作表(“Sheet2”)。范围(“K”和行)。Interior.Color=
RGB(198224180)
如果工作表(“Sheet2”).Range(“A”和row).Value=”“,则
工作表(“Sheet2”).范围(“K”和行).Interior.ColorIndex=xlNone
行=行+1
叙述1=工作表(“表2”)。范围(“D”和行)
transDate=工作表(“Sheet2”)。范围(“B”和行)
金额=工作表(“表2”)。范围(“J”和行)
环
端接头

我认为下面的代码可以满足您的期望,我已经对它进行了注释,让您知道它在做什么(我还没有对它进行测试,但我非常肯定它可以完成任务):

Private子匹配\u Click()
Dim i As Long'这些应该是Long而不是Integer,因为Excel的单元格比Integer的值多。
暗排一样长
最后一排一样长
暗淡的最后一行2一样长
模糊叙述1作为字符串
将日期转换为字符串
金额加倍
将结果变暗为字符串
Dim val1为整数
Dim val2作为整数
Dim val3作为整数
LastRow2=工作表(“Sheet2”)。单元格(工作表(“Sheet2”)。行数,“A”)。结束(xlUp)。行’获取工作表2的最后一行
LastRow=工作表(“Sheet1”)。单元格(工作表(“Sheet1”)。行数,“A”)。结束(xlUp)。行’获取工作表1的最后一行
对于i=1到LastRow2'循环,从第1行到第2页的最后一行
叙述1=工作表(“表2”)。范围(“D”和“i”)获取要比较的变量
transDate=工作表(“表2”)。范围(“B”和“i”)
金额=工作表(“表2”)。范围(“J”和“i”)
对于x=1至最后一行,循环通过第1行至第1页的最后一行
如果是“1”,则
val1=InStr(工作表(“表1”)。单元格(x,4)。值,说明1)’第4号表示D列
val2=InStr(工作表(“表1”)。单元格(x,2)。值,转换日期)’第2号代表B列
val3=InStr(工作表(“表1”)。单元格(x,8)。值,金额)第8列表示H列
如果val1>0、val2>0和val3>0,则“如果三者都已找到
结果=工作表(“Sheet1”)。单元格(x,1)。值“获取结果”
工作表(“Sheet2”).Range(“K”和LastRow2+1).Value=result'将结果粘贴到Sheet2上的下一个自由行K列中
如果工作表(“Sheet2”).单元格(x,1).Value“”,则工作表(“Sheet2”).范围(“K”和LastRow2+1).Interior.ColorIndex=4
其他的
result=“”
如果结束
如果结束
下一个x
接下来我
端接头

你不需要使用
UCase
内部
Instr
在约会时使用Instr真的很难看而且不可靠……我会想办法的。数据表中包含值的列是否一致?另外,您要查找的三个值是否始终相同?搜索自表中的每一新行都有一组新的日期、金额和叙述文本。它正在逐行通过csv银行对账单文件。非常感谢!就我有限的理解而言,这看起来很有希望。明天将测试并报告。再次感谢:-)嗯。。。编译错误:下一个控制变量引用无效。在下一行,我需要下一个x。并没有像最初编码的那个样工作,因为结果已经到了表的底部,而不是搜索值所在的行。将调整,看看我是否可以让它正常运行。现在只看到你的下一个x答案。很抱歉重复评论。@JohnnyKelly,让我知道你进展如何,如果它不能按预期工作,你能分享一个电子表格样本,让我看看布局,然后更新我的答案吗?
Private Sub Match_Click()
Dim i As Long 'These should be Long instead of Integer, as Excel has more cells than Integer has values.
Dim row As Long
Dim LastRow As Long
Dim LastRow2 As Long
Dim narrative1 As String
Dim transDate As String
Dim amount As Double
Dim result As String
Dim val1 As Integer
Dim val2 As Integer
Dim val3 As Integer

LastRow2 = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, "A").End(xlUp).row 'get the lastrow of Sheet2
LastRow = Worksheets("Sheet1").Cells(Worksheets("Sheet1").Rows.Count, "A").End(xlUp).row 'get the lastrow of Sheet1

For i = 1 To LastRow2 'loop from row 1 to last on Sheet2
narrative1 = Worksheets("Sheet2").Range("D" & i) 'get the variables to compare
transDate = Worksheets("Sheet2").Range("B" & i)
amount = Worksheets("Sheet2").Range("J" & i)
    For x = 1 To LastRow ' loop through row 1 to last on Sheet1
        If narrative1 <> "" Then
            val1 = InStr(Worksheets("Sheet1").Cells(x, 4).Value, narrative1) 'number 4 represents column D
            val2 = InStr(Worksheets("Sheet1").Cells(x, 2).Value, transDate) 'number 2 represents column B
            val3 = InStr(Worksheets("Sheet1").Cells(x, 8).Value, amount) 'number 8 represents column H

            If val1 > 0 And val2 > 0 And val3 > 0 Then 'if all three have been found
                result = Worksheets("Sheet1").Cells(x, 1).Value 'get result
                Worksheets("Sheet2").Range("K" & LastRow2 + 1).Value = result 'paster result into next free row on Sheet2 column K
                If Worksheets("Sheet2").Cells(x, 1).Value <> "" Then Worksheets("Sheet2").Range("K" & LastRow2 + 1).Interior.ColorIndex = 4
            Else
                result = ""
            End If
        End If
     Next x
Next i
End Sub