在Excel VBA中匹配部分字符串

在Excel VBA中匹配部分字符串,excel,vba,Excel,Vba,我在一个VB宏中工作,其中AUT Excel包含5张工作表。在第3页中,我有6列 在第五页。我有3个输入框和3个输出框。 如果用户在inputbox1、inputbox2和InputBox3中输入第1列、第2列和第3列的部分字符串,则相应的结果应显示在outputbox1、outputbox2和outputbox3中 但是,如果输入字符串与具有更多值的数据进行比较,则代码不起作用。所以它就像是在if条件下硬编码这个值,这是不可行的 `text3 Like "*NB" Or text3 L

我在一个VB宏中工作,其中AUT Excel包含5张工作表。在第3页中,我有6列

在第五页。我有3个输入框和3个输出框。 如果用户在inputbox1、inputbox2和InputBox3中输入第1列、第2列和第3列的部分字符串,则相应的结果应显示在outputbox1、outputbox2和outputbox3中

但是,如果输入字符串与具有更多值的数据进行比较,则代码不起作用。所以它就像是在if条件下硬编码这个值,这是不可行的

    `text3 Like "*NB" Or text3 Like 
    "*NS" Or text3 Like "*NF" Or text3 Like "*PE")`
我从答案中得到了这个代码片段,它没有显示结果

`If (text1 Like ("*" & text4 & "*") And text2 Like ("*" & text5 & "*") And text3 Like ("*" & text6 & "*")) Then`

请告诉我是否需要在if条件中添加任何内容以匹配部分字符串

可能您需要像运算符一样的


为什么不改用
Find
FindNext
呢。这将找到第一个匹配
input1
的实例,然后测试
input2
input3
是否也满足要求。如果是这样,它会设置您想要的值。如果没有,它会找到下一个可能的匹配项

Set Sheet1 = Worksheets(1)

Dim c As Range
Dim firstAddress As String
With Sheet1.Columns(1)
    Set c = .Find(input1, lookat:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            If sheet3.Cells(c.Row, 2).Value2 = input2 And sheet3.Cells(c.Row, 3).Value2 = input3 Then
                Sheet5.Cells(13, 3).Value2 = Sheet1.Cells(c.Row, 5).Value2
                Sheet5.Cells(13, 6).Value2 = sheet2.Cells(c.Row, 6).Value2
                Sheet5.Cells(13, 9).Value2 = sheet3.Cells(c.Row, 4).Value2
                Exit Do
            Else
                Set c = .FindNext(c)
            End If
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Set Sheet1=工作表(1)
调光范围
将第一个地址设置为字符串
附页1.立柱(1)
Set c=.Find(input1,lookat:=xlPart)
如果不是,那么c什么都不是
firstAddress=c.地址
做
如果sheet3.单元格(c.Row,2).Value2=input2,sheet3.单元格(c.Row,3).Value2=input3,则
Sheet5.单元格(13,3).值2=Sheet1.单元格(c.行,5).值2
Sheet5.单元格(13,6).Value2=sheet2.单元格(c.Row,6).Value2
表5.单元格(13,9).值2=表3.单元格(c.行,4).值2
退出Do
其他的
集合c=.FindNext(c)
如果结束
循环而不是c为Nothing,c.Address为firstAddress
如果结束
以
您是否按以下方式进行了尝试

If (input1 Like ("*" & output4 & "*") And input2 Like ("*" & output5 & "*") And input3 Like ("*" & output6 & "*"))

您的问题需要更加具体(您甚至没有问任何问题),并且需要包含您的代码,因为堆栈溢出不是免费的代码编写服务。然后请阅读您的问题,添加您已经尝试过的代码,并向其提出特定问题。也可能帮助你提出一个好问题。编辑问题。请检查@PehWhat's error?我在编译过程中没有收到任何错误。但是如果用户输入部分字符串,代码将无法与原始字符串匹配。例如,在列a中的值是“额外投保、租赁房屋”。如果用户仅输入“附加”。它应该匹配并显示相应的结果,在编译时不会出现任何错误。上述代码无法将部分用户输入数据(如“附加”)与A列数据“附加投保、租赁房屋”匹配。我已与Like进行了检查。但不确定。它不起作用,但如果您使用Like运算符,您可以在代码显示中找到多个匹配记录-excel我收到一个对象必需的错误@Tom@newuser你现在能再试一次吗。代码现在运行正常,但输出未正确显示。请让我知道如果我坚持我的原始代码,那么我可以使用任何其他操作符来匹配零件字符串吗?因为它“显示不正确”,所以输出发生了什么情况?您可以尝试使用
Instr
函数来代替所有代码。我会稍后检查并让您知道,我已经检查了您提供的上述代码,但没有显示任何结果。我已经用输出和代码编辑了我的问题,以便您检查