我正在尝试创建一个vba函数来替换单元格值中的多个字符。我现在将此函数称为“ TestFunction”。该功能的目的是解析数据中的非法字符以使其能够使用,并且解析后原始数据需要保留在其自己的列中。
我已经粘贴了我的代码和表格作为参考。
要使用该功能,我想在数据所在的同一行的帮助器列上使用=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
,因为与&
的连接将两个范围A1
和B1
的值转换为字符串。
我建议进行以下改进:
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