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

Excel VBA排序删行时报运行时错误'13'类型不匹配求助

VBA宏运行时错误13(类型不匹配)修复方案

原宏预期实现功能:

  • 对H列存储的p值进行升序排序
  • 删除所有p值>=0.05的对应行
  • 在I列逐行填充B列与E列的差值,规则为In = Bn - En(n为行号)
  • 最终按I列的差值内容完成升序排序

原代码执行到删除符合条件行的语句时中断,报错信息:

Run-time error '13':
Type mismatch(运行时错误'13':类型不匹配)


错误根因

原代码查找0.05分界点的Match逻辑存在边界漏洞:

  1. 第一次精确匹配查找仅能定位恰好等于0.05的单元格,如果H列不存在刚好等于0.05的p值,会直接返回错误值
  2. 第二次模糊匹配要求查找区域严格升序,且当H列所有p值都小于0.05时,依然会返回错误值
  3. 当变量m被赋值为错误值时,传入Cells方法作为行号参数会直接触发类型不匹配错误
  4. 原代码还存在隐藏逻辑问题:删除行后行号发生偏移,后续给I列填充公式的范围会出现错位

修复后完整代码

Sub sort1()
    Dim m As Long
    Dim lastRow As Long
    Dim i As Long

    With ActiveSheet
        ' 删除前6行冗余内容
        .Range("1:6").EntireRow.Delete Shift:=xlUp
        ' 给I列添加表头
        .Range("I1") = "diff"

        ' 第一步:按H列p值升序排序
        With .Range("A:I")
            .Sort Key1:=.Columns(8), Order1:=xlAscending, Header:=xlYes
        End With

        ' 定位H列最后一行有效数据
        lastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
        ' 默认所有p值都小于0.05,无需要删除的行
        m = lastRow + 1
        ' 逐行查找第一个p值>=0.05的行位置
        For i = 2 To lastRow
            If IsNumeric(.Cells(i, "H").Value) And .Cells(i, "H").Value >= 0.05 Then
                m = i
                Exit For
            End If
        Next i

        ' 存在符合删除条件的行时再执行删除操作
        If m <= lastRow Then
            .Range(.Cells(m, "A"), .Cells(.Rows.Count, "A")).EntireRow.Delete Shift:=xlUp
        End If

        ' 删除行后重新定位有效数据最后一行,避免公式填充范围错位
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        ' 给I列填充B-E的差值公式
        If lastRow >= 2 Then
            .Range("I2:I" & lastRow).FormulaR1C1 = "=RC[-7]-RC[-4]"
        End If
        
        ' 强制重算公式
        .Calculate

        ' 最后按I列差值升序排序
        With .Range("A:I")
            .Sort Key1:=.Columns(9), Order1:=xlAscending, Header:=xlYes
        End With
    End With
End Sub

修复说明

  • 替换不稳定的Match查找逻辑为逐行遍历判断,兼容「无恰好等于0.05的p值」「所有p值都小于0.05」「H列存在非数值内容」等边界场景
  • 增加删除前置判断,仅当存在符合条件的行时才执行删除操作,避免传入无效行号
  • 删除行后重新获取有效数据范围,解决原代码公式填充错位的问题
  • 调整变量类型为数值类型,从根源避免类型不匹配问题

内容的提问来源于stack exchange,提问作者Екатерина Самойлова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:54:03