
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,"\",""))
ロジックに従ってコードを書くのに助けが必要です
- 文字列内の「\」を検索
- 「\」の直前のスペースを見つけて分割します
次のコードを使用しましたが、目的を達成できませんでした
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
次へ
終了サブ