2016-07-28 3 views
0

У меня есть файл excel, где все данные сбрасываются в 4 ячейки. Столбец A имеет заголовок, а затем 4 времени начала (каждый раз будет один и тот же), а столбец B имеет заголовок, а затем 4 ячейки, каждый из которых будет содержать различное количество адресов электронной почты и другие данные каждый день, чтобы VBA работа независимо от плотности ячеек в столбце B.Использование VBA для разделения и хранения данных из ячейки Excel

То, что я хочу достичь, - это аккуратно складываемые строки данных по одному для каждого адреса электронной почты независимо от количества адресов в ячейке в определенный день. Данные форматируются разрывами строк, разделенными; и разрывы столбцов разделены, поэтому

Jeffsmith @ gmail.com, Джефф Смит, 555-4196; BobJones @ Gmail.com, Боб Джонс, 555-3827 (все в В2)

потребности стать

[email protected] (колонок перерыв) Джефф Смит (колонок перерыв) 555-4196

(разрыв строки)

[email protected] (колонок перерыв) Боб Джонс (колонок перерыв) 555- 3827

и так далее для каждой ячейки До сих пор я попытался с помощью вставок с помощью следующего кода

RowNum1 = (Len(Range("B2")) - Len(Replace(Range("B2"), "@", ""))) 
RowNum2 = (Len(Range("B3")) - Len(Replace(Range("B3"), "@", ""))) 
RowNum3 = (Len(Range("B4")) - Len(Replace(Range("B4"), "@", ""))) 
RowNum4 = (Len(Range("B5")) - Len(Replace(Range("B5"), "@", ""))) 

If RowNum1 <> 0 Then 
Rows("3:" & 1 + RowNum1).EntireRow.Insert 
End If 

If RowNum2 <> 0 Then 
Rows(3 + RowNum1 & ":" & 1 + RowNum1 + RowNum2).EntireRow.Insert 
End If 

If RowNum3 <> 0 Then 
Rows(3 + RowNum1 + RowNum2 & ":" & 2 + RowNum1 + RowNum2 + RowNum3).EntireRow.Insert 
End If 

и что, кажется, поставить правильные разрывы строк в данных (я не 100% на этом), но Я в тупике, когда дело доходит до разделения данных и размещения их там, где это необходимо. Любая помощь будет принята с благодарностью.

+0

Это, вероятно, будет полезно для вас : [Разделить функцию] (https://msdn.microsoft.com/en-us/library/6x627e5f (v = vs.90) .aspx) –

+1

Попробуйте объединить мастер макрокоманд и текст в столбцы. Это напишет большую часть кода для вас. –

ответ

2

Я не беспокоился о датах. Но это разделит Range B2 для вас.

Sub ExplodeB2() 
    Const SampleString = "[email protected],Jeff Smith,555-4196;[email protected],Bob Jones,555-3827 (all in B2)" 
    Dim x As Long 
    Dim arrRows 

    arrRows = Split(Range("B2").Value, ";") 

    For x = 0 To UBound(arrRows) 

     Cells(x + 2, 2).Resize(1, 3) = Split(arrRows(x), ",") 

    Next 

End Sub 

До и после

enter image description here

0

для нескольких ячеек, вы можете присоединиться значения ячеек в одну строку, прежде чем разделить их:

Set rangeFrom = [B2:B5] 
Set rangeTo = [D2] 

a = WorksheetFunction.Transpose(rangeFrom) ' from 2D array to 1D array 
s = Join(a, ";") 
a = Split(s, ";")    ' sorry about my lazy variable names :] 

For Each s In a 
    v = Split(s, ",")   ' 3 values 
    c = UBound(v) + 1   ' UBound(v) is 2 
    rangeTo.Resize(, c) = v  ' resize to 3 columns 
    Set rangeTo = rangeTo(2) ' moves to the cell below 
Next 
Смежные вопросы