
Excel의 텍스트-열과 같이 여러 열로 분할해야 하는 단일 열이 있습니다. 그러나 작은 과제가 있습니다. 기존 구분 기호는 작동하지 않습니다. 아래 문자열을 고려하십시오.
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()
범위에 따른 희미한 r
Dim subS를 변형으로 사용
희미한 x만큼 긴
희미한 y만큼 오랫동안
희미한 카운터 As Long
카운터 = 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
다음 r
서브 끝