vba用函数替换字符串

vba用函数替换字符串,vba,string,user-defined-functions,Vba,String,User Defined Functions,我有一个Excel工作表,其中有一列(列标签为“label”),其中包含表示某些项的字符串。我使用UDF编写了一个过程,将列单元格中的字符串转换为适合后续任务的字符串 Sub change_label() Dim i as long, Label as long, LR As long, Cel As Range, rng As Range, WS As Worksheet Set WS = ThisWorkbook.Worksheets("Scope") Label =

我有一个Excel工作表,其中有一列(列标签为“label”),其中包含表示某些项的字符串。我使用UDF编写了一个过程,将列单元格中的字符串转换为适合后续任务的字符串

Sub change_label()

Dim i as long, Label as long, LR As long, Cel As Range, rng As Range, WS As Worksheet
Set WS = ThisWorkbook.Worksheets("Scope")

Label = WorksheetFunction.Match("Label", WS.Rows(1), 0)
LR = WS.Cells(WS.Rows.Count, Label).End(xlUp).Row
Set rng = WS.Range(Cells(2, Label), Cells(LR, Label))

For Each Cel In rng
Cel.Value = ChLabel(Cel.Value)
Next Cel

End Sub

    Function ChLabel(CellRef As String) As String
    If CellRef Like "Printer*" Then ChLabel = "PRINTER"
    If CellRef Like "Ink*" Then ChLabel = "INK"
    If CellRef Like "Ribbon*" Then ChLabel = "RIBBON"
    If CellRef Like "A4Paper*" Then ChLabel = "A4" 
    End Function
但是,对于与函数中的条件匹配的字符串,该函数偶尔会返回空白单元格(例如,包含字符串“Printer-AX1283”的单元格应转换为“Printer”,但会返回空白单元格)。有时,当我重新打开工作表并重新运行程序时,它会再次正常运行


我是否应该改进函数以使其正常工作?

一个可能的解决方案是使用不区分大小写的
InStr
函数重写您的UDF

For txt in Array("Printer", "Ink", "Ribbon", "A4Paper")
  If InStr(CellRef, txt, vbTextCompare) = 1 Then
    ChLabel = UCase(txt)
    Exit For
  End If
Next txt

谢谢你的解决方案。InStr功能工作正常。