首页 文章

根据相邻单元格中的值插入行数

提问于
浏览
0

我已经调整了一个VB宏来在值之下插入额外的行(参见A列中的“interval”),当出现重复的关联值实例时(参见C列中的“count”) . 更具体地说,当存在大于1的重复计数(0 =无实例,1 =单个实例)且具有特定时间间隔时,我想插入额外的行,以便有空间插入重复的值他们的外表顺序 .

Excel数据的图像before executionafter execution .

下面是我一直在使用的代码,它似乎正在工作 . 但是,每次运行宏时它都会绘制一个错误代码 . 有人可以解释为什么这部分代码会触发错误,以及如何解决它?这是出现的错误代码:"Run-time error code '13' Type: mismatch",并且调试指向这行代码: temp = Range("B" & n)

Sub dupeIntervals()
' insert new rows to match how many utterances are in a particular time interval
    Worksheets("Align").Activate
    Dim r, count As Range
    Dim LastRow As Long
    Dim temp As Integer
    Set r = Range("A:C")
    Set count = Range("B:B")
    LastRow = Range("B" & Rows.count).End(xlUp).Row
    For n = LastRow To 1 Step -1
        temp = Range("B" & n) ' << run-time error 13 / "type mismatch"
        If (temp > 1) Then
            Rows(n + 1 & ":" & n + temp - 1).Insert Shift:=xlDown
        End If
    Next n
End Sub

谢谢!

附:这里是关于我如何使用这个宏的轶事解释:我正在将转录访谈中的话语从连续数据(话语开始时的毫秒时间戳)转换为5秒的时间间隔 . 有时,每5秒间隔会有不止一个话语,这需要额外的行来在给定的间隔内插入那些额外的话语 .

1 回答

  • 2

    你的循环包括第1行:

    LastRow To 1 Step -1
    

    使 To 2 Step -1 跳过 Headers .


    那说......

    您已将 temp 声明为 Integer .

    Dim temp As Integer
    

    这意味着您分配给 temp 的任何内容必须与16位有符号整数值兼容,即-32677和32767之间的任何数值 .

    某些值将隐式转换为 Integer . 例如44.634将分配 temp 与45 .

    但有些值不会转换 .

    • 空字符串 "" (或任何非数字字符串)无法转换为 Integer .

    • 错误值(例如 #NA )无法转换为任何内容 .

    您的代码正在做出假设:

    temp = Range("B" & n) ' << run-time error 13 / "type mismatch"
    

    假设 ActiveSheet 是您要使用的工作表 . 它假设 n 有一个代表有效工作表行号的值 - 你没有声明 n ,所以它可能是 Variant/Long ,或 Variant/Integer ,所以 n 可能没问题(仍然应该声明) .

    假设范围的值可以强制转换为 Integer .

    删除这些假设 .

    Dim cellValue As Variant
    cellValue = ActiveSheet.Range("B" & n).Value
    
    If IsNumeric(cellValue) Then
        temp = CInt(cellValue)
    Else
        'skip. cell is invalid.
        Debug.Print "Row# " & n & " contains an invalid value."
    End If
    

    我建议使用32位整数类型(即 Long )而不是 Integer .

相关问题