Я работаю с некоторыми .CSV
файлами, которые в основном содержат список транскрибированных комментариев и временных меток, и я хочу использовать VB для объединения некоторых из них. Я сгенерировал сценарий, который делает это «в обход» путем записи макросов, поиска в Google и поиска переполнения стека, однако это требует времени для запуска и использует довольно глупый процесс.
То, что делает мой скрипт, в основном объединяет 1500 записей в столбцах E и F в несколько пустых ячеек, выполняет поиск и замену, чтобы заменить пустые временные метки ничем (и удалить ненужные ведущие нули), копировать все обратно и затем запускать поиск и удаление последних 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 не были бы объединены, и поэтому не имеют отметки времени в конце. Строки со словом SCORE в столбце D в идеале также не должны объединяться, но это не является приоритетом!