作为来自应用程序的数据的最终进程转储的一部分,我操纵原始输出,以便我和我的团队可以进一步使用。
我目前手动更改此数据,但我一直在尝试使用excel宏来尝试执行相同的操作。我想要实现的一个基本例子是:
样本数据
创建一个宏来执行查找和替换以从原始数据中删除标记,并添加到单元格值以获得最终的数据集,例如' +单元格值+',
我对VBA没什么经验,并且从这个区域的一些快速搜索中找到的代码片段中将它们整合在一起。
UNION ALL
(
SELECT NULL AS employed_name
, nd.name AS department_name
FROM department nd
LEFT
JOIN employees_departments ne
ON ne.deparment_id = nd.id
WHERE ne.department_id IS NULL
)
但缺乏进一步调试的经验。
如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:1)
你可以使用这样的东西
Option Explicit
Public Sub ReplaceTags()
With Sheet1.UsedRange.Columns("B")
.Replace "<*>", "''" 'replaces "<Tag>" and "</Tag>"
.Replace "''", "',"
End With
End Sub
样品
答案 1 :(得分:1)
1)代码:
你可以尝试使用数组的非常快的方法:
Option Explicit
Public Sub RemoveTags()
Application.ScreenUpdating = False
Dim arr()
With ThisWorkbook.Worksheets("Sheet2") 'Change as required
arr = Intersect(.Range("A:A"), .UsedRange).Value
Dim i As Long
For i = LBound(arr, 1) To UBound(arr, 1)
If Not IsEmpty(arr(i, 1)) Then
On Error Resume Next
arr(i, 1) = Chr$(39) & Chr$(39) & Split(Split(arr(i, 1), ">")(1), "<")(0) & Chr$(39) & ","
On Error GoTo 0
Next i
.UsedRange.Columns("B") = arr
End With
Application.ScreenUpdating = True
End Sub
注意:
.UsedRange.Columns("A") = arr
如果您想要替换而不是B列。.UsedRange
可能会导致意外结果,因此您可能希望在范围内明确使用,例如arr = .Range(“A1:A15”)。值If Not IsEmpty
进行一些基本错误处理,如果搜索字词不存在,则会出现On Error Resume Next。2)公式示例:
使用公式,不能在细胞更换中,但只需要一个Chr(39),实际上是CHAR(39),在细胞中可见地显示“'”。在B1:
=CHAR(39)&MID(A1,FIND(">",A1,1)+1,LEN(A1)-FIND(">",A1,1)-(LEN(A1)-(FIND("<",A1,FIND(">",A1,1)+1)))-1)&CHAR(39)&","
注意:
您可以在上面针对FIND
转换SEARCH
。 FIND
区分大小写。 SEARCH
不区分大小写,可以包含通配符。在这种情况下无所谓但值得注意。如果找不到搜索字符串,您可以将整个事件包装在IFERROR
中以抑制错误。
修改强>
考虑到错误处理,根据@Paul Bica的回答,使用.Replace
可能更简单,请相信他,因为编码较少。