-1

セルの列 (この列を A と呼びましょう) を持つ Excel ファイルのマクロを作成しようとしています。各セルには、カンマで区切られた 4 ~ 5 個のプロジェクトの成果物と作業成果物が含まれており、タグ "成果物は「DEL」、作業成果物は「WKP」です。

マクロで次のことを達成したい:

  1. A列はそのままにしておきたいと思います。
  2. 列 A のセルから抽出する必要がある成果物用の列 B を作成します。
  3. 同様に、列 A のセルから抽出する必要がある作業成果物の列 C を作成します。

例を挙げましょう:

セル A1 に含まれているとします。

DEL1: DEL 1 プロジェクト プロセス、DEL2: DEL 2 プロジェクト スケジュール、WKP1: WKP 1 作業成果物ドキュメント

セル B1 を次のように表示します。

DEL1: DEL 1 プロジェクト プロセス、DEL2: DEL 2 プロジェクト スケジュール

セル C1 は次のようになります。

WKP1: WKP1 作業成果物ドキュメント

列 A のすべてのセルがセル A1 と同じ文字長になるわけではありません。ただし、DEL と WKP の両方が含まれます。

成果物と作業成果物の名前の長さが異なることを考えると、単純に列 A をコピーして TextToColumn を実行して分割することはできません。

これまでのところ、私が思いついたアプローチは、列 A を列 B にコピーし、成果物を保持して作業成果物を削除しようとすることです。

ご覧のとおり、これには、「WKP」の前のコンマ (",") とスペース (" ") で始まり、問題の成果物の最後の文字で終わる文字列の部分を削除する必要があります ( DEL の直後に WKP が記述されているように見えるため、この場合は文字列全体の最後の文字になります)。

各セル範囲内でテキスト「WKP」を見つけて削除できるマクロを作成することはできますが、その直後にあるものを削除することはできません。つまり、セル 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 に答える