我正在使用一些.CSV
文件,这些文件基本上包含转录的注释和时间戳的列表,我希望使用VB来串联其中的一些文件。我已经生成了一个脚本,该脚本通过记录宏,谷歌搜索和搜索堆栈溢出来实现这种“长远的发展”,但是运行需要一段时间,并且使用了一个相当愚蠢的过程。
我的脚本在做什么,基本上是将E和F列中的1500个条目连接到一些空单元格中,进行查找和替换以将空时间戳替换为空(并删除不必要的前导零),将所有内容复制回去,然后运行搜索,并在找到几个特定的触发词时删除最后7个字符(即,假设没有小时的时间戳。)。我的想法是,我希望大多数范围都可容纳,但在单元格包含某些触发词的情况下则不需要。
Dim SrchRng As Range, Cel As Range
'Concatenates Comments and timestamps into BA1
Range("BA1").Select
ActiveCell.FormulaR1C1 = _
"=CONCAT(RC[-48],"" ("",TEXT(RC[-47],""hh:mm:ss""),"")"")"
Range("BA1").AutoFill Destination:=Range("BA1:BA1500"), Type:=xlFillDefault
Range("BA1:BA1500").Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'Apply timestamp corrections
Selection.Replace What:="(00:00:00)", Replacement:=""
Selection.Replace What:="(00:", Replacement:="("
'Copy column BA1 back into data, then empty
Range("BA1:BA1500").Copy
Columns("E:E").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Columns("BA:BA").ClearContents
'Remove timestamps when certain words are found
Set SrchRng = Range("E1:E1500")
For Each Cel In SrchRng
If InStr(1, Cel.Value, "APPLE") > 0 Or _
InStr(1, Cel.Value, "ORANGE") > 0 Or _
InStr(1, Cel.Value, "BANANA") > 0 Or _
InStr(1, Cel.Value, "MANGO") > 0 Then
Cel = Left(Cel, Len(Cel) - 7)
End If
Next Cel
我想这样做的更好方法是首先过滤并仅合并适当的单元,而不是将所有单元串联然后在它们中搜索以删除事物(这也不是很可靠,因为时间戳较长)至少一个小时内的字符数超过7个。
这种“过滤的连接器”是否可能,这有意义吗?我不确定从哪里开始,因为我非常新手(显然也不是一个逻辑思维家!)
非常感谢任何指针!
具有大写触发字的行APPLE,ORANGE和BANANA将不会被串联,因此结尾没有时间戳。理想情况下,D列中带有单词SCORE的行也不会被串联,但这没有那么重要!