vba用函数替换字符串

Posted

技术标签:

【中文标题】vba用函数替换字符串【英文标题】:vba replace strings with function 【发布时间】:2020-09-08 10:58:19 【问题描述】:

我有一个 Excel 表,其中有一列(列标签为“标签”)包含代表一些项目的字符串。我用 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”,但返回的是空白单元格)。有时当我重新打开工作表并重新运行程序时,它又会正常运行。

我应该改进我的功能以使其正常工作吗?

【问题讨论】:

【参考方案1】:

一种可能的解决方案是使用不区分大小写的 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 函数有效。

以上是关于vba用函数替换字符串的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA查找,用字符串中的日期替换纪元时间戳

用excel中的VBA,然后根据excel中单元格中内容,批量替换一个word的模板doc中的字符。字符有很多处。

excel中vba中Selection.Replace的用法,及参数的含义

vba如何判断字符串里面是包含某个字符?

Excel vba替换双引号怎么写?

vba 里面的split函数怎么实现多个分隔符