2013-09-27 2 views
0

Я пытаюсь выровнять/сопоставлять несогласованные данные в excel. В настоящее время данные выглядит следующим образом:Excell 2007 выровнять по столбцам по идентификационному номеру

customerid customerid2 emailaddress   firstname   lastname 

1   2   [email protected]   Chris    Anderson 
2   1   [email protected] Bob    Hope 
7   8   [email protected]  Jenn    Lacy 
8   7   [email protected]   Bryan    Smoth 
9      [email protected] 
10   11   [email protected] Andrew   Smoth 
11   10   [email protected]  Ronnie   Williams 

В основном я пытаюсь получить столбец А и Б идентификаторами, чтобы соответствовать соответствующим образом и все данные справа выровнять. Так оно и делается:

1   1   [email protected]   Bob    Hope 
2   2   [email protected] Chris    Anderson 
7   7   [email protected]  Bryan    Smoth 
8   8   [email protected]   Jenn    Lacy 
9      [email protected] 
10   10   [email protected] Ronnie   Williams 
11   11   [email protected]  Andrew   Smoth 

Я бы сделал это вручную, но есть 17 000 неправильных записей. Насколько я понимаю, я могу запустить VBA в excel, который поможет исправить эту проблему. Я не могу подчеркнуть, насколько я ценю любую помощь!

Большое спасибо

+0

Хм, я совершенно не вижу смысла колонке 2. Вы можете просто скопировать-вставить столбец 1 там: s Are вы ищете способ согласования столбца 3 с столбцами 4 и 5? – Trace

+0

'' '' 'customerid2' отсутствует непреднамеренно? –

ответ

1

Я обычно не дают код так скоро, но это, казалось, интересный вопрос. Попробуйте этот простой код.

Мои предположения:

  1. Название листа, который имеет данные, называется Sheet1
  2. Данные в Columns A:E
  3. Там нет кратных вхождений customerid2
  4. Row 1 имеет заголовки

Logic:

  1. магазин диапазон B:E в массиве
  2. Очистить столбцы B:E для вывода
  3. Loop хотя Col A и сравнить его с седловины 1 массива, и если совпадение найдено затем заполнить соответствующую строку

Код:

Я прокомментировал код. Тем не менее, если вы столкнулись с проблемой, просто отправьте ее обратно.

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim MyData As Variant 
    Dim i As Long, j As Long, lRow As Long 

    '~~> This is your relevant sheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> get the last row which has data 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     '~~> Get your Col B:E Range 
     Set rng = ws.Range("B2:E" & lRow) 

     '~~> Store the range in an array 
     MyData = rng 

     '~~> Clear Col B:E for output 
     rng.ClearContents 

     '~~> Loop through Col A 
     For i = 2 To lRow 
      '~~> Loop through Array 
      For j = LBound(MyData) To UBound(MyData) 
       '~~> If match found then write to relevant row 
       If MyData(j, 1) = .Range("A" & i).Value Then 
        .Range("B" & i).Value = MyData(j, 1) 
        .Range("C" & i).Value = MyData(j, 2) 
        .Range("D" & i).Value = MyData(j, 3) 
        .Range("E" & i).Value = MyData(j, 4) 
        Exit For 
       End If 
      Next j 
     Next i 
    End With 
End Sub 

Скриншот (до и после):

enter image description here

+0

Не то, чтобы у меня был ответ на вопрос иначе, но я считаю, что столбцы D и E должны совпадать с именами в столбце электронной почты. –

+0

@JoeLaviano: Это потому, что имена и адрес электронной почты были неправильно помещены OP в вопросе, который я предполагаю. Не существует способа Sure Shot узнать, принадлежит ли электронное письмо конкретному человеку. Единственный способ, которым я знаю, это использовать 'instr', но это снова не является надежным. Также, если вы заметили, что адреса электронной почты неверны;) –

+0

Хех я даже не видел этого, слишком рано для меня ясно. Все равно качественный ответ, как всегда!+1 –

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