Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Vba 如何修改此脚本以适应不同的情况?_Vba_Excel_String Comparison - Fatal编程技术网

Vba 如何修改此脚本以适应不同的情况?

Vba 如何修改此脚本以适应不同的情况?,vba,excel,string-comparison,Vba,Excel,String Comparison,我编写了一个VBA脚本,它在一列中搜索字符串,并在另一列中返回匹配项。重点是按SKU将项目编号与其产品形象相匹配。问题是,如果项目编号的大小写与图像的大小写不同,则会失败。脚本如下: Sub Test() Dim NA As Long, NC As Long, v As String, I As Long, J As Long Dim v2 As String NA = Cells(Rows.Count, "A").End(xlUp).Row NC = Cells

我编写了一个VBA脚本,它在一列中搜索字符串,并在另一列中返回匹配项。重点是按SKU将项目编号与其产品形象相匹配。问题是,如果项目编号的大小写与图像的大小写不同,则会失败。脚本如下:

Sub Test()
    Dim NA As Long, NC As Long, v As String, I As Long, J As Long
    Dim v2 As String
    NA = Cells(Rows.Count, "A").End(xlUp).Row
    NC = Cells(Rows.Count, "C").End(xlUp).Row
    For I = 2 To NA
        v = Cells(I, "A").Value
        v2 = ""
        For J = 2 To NC
            If InStr(Cells(J, "C").Value, v) > 0 Then
                v2 = v2 & ";" & Cells(J, "C").Value
            End If
        Next J
        Cells(I, "A").Offset(0, 1).Value = Mid(v2,2)
    Next I
End Sub

我如何解释不同的情况?有没有解决这个问题的方法?

非常简单,只需将其转换为小写:

Sub Test()
    Dim NA As Long, NC As Long, v As String, I As Long, J As Long
    Dim v2 As String
    NA = Cells(Rows.Count, "A").End(xlUp).Row
    NC = Cells(Rows.Count, "C").End(xlUp).Row
    For I = 2 To NA
        v = LCase(Cells(I, "A").Value)
        v2 = ""
        For J = 2 To NC
            If InStr(LCase(Cells(J, "C").Value), v) > 0 Then
                v2 = v2 & ";" & Cells(J, "C").Value
            End If
        Next J
        Cells(I, "A").Offset(0, 1).Value = Mid(v2,2)
    Next I
End Sub
我只是拿了你的代码样本,把
v
单元格(J,“C”)的大小写转换为小写。Value

我没有测试这个,所以我不能保证功能完美无缺


您还可以使用

选项比较文本


这将完全关闭区分大小写功能(因此您不需要
LCase(…)

只需使用的
vbTextCompare
选项即可

[vbTextCompare]根据应用程序当前区域性信息确定的不区分大小写的文本排序顺序执行文本比较


我在回答的末尾添加了另一种可能性使用
选项比较文本有点危险和混乱,因为它会影响整个模块。这可能不可取。不过,这两种解决方案都应该有效+1@RubberDuck对的我假设该模块中没有其他子模块或函数。不过,突出显示这一点很好。我还建议尽可能使用$version函数。它们的运行速度比同一函数的非$version稍快。e、 g.如果仪表(LCase$(单元格(J,“C”).值,v)>0然后我不得不接受这个答案,因为它是第一个答案,抱歉@RubberDuck!不客气!我知道你还没有代表投票,但请务必投票给有用的答案。这是我们在这里表示感谢的方式。我忘了InStr中的可选参数,所以这应该是可能的解决方案列表的结尾:)@橡胶狗:嗯。。我在if条件下得到一个类型不匹配错误。有什么想法吗?
If InStr(1, Cells(J, "C").Value, v, vbTextCompare) > 0 Then
    v2 = v2 & ";" & Cells(J, "C").Value
End If