2013-05-09 4 views
0

У меня есть таблица Excel, в которой данные извлекаются из другого источника данных.автоматическое решение для ручной копирования-вставки-транспонирования?

У меня есть проблема в том, что данные «повторяется»:

(Сайт столбец А и Владелец Столбец B):

Site       Owner 
http://website1.com   John Doe 
http://website1.com   Jane Doe 
http://website2.com   John Smith 
http://website2.com   Jane Smith 
http://website2.com   John Doe 

То, что я хотел бы изменить это это:

Site       Owner1  Owner 2  Owner 3 
http://website1.com   John Doe  Jane Doe 
http://website2.com   John Smith Jane Smith John Doe 

Я в настоящее время можно копировать «Владельцы» для каждого сайта, и вставляя их с помощью метода «транспонировать» для того, чтобы достичь этого. Проблема в том, что есть много записей, и это очень скучная и, вероятно, расточительная работа.

Есть ли способ сделать это автоматически с помощью макроса, сценария или иначе?

Спасибо!

+0

Я сделал что-то подобное для> 100000 записей в Excel, но я знал, что некоторые ограничения в моих записях. Итак, я спрошу: у вас есть максимальное количество повторений «Сайта»? Процесс остается довольно утомительным, хотя, но не так утомительно, как проходить через все из них вручную. – Jerry

+0

К сожалению, не существует «максимального» количества повторяющихся «сайтов». Данные вытягиваются в ночное время и могут варьироваться. – Kolten

+0

Хм хорошо. макрос был бы самым эффективным решением, о котором я думаю, в котором я еще не знаком ... – Jerry

ответ

1

Чтобы сделать для моего плохого сводного предложения выше ...

Sub Tester() 

    Dim data, rngTL As Range, num 
    Dim i As Long, f As Range 
    Dim site, owner 

    data = Selection.Value 'select raw data before running 

    'where the pivoted data goes: edit to suit... 
    Set rngTL = ThisWorkbook.Sheets("Sheet1").Range("A1") 

    num = 0 
    For i = 1 To UBound(data, 1) 
     site = Trim(data(i, 1)) 
     owner = Trim(data(i, 2)) 

     Set f = rngTL.Resize(num + 1, 1).Find(site, , xlValues, xlWhole) 
     If f Is Nothing Then 
      num = num + 1 
      rngTL.Offset(num, 0).Value = site 
      rngTL.Offset(num, 1).Value = owner 
     Else 
      f.End(xlToRight).Offset(0, 1).Value = owner 
     End If 
    Next i 

End Sub 
+0

Это сработало чудесно! вы просто спасли меня 3 дня бессмысленной работы. Спасибо! – Kolten

-1

Используйте метод расширенного фильтра для уникальных записей и скопируйте результат в другое место с помощью метода pastespecial с транспозицией.

1

Я не буду выписывать вам VBA. Но вот как вы можете сделать это с какой-то простой рабочий лист кнопкой мыши:

Вы будете нуждаться в эту пользовательскую функцию из mrickerson на OzGrid:

Function ConcatIf(ByVal compareRange As Range, ByVal xCriteria As Variant, _ 
    Optional ByVal stringsRange As Range, Optional Delimiter As String) As String 
    Dim i As Long, j As Long, criteriaMet As Boolean 

    Set compareRange = Application.Intersect(compareRange, _ 
    compareRange.Parent.UsedRange) 

    If compareRange Is Nothing Then Exit Function 
    If stringsRange Is Nothing Then Set stringsRange = compareRange 
    Set stringsRange = compareRange.Offset(stringsRange.Row - compareRange.Row, _ 
    stringsRange.Column - compareRange.Column) 

    For i = 1 To compareRange.Rows.Count 
     For j = 1 To compareRange.Columns.Count 
      If (Application.CountIf(compareRange.Cells(i, j), xCriteria) = 1) Then 
       ConcatIf = ConcatIf & Delimiter & CStr(stringsRange.Cells(i, j)) 
      End If 
     Next j 
    Next i 
    ConcatIf = Mid(ConcatIf, Len(Delimiter) + 1) 
End Function 

Тогда вы собираетесь нужно создать столбец ваши уникальные значения для ваших веб-сайтов.

Тогда вам просто необходимо использовать функцию ConcatIf создать комбинированную колонну, а затем вы можете скопировать и вставить, что непосредственно в текстовый редактор ANS сохранить его в формате CSV:

Example

Если вы хотите автоматизировать это, я уверен, что это будет не сложно для вас, но, как правило, вы это делаете. Удачи.

+0

Спасибо за это предложение! Я попробовал, но мои знания ограничены этим аспектом. Большое спасибо, хотя! – Kolten

Смежные вопросы