如何创建一个函数来接受串联的源值 - Excel VBA
Posted
技术标签:
【中文标题】如何创建一个函数来接受串联的源值 - Excel VBA【英文标题】:How to create a function to accept concatenated source value - Excel VBA 【发布时间】:2019-03-15 10:39:19 【问题描述】:我正在尝试创建一个 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) |
【问题讨论】:
连接起来的是字符串,不是范围。 将UDF()
改为接受String
而不是Range.
【参考方案1】:
问题在于您的函数 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
【讨论】:
以上是关于如何创建一个函数来接受串联的源值 - Excel VBA的主要内容,如果未能解决你的问题,请参考以下文章