我正在寻找一个函数来有条件地连接 Excel 中的一系列单元格。这个功能
Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, ConcatenateRange As Range, Optional Separator As String = ",") As Variant
Dim xResult As String
On Error Resume Next
If CriteriaRange.Count <> ConcatenateRange.Count Then
ConcatenateIf = CVErr(xlErrRef)
Exit Function
End If
For i = 1 To CriteriaRange.Count
If CriteriaRange.Cells(i).Value = Condition Then
xResult = xResult & Separator & ConcatenateRange.cells(i).Value
End If
For i = 1 To CriteriaRange.Count
Next i
If xResult <> "" Then
xResult = VBA.Mid(xResult, VBA.Len(Separator) + 1)
End If
ConcatenateIf = xResult
Exit Function
来自 https://www.extendoffice.com/documents/excel/2723-excel-concatenate-based-on-criteria.html只看了票。评论表明它对其他编码人员有效。
但是,当我将其粘贴到 Excel2016 中的 VBA 模块中时,会出现我无法弄清楚的语法错误。第7行的“Exit Function”可以通过删除“Function”来解决。最后调用“退出函数”不会注册为错误,但可以删除为多余的。但
If CriteriaRange.Cells(i).Value = Condition Then
突出显示为语法错误(以及匹配的“End If”)。如果我只是使用“If true Then”,错误不会消失,这表明查看前一行
For i = 1 To CriteriaRange.Count
我尝试了“For i = 1 To 8”,但这也不能解决问题。我就是看不出有什么问题?
除了有用的回复,这里是直接粘贴到 VBA 的屏幕截图
这是在 Word 中看到的“狡猾”空格字符的屏幕截图
最佳答案
编辑 2
正如 OP 发现的那样,从网站复制和粘贴会产生一堆不间断的空格:
在我的测试用例(Excel 2013、Win7)上,粘贴得很好,而且 Excel 不会出错。但是,OP 的安装(Excel 2016)无法处理它们。
要更改这些:
^s
(不间断空格,ChrW(160)
)到单个空格(
)。 原来的
我所要做的就是编译它:
For i=...
线Exit Function
在最后一行到 End Function
. 不过还没有测试过。您能否编辑您的问题以添加您正在尝试的测试用例?
编辑 @YowE3K 打败了我——你的问题的代码中有一些复制和粘贴错误。从网站上复制,你应该没问题!
关于excel - 从网站复制 Excel VBA 代码时出现意外的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924847/