重写Sumproduct公式.删除或忽略alpha字符-已插入VBA



我决定重写我的问题,以简化我想要的内容。我在Stack上看到了我的第一篇关于我现在遇到的同样问题的帖子。就在那时,我将所有的INDIRECT添加到了这个原始问题中的代码中
使用替换、忽略和动态范围求和

我从来没能做到"*"链接的帖子中提到的通配符。也许让非英语Excel在这里发挥作用?

以最简单的形式,你能帮我重写这段代码吗(不起作用(:

Range("namedRange").FormulaR1C1 = "=SUMPRODUCT(SUBSTITUTE(R10C:R[-1]C,""S"",""""))"

要执行以下操作:

  1. 替换所有";S’es";用blank("4S"将在求和时读取"4"(
  2. 忽略所有空白单元格和包含"以外的其他文本的单元格;S〃"4T";应忽略
  3. 对范围内的数字求和
  4. (单元格值永远不会是"4SK",因此可以失败(

我可能可以写一个函数来完成以上所有操作。但现在我陷入了困境,我在谷歌上的搜索结果让我一无所知。任何帮助都将非常感谢

根据您编辑的问题进行编辑

我认为UDF维护起来会简单得多。

我使用了Regex,因为您的需求似乎在变化,这将允许在未来修改它时有更大的灵活性。

你所需要做的就是将你想要处理的范围作为函数的参数传递给它;您可以使用VBA或直接在工作表上执行此操作。

这是一个返回所有单元格之和的单元格,这些单元格要么是数字单元格,要么是单个S单元格。

如果一个小区中可能有多个S,则将.Global参数更改为True

它允许不连续的范围。

如果您的范围始终是连续的,则可以消除外循环。

Option Explicit
Function sumPlusS(rg As Range) As Long
Dim vData, w, s As String, a As Range
Dim mySum As Long
Const sPat As String = "S"

Dim RE As Object

Set RE = CreateObject("vbscript.regexp")
With RE
.Global = False 'looking only for a single letter, change to True if could have multiple S's
.ignorecase = False 'case sensitive
.Pattern = sPat
End With
'read into variant array for processing
For Each a In rg.Areas 'allow for non-contiguous ranges
vData = a
'iterate through the array and sum the values
For Each w In vData
s = RE.Replace(w, "")
If IsNumeric(s) Then mySum = mySum + Val(s)
Next w
Next a
sumPlusS = mySum

End Function

最新更新