我已经调整了一个VB宏来在值之下插入额外的行(参见" interval"在A列中)当出现重复的关联值实例时(参见" count"在列中) C)。更具体地说,当存在大于1的重复计数(0 =无实例,1 =单个实例)且具有特定时间间隔时,我想插入额外的行,以便有空间插入重复的值他们的出现顺序。
Excel数据的图片before execution,after execution。
以下是我一直在使用的代码,它似乎正在运行。但是,每次运行宏时它都会绘制一个错误代码。有人可以解释为什么这部分代码会触发错误,以及如何解决它?这是出现的错误代码:"运行时错误代码' 13'键入: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
谢谢!
P.S。这是我如何使用这个宏的轶事解释: 我正在将转录访谈中的话语从连续数据(话语开始时的毫秒时间戳)转换为5秒的时间间隔。有时,每5秒间隔会有不止一个话语,这需要额外的行来在给定的时间间隔内插入那些额外的话语。
答案 0 :(得分:2)
你的循环包括第1行:
LastRow To 1 Step -1
让To 2 Step -1
跳过标题。
那说......
您已将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
,因此{{1可能很好(仍然应该声明)。
假设范围的值可以强制转换为n
。
删除这些假设。
Integer
我建议使用32位整数类型(即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
)而不是Long
。