-1

我正在尝试为一个 Excel 文件创建一个宏,该文件有一列(我们称之为 A 列)单元格,每个单元格包含 4 到 5 个项目可交付成果和工作产品,以逗号分隔,并由标签标识“ DEL”表示可交付成果,“WKP”表示工作产品。

我希望通过宏来完成以下任务:

  1. 我想保持 A 列不变。
  2. 为 Deliverables 创建 B 列,需要从 Col A 中的单元格中提取
  3. 同样,为工作产品创建一个列 C,需要从列 A 中的单元格中提取

让我举个例子吧:

假设单元格 A1 包含

DEL1:DEL 1 项目流程,DEL2:DEL 2 项目进度表,WKP1:WKP 1 工作产品文档

这是我希望 Cell B1 的样子:

DEL1:DEL 1 项目流程,DEL2:DEL 2 项目进度表

单元格 C1 看起来像这样:

WKP1:WKP1 工作产品文档

请注意,并非 Col A 中的所有单元格的字符长度都与单元格 A1 完全相同。但它们将包含 DEL 和 WKP。

鉴于可交付成果和工作产品的名称长度不同,我不能简单地复制 Col A 并运行 TextToColumn 来拆分它。

到目前为止,我想出的方法是将 Col A 复制到 Col B,保留可交付成果并尝试删除工作产品。

如您所见,这需要删除字符串中以“WKP”前面的逗号(“,”)和空格(“”)开头并以相关工作产品的最后一个字符(在这种情况将是整个字符串本身的最后一个字符,因为似乎在 DEL 之后提到了 WKP)。

虽然我可以编写一个宏,可以在每个单元格范围内找到文本“WKP”并将其删除,但我无法删除紧随其后的内容。换句话说,我只能为 Cell B1 制作这个:

DEL1:DEL 1 项目流程,DEL2:DEL 2 项目进度表,1:1 工作产品文档

有人可以帮我编写宏来做到这一点吗?如果还解释了语法,我将不胜感激。

谢谢!

4

2 回答 2

1

如果数据的布局使得DEL(可交付成果)始终列在WKP(工作产品)之前,则不需要 VBA。

这是非vba解决方案:

假设数据是A列,把这个公式放在B1

=LEFT(A1,FIND(", WKP1",A1)-1)

而这在 C1

=RIGHT(A1,LEN(A1)-FIND(", WKP1",A1)-1)

然后向下拖动。

于 2012-10-11T18:15:45.017 回答
0

这应该可以完成这项工作。=WKP_DEL(A1,"DEL")在 B1 和=WKP_DEL(A1,"WKP")C1中调用它。

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
于 2012-10-11T18:11:00.060 回答