我正在尝试创建一个vba函数来替换单元格值中的多个字符。我现在将此函数称为“ TestFunction”。该功能的目的是解析数据中的非法字符以使其能够使用,并且解析后原始数据需要保留在其自己的列中。

我已经粘贴了我的代码和表格作为参考。

excel - 如何创建函数以接受串联的源值-Excel VBA-LMLPHP

要使用该功能,我想在数据所在的同一行的帮助器列上使用=TestFunction(...)。该代码适用于单个引用,例如=TestFunction(A1),但是在尝试传递级联引用时,例如=TestFunction(A1&A2)它返回#VALUE!

我已经尝试修复了一段时间,但没有成功。我可以在连接数据所在的位置创建另一个帮助程序列,但我真的很想让此功能在没有附加列的情况下工作。

有人知道这是否有可能实现吗?

参考代码:

Function TestFunction(CellContents As Range) As String
  Dim CellTextReplaced As String
  Dim char As Variant
  ' Characters to be replaced with "|" as delimiter
  Const SpecialCharacters As String = ".|,|!| |/|\|+|-|@|&"

  ' Replace all special characters
  CellTextReplaced = CellContents.Value
    For Each char In Split(SpecialCharacters, "|")
      CellTextReplaced = Replace(CellTextReplaced, char, "")
    Next
  ' Output

  TestFunction = CellTextReplaced
End Function


参考表:

  |   A    |    B     |        C           |          D           |
-------------------------------------------------------------------
1 | .test  |   .test  |  =TestFunction(A1) | =TestFunction(A1&B1) |
2 | ,test  |   ,test  |  =TestFunction(A2) | =TestFunction(A2&B2) |
3 | test-  |   test-  |  =TestFunction(A3) | =TestFunction(A3&B3) |
4 | /test\ |   /test\ |  =TestFunction(A4) | =TestFunction(A4&B4) |

最佳答案

问题是您的函数TestFunction(CellContents As Range)正在等待Range,但是A1&B1实际上是String,因为与&的连接将两个范围A1B1的值转换为字符串。

我建议进行以下改进:

Option Explicit

Public Function TestFunction(ByVal CellContents As String) As String
    Const SpecialCharacters As String = ".,! /\+-@&"

    Dim iChar As Long
    For iChar = 1 To Len(SpecialCharacters)
        CellContents = Replace$(CellContents, Mid$(SpecialCharacters, iChar, 1), "")
    Next iChar

    TestFunction = CellContents
End Function

10-05 23:09