You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel VBA函数中使用Indirect函数整合工作表公式

解决Excel公式转VBA时Indirect引用失效的问题

已知A7单元格值为JohnWinstonLennon,以下两个Excel工作表公式可正常查找字符串中第2、3个大写字母的位置:

=SMALL(FIND(0,SUBSTITUTE(A7,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)  
=SMALL(FIND(0,SUBSTITUTE(A7,CHAR(ROW(INDIRECT("65:90"))),0)&0),3) 

将上述逻辑转写为VBA时,INDIRECT引用无法直接生效——原因是VBA对工作表函数的调用逻辑与单元格公式不同,且直接依赖INDIRECT并非最优方案。可以通过VBA原生逻辑实现相同功能,以下是自定义函数代码:

Function FindNthUpperCasePos(inputStr As String, nth As Integer) As Variant
    Dim posList As Collection
    Dim i As Integer
    Set posList = New Collection
    
    ' 遍历字符串,收集所有大写字母的位置
    For i = 1 To Len(inputStr)
        If Asc(Mid(inputStr, i, 1)) >= 65 And Asc(Mid(inputStr, i, 1)) <= 90 Then
            posList.Add i
        End If
    Next i
    
    ' 根据指定序号返回对应位置,无匹配则返回错误
    If nth <= posList.Count Then
        FindNthUpperCasePos = posList(nth)
    Else
        FindNthUpperCasePos = CVErr(xlErrValue)
    End If
End Function

使用说明

在Excel单元格中直接调用:

  • 查找第2个大写字母位置:=FindNthUpperCasePos(A7,2)
  • 查找第3个大写字母位置:=FindNthUpperCasePos(A7,3)

该函数通过原生VBA遍历字符判断大写,避免了对工作表函数的依赖,运行更高效且逻辑清晰。

内容的提问来源于stack exchange,提问作者RWB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:55:17