我正在尝试为Excel文件创建一个宏,该文件有一列(我们称之为A列)单元格,每个单元格包含4到5个项目Deliverables&工作产品用逗号分隔,并通过标签“DEL”表示可交付成果和“WKP”表示工作产品。
我希望用宏来完成以下任务:
让我举个例子:
假设单元格A1包含
DEL1: DEL 1 Project Process, DEL2: DEL 2 Project Schedule, WKP1: WKP 1 Work Product Document
这就是我想要Cell B1的样子:
DEL1: DEL 1 Project Process, DEL2: DEL 2 Project Schedule
Cell C1看起来像这样:
WKP1: WKP1 Work Product Document
请注意,并非Col A中的所有单元格都与Cell A1完全相同。但它们将同时包含DEL和WKP。
鉴于Deliverables和Work Products的名称长度不同,我不能简单地复制Col A并运行TextToColumn以便拆分它。
到目前为止,我提出的方法是将Col A复制到Col B,保留Deliverables并尝试删除Work Products。
如您所见,这需要删除以“WKP”前面的逗号(“,”)和空格(“”)开头的字符串部分,并以相关工作产品的最后一个字符结束(在这种情况下,它将是整个字符串本身的最后一个字符,因为看起来在DELs之后就提到了WKP)。
虽然我能够写一个宏,但是可以在每个单元格范围内找到文本“WKP”并删除它,我无法删除它之后的内容。换句话说,我只能为Cell B1产生这个:
DEL1: DEL 1 Project Process, DEL2: DEL 2 Project Schedule, 1: 1 Work Product Document
有人可以帮我写宏来做这件事吗?如果语法也被解释,我将不胜感激。
谢谢!
答案 0 :(得分:1)
如果数据的布局使DEL
(可交付物)始终列在WKP
(工作产品)之前,则无需VBA。
这是非vba解决方案:
假设数据是A列,请将此公式放在B1
中=LEFT(A1,FIND(", WKP1",A1)-1)
这在C1
中=RIGHT(A1,LEN(A1)-FIND(", WKP1",A1)-1)
然后向下拖。
答案 1 :(得分:0)
这应该可以胜任。使用B1中的=WKP_DEL(A1,"DEL")
和C1中的=WKP_DEL(A1,"WKP")
来调用它。
Function WKP_DEL(str As String, DelOrWkp As String) As String
Dim V() As String
Dim SubStr As Variant
Dim WKPs As String
Dim DELs As String
WKP_DEL = ""
' Split the string into an array
V = Split(str, ",")
' Loop through the array adding WKPs to the WKPs string and DELs to the DELs string
For Each SubStr In V
If InStr(SubStr, "WKP") > 0 Then
WKPs = WKPs & Trim(SubStr) & ", "
End If
If InStr(SubStr, "DEL") > 0 Then
DELs = DELs & Trim(SubStr) & ", "
End If
Next
' Remove the trailing ", " and return the required string
If DelOrWkp = "DEL" Then WKP_DEL = Left(DELs, Len(DELs) - 2)
If DelOrWkp = "WKP" Then WKP_DEL = Left(WKPs, Len(WKPs) - 2)
End Function