【发布时间】:2021-10-16 14:17:56
【问题描述】:
我有很多用代码编写的数据,我需要使其更具可读性。为此,我在vba中使用了replace,特别是因为有很多可能的代码需要删除或替换为不同的符号,我仍然需要添加更多可能的文本。
以下 UDF 有效,但每当我发现代码中可能有新的部分需要替换时,我必须编写另一个完整的 'Let#' 来弥补。我觉得有更好的方法来编写这个函数,所以我想知道是否有人可以帮忙。
Function Unit(Req_Header As String) As String
Dim Func As String
Dim Amount As String
Func = AkeFind(Req_Header) 'AkeFind is a different UDF that looks up the correct string in a dataset (and returns as a string)
Dim LetA As String
Dim LetB As String
Dim LetC As String
Dim LetD As String
Dim LetE As String
Dim LetF As String
LetA = Replace(Func, "formaat_papier_", "")
LetB = Replace(LetA, "motief_", "")
LetC = Replace(LetB, "materiaal_", "")
LetD = Replace(LetC, "vorm_", "")
LetE = Replace(LetD, "_", " ")
LetF = Replace(LetE, "•", "-")
Amount = LetF
Select Case Amount
Case "CENTIMETER", "Centimeter", "centimeter"
Unit = "cm"
Case "MILLIMETER", "Millimeter", "millimeter"
Unit = "mm"
Case "METER", "Meter", "meter"
Unit = "m"
Case "CENTILITER", "Centiliter", "centiliter"
Unit = "cl"
Case "MILLILITER", "Milliliter", "milliliter"
Unit = "ml"
Case "LITER", "Liter", "liter"
Unit = "l"
Case "KILOGRAM", "Kilogram", "kilogram"
Unit = "kg"
Case "MILLIGRAM", "Milligram", "milligram"
Unit = "mg"
Case "GRAM", "Gram", "gram"
Unit = "g"
Case "PIECE", "Piece", "piece"
Unit = "Stuks"
Case "plastic", "kunstof"
Unit = "Kunststof"
Case "metaal", "staal"
Unit = "Metaal"
Case Else
Unit = Amount
End Select
End Function
【问题讨论】:
-
我建议您使用工作表中的表格来替换和替换它们,然后循环遍历它。注意:您不需要使用
Let,也不需要为每次替换的结果使用单独的变量。 -
您的
Select Case也可以简化,这样您就不需要检查每个案例:Select Case LCase$(Amount) ... Case "centimeter" ... Case "millimeter" -
@Rory 公平地说,OP 没有使用 Let... 变量名刚刚以 Let 开头。当我看到 Let 时,我总是会想起 Sinclair 和 BBC Basic。 :)
-
@DarrenBartrup-Cook 我需要测试一下我的眼睛! :)
标签: excel vba replace case user-defined-functions