过滤单元以根据其内容进行串联

时间:2019-06-03 12:52:34

标签: excel vba

我正在使用一些.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个。

这种“过滤的连接器”是否可能,这有意义吗?我不确定从哪里开始,因为我非常新手(显然也不是一个逻辑思维家!)

非常感谢任何指针!

Desired Output

具有大写触发字的行APPLE,ORANGE和BANANA将不会被串联,因此结尾没有时间戳。理想情况下,D列中带有单词SCORE的行也不会被串联,但这没有那么重要!

0 个答案:

没有答案