2017-11-01 3 views
0

웹에서 Excel 스프레드 시트로 데이터를 가져옵니다. 모든 데이터는 A 열의 Sheet1에 나열됩니다. 예 :VBA를 사용하는 Excel에서 어떻게 서로 다른 분리 자 (예 : 쉼표, 콜론 등)로 구분 된 여러 값을 분할합니까?

Name: Smith John A. 

License: General - Master 

License Status: Active 

City/State: Anytown, USA 

County: Thatoneyouknow 

Contact Information 

Cell Phone: (555) 555-555 

Email Address: [email protected] 

Region: One 

Ever Been Disciplined?: No 

Notes: None 

그리고 그 직후 다음 사람에 대한 유사한 정보를 반복 등

나는 아래의 코드를 사용하여 데이터를 구분하는 콜론으로 텍스트를 분할 할 수 있었다 :

Sub DataReOrganizer() 
Dim s1, s2 As Worksheet 
Dim Cook, i, K As Long 
Dim v As String 
Set s1 = Sheets("Sheet1") 
Set s2 = Sheets("Sheet2") 
Cook = s1.Cells(Rows.Count, "A").End(xlUp).Row 
K = 2 
For i = 1 To Cook 
     v = s1.Cells(i, "A").Text 
     If v = "Contact Information" Then 
      K = K + 1 
     Else 
      ary = Split(v, ": ") 
      If ary(0) = "Name" Then s2.Cells(K, 1) = ary(1) 
      If ary(0) = "License" Then s2.Cells(K, 2) = ary(1) 
      If ary(0) = "License Status" Then s2.Cells(K, 3) = ary(1) 
      If ary(0) = "City/State" Then s2.Cells(K, 4) = ary(1) 
      If ary(0) = "County" Then s2.Cells(K, 5) = ary(1) 
      If ary(0) = "Home Phone" Then s2.Cells(K, 6) = ary(1) 
      If ary(0) = "Work Phone" Then s2.Cells(K, 7) = ary(1) 
      If ary(0) = "Cell Phone" Then s2.Cells(K, 8) = ary(1) 
      If ary(0) = "Email Address" Then s2.Cells(K, 9) = ary(1) 
      If ary(0) = "Region" Then s2.Cells(K, 10) = ary(1) 
      If ary(0) = "Ever Been Disciplined?" Then s2.Cells(K, 11) = ary(1) 
      If ary(0) = "Note" Then s2.Cells(K, 12) = ary(1) 
     End If 
    Next I 
End Sub 

이것은 데이터를 가져 와서 각 새 행을 sheet2의 목록에서 다음 사람으로 다른 열로 구분하여 잘 작동합니다. 그러나 사물을 단순화하기 위해이 코드를 쉼표로 구분하여 라이센스 필드와 동일하게 하이픈으로 구분할 수 있습니까?

미리 감사드립니다.

+2

ary (1) –

+1

첫 번째 이벤트를 분할하는 대신 'Like'를 사용하십시오. 전의. 'If ​​v "Name *"like then ... 콜론에서 분리 할 수 ​​있습니다. –

답변

1

확실하지. 원래 문자열을 배열로 분할 할 필요가 없습니다. Like과 와일드 카드 *을 사용하면됩니다.

Sub DataReOrganizer() 

    Dim s1, s2 As Worksheet 
    Dim Cook, i, K As Long 
    Dim v As String 
    Set s1 = Sheets("Sheet1") 
    Set s2 = Sheets("Sheet2") 
    Cook = s1.Cells(Rows.Count, "A").End(xlUp).Row 
    K = 2 
    For i = 1 To Cook 
     v = s1.Cells(i, "A").text 
     If v = "Contact Information" Then 
      K = K + 1 
     Else 
      If v Like "Name:*" Then 
       'YourRange = Split(Split(v, ":")(1), ",")(0) 'Last Name 
       s2.Cells(K, 1) = Split(v, ",")(1)    'First Name 
      End If 
      If v Like "License:*" Then s2.Cells(K, 2) = Split(v, "-")(1) 
      If v Like "License Status:*" Then s2.Cells(K, 3) = Split(v, ":")(1) 
      If v Like "City/State:*" Then s2.Cells(K, 4) = Split(v, ":")(1) 
      If v Like "County:*" Then s2.Cells(K, 5) = Split(v, ":")(1) 
      If v Like "Home Phone:*" Then s2.Cells(K, 6) = Split(v, ":")(1) 
      If v Like "Work Phone:*" Then s2.Cells(K, 7) = Split(v, ":")(1) 
      If v Like "Cell Phone:*" Then s2.Cells(K, 8) = Split(v, ":")(1) 
      If v Like "Email Address:*" Then s2.Cells(K, 9) = Split(v, ":")(1) 
      If v Like "Region:*" Then s2.Cells(K, 10) = Split(v, ":")(1) 
      If v Like "Ever Been Disciplined?:*" Then s2.Cells(K, 11) = Split(v, ":")(1) 
      If v Like "Note:*" Then s2.Cells(K, 12) = Split(v, ":")(1) 
     End If 
    Next i 

End Sub 

Split()을 사용할 때 몇 가지 옵션이 있습니다. 일반적으로, 그것은 여러분이했던 것처럼 배열에 분할을 추가하는 데 사용됩니다. 그러나 배열의 전체를 건너 뛰고 split의 끝에 (i)을 추가하여 단일 문자열을 반환 할 수 있습니다. 예를 들어, i = 0 인 경우 전체 문자열 보다 먼저 첫 번째 구분 기호로 반환합니다. 마찬가지로 i = 1은 첫 번째 구분 기호 뒤의 전체 문자열을 반환하고 i = 2은 2 번째 이후의 모든 문자를 반환합니다.

+0

대단히 감사합니다.이 기능은 훌륭합니다! 나는/성과 이름을 나누기 위하여 가고 있었다, 당신을 응답에 포함하기를 당신을 감사하십시오. 그러나, 나는 중간 중간 (만약 존재한다면)을 분리하기 위해 고심하고있다. 그것은 큰 이슈가 아니며 중간 중간을 떠날 수는 있지만 나의 교화로 어떻게 그 분열을 달성 할 수 있습니까? 중간 머리 글자는성에 서 공백으로 구분되며 항상 마침표로 끝납니다. 예 : "John Smith A." –

+1

분리 문자로'' "'을 사용하여 이름에 다른 분리를 할 수 있습니다. 'If ​​Len() = 1'을 사용하여 초기 값을 검사 할 수도 있습니다. 분할 후 (1)에 대한 설명을 추가하는 것을 잊었 기 때문에 답변을 업데이트하여 설명을 추가합니다. –

+0

완벽하고 위대한 도움과 훌륭한 설명이었습니다. 도와 줘서 고마워! –

2

쉼표가 없으므로 이름이 확실하지 않은 다른 분할을 할 수도 있지만 라이센스는 사용할 수 있습니다. @Sorceri에서 제안한대로 하이픈이 있는지 확인하십시오. 엄밀히 말하면 콜론도 똑같이해야합니다. 당신이 그것을 분할 할 한 이후, 첫 번째 이름과 마지막 이름에 대해 별도의 세포를 원하지만, 그런 경우 아래 'YourRange를 변경할 수있는 경우

If ary(0) = "License" Then 
    s2.Cells(K, 2) = Split(ary(1), "-")(0)   
    If InStr(ary(1), "-") > 0 Then 
     s2.Cells(K, 3) = Split(ary(1), "-")(1) 
    End If 
    End If 
+3

하이픈 또는 쉼표가 있는지 확인해야합니다. – Sorceri