谷歌表格中如何对单元格区域批量调用自定义函数并求和
解决自定义函数批量求和的问题
你的PERTINENCE_CALCUL自定义函数目前仅支持单个单元格输入,无法直接处理单元格区域,所以直接用Somme(PERTINENCE_CALCUL(A2:A10))这类写法会失效。以下是三种可行的批量处理方案:
方案1:修改自定义函数支持区域输入
打开VBA编辑器(按Alt+F11),找到你的函数并替换为以下代码,让它能直接接收单元格区域并返回对应分数的数组:
Function PERTINENCE_CALCUL(rng As Range) As Variant Dim result() As Variant Dim cell As Range Dim rowIdx As Integer, colIdx As Integer ' 初始化结果数组,和输入区域尺寸一致 ReDim result(1 To rng.Rows.Count, 1 To rng.Columns.Count) For Each cell In rng rowIdx = cell.Row - rng.Row + 1 colIdx = cell.Column - rng.Column + 1 ' 用Select Case替代多层IF,逻辑更清晰 Select Case cell.Value Case "Tout à fait en désaccord": result(rowIdx, colIdx) = 0 Case "Plutôt en désaccord": result(rowIdx, colIdx) = 1 Case "Légèrement en désaccord": result(rowIdx, colIdx) = 2 Case "Légèrement en accord": result(rowIdx, colIdx) = 3 Case "Plutôt d'accord": result(rowIdx, colIdx) = 4 Case "Tout à fait d'accord": result(rowIdx, colIdx) = 5 Case Else: result(rowIdx, colIdx) = "ERREUR !!!" End Select Next cell PERTINENCE_CALCUL = result End Function
修改完成后,直接调用=Somme(PERTINENCE_CALCUL(A2:A10))就能批量计算并求和。
方案2:用内置函数配合原函数(无需修改)
如果不想改动原函数,针对不同Excel版本可以用以下写法:
- Excel 365/2021及以上:用
MAP遍历区域,逐个调用自定义函数后求和:=Somme(MAP(A2:A10; LAMBDA(x; PERTINENCE_CALCUL(x)))) - 旧版Excel:使用数组公式(输入后按
Ctrl+Shift+Enter确认生效):
其中=Somme(IFERROR(PERTINENCE_CALCUL(A2:A10);0))IFERROR是为了避免"ERREUR!!!"导致求和失败,可根据需求调整。
方案3:用SUMPRODUCT直接求和
同样无需修改原函数,SUMPRODUCT能自动处理区域数组:
=SUMPRODUCT(IFERROR(PERTINENCE_CALCUL(A2:A10);0))
这个写法不需要按数组公式快捷键,兼容性更好。
内容的提问来源于stack exchange,提问作者xavierx77
相关产品推荐
相关产品推荐

