VBA での文字列操作

VBA での文字列操作

Excel のテキストを列に分割する機能のように、1 つの列を複数に分割する必要があります。ただし、少し問題があります。従来の区切り文字では機能しません。以下の文字列を検討してください。

Original: Domain\Domain Admins Domain2\User Group Domain3\Developers .....(And so on)
Required: Domain\Domain Admins | Domain2\User Group | Domain3\Developers .....(And so on)

必要な文字列内のパイプは、文字列の長さに応じてここで分割し、次の列にコピーする必要があることを意味します。

列 A に 506 行のリストがあります。列 B の "\" の出現を確認するために次の数式を使用しました。カウント範囲は 0 ~ 66 です。

=LEN(A2)-LEN(SUBSTITUTE(A2,"\",""))

ロジックに従ってコードを書くのに助けが必要です

  1. 文字列内の「\」を検索
  2. 「\」の直前のスペースを見つけて分割します

次のコードを使用しましたが、目的を達成できませんでした

Range("A1:A506").Select
Selection.TextToColumns 

ポイント 1 と 2 を念頭に置いたコードの作成にご協力ください。

答え1

要件とは異なるロジックを使用しましたが、これで解決するはずです。

あなたは空白の前の \ を見つけたいのですが、私のコードでは単にDomain(空白に注意してください) を探します。

Option Explicit

Sub DoThis()

Dim col As Integer
col = 65

Dim splitWord As String
splitWord = "Domain"

Dim row As Integer
row = 1

Do While (Range("A" & row).value <> "")

Dim value As String

value = Range("A" & row).value

Dim values() As String

values = Split(value, " " & splitWord)

Dim firstResult As String

Dim i As Integer

For i = 1 To UBound(values)

firstResult = values(0) ' not efficient but easier code to read

Range(Chr(col + i) & row).value = splitWord & values(i)

Next i

Range(Chr(col) & row).value = firstResult
row = row + 1
col = 65
Loop

End Sub

前に

ここに画像の説明を入力してください

ここに画像の説明を入力してください

正しいデータをコピーしていることを示すためにいくつかの単語を少し更新しましたが、あなたの例でもテスト済みであることにご注意ください。

このようなマクロは元に戻すことができないため、テストする前に必ずデータのバックアップを作成してください。

答え2

サブExtractBySlash()

Dim r 範囲として

Dim subS をバリアントとして

寸法 x 長さ

暗くなるまで

カウンターを暗くする

カウンター = 1

範囲内の各r("a1:a506")

subS = Split(r.Text, "\")

For x = LBound(subS) + 1 To UBound(subS)

    For y = Len(subS(x)) To 1 Step -1

        If Mid(subS(x), y, 1) = " " Then

            r.Offset(0, counter) = subS(x - 1) & "\" & Left(subS(x), y)

            subS(x) = Trim(Right(subS(x), Len(subS(x)) - y))

            counter = counter + 1

            Exit For

        End If

    Next y

Next x

次へ

終了サブ

関連情報