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

Excel VBA查找含%符号单元格时出现Run Time Error 91的解决问询

Excel VBA Run Time Error 91 解决思路

错误原因

Run Time Error 91 是因为Find方法未找到匹配项、返回了Nothing,你直接访问.Row属性触发了错误。根本问题在于:
Find默认查找的是单元格的实际值,而非格式化后的显示文本。你给D4设置了NumberFormat = "0.00\%",让它显示为80.00%,但单元格实际值是80(由(4/5)*100计算得出),所以Find(What:="%")找不到任何匹配项。

解决方案

根据你的需求,分两种场景处理:

场景1:查找应用了百分比格式的单元格

如果你要找的是设置了百分比格式的行,不用搜索%符号,直接匹配单元格格式:

Dim a As Integer
Dim b As Integer
Dim i As Integer
Dim foundCell As Range

a = 4
b = 5

Worksheets(1).Range("D4") = (a / b) * 100
Worksheets(1).Range("D4").NumberFormat = "0.00\%"

' 设置查找的格式
Application.FindFormat.NumberFormat = "0.00\%"
' 查找应用该格式的单元格
Set foundCell = Worksheets(1).Range("D:D").Find(What:="", _
    After:=Worksheets(1).Range("D1"), _
    LookAt:=xlPart, _
    SearchDirection:=xlNext, _
    SearchFormat:=True)

' 先判断是否找到再赋值
If Not foundCell Is Nothing Then
    i = foundCell.Row
    Worksheets(1).Range("A1") = i
Else
    MsgBox "未找到应用百分比格式的单元格"
End If

' 重置查找格式,避免影响后续操作
Application.FindFormat.Clear

场景2:查找值中包含%的文本型单元格

如果你确实需要单元格值本身带有%(比如文本类型的80%),修改写入方式即可:

Dim a As Integer
Dim b As Integer
Dim i As Integer
Dim foundCell As Range

a = 4
b = 5

' 直接写入带%的文本,而非数值加格式
Worksheets(1).Range("D4") = (a / b) * 100 & "%"

' 查找包含%的单元格
Set foundCell = Worksheets(1).Range("D:D").Find(What:="%", _
    After:=Worksheets(1).Range("D1"), _
    LookAt:=xlPart, _
    SearchDirection:=xlNext)

If Not foundCell Is Nothing Then
    i = foundCell.Row
    Worksheets(1).Range("A1") = i
Else
    MsgBox "未找到包含%的单元格"
End If

关键注意事项

  • 永远先检查Find结果:用If Not foundCell Is Nothing Then判断是否找到匹配项,再访问.Row等属性,避免Error 91。
  • 明确工作表引用:原代码中After:=Range("D1")未指定工作表,可能引用当前活动表的单元格,最好写成After:=Worksheets(1).Range("D1"),避免歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:10:33