Мне нужно взять 2 столбца на листе excel и преобразовать их в диапазон данных с столбцом 1 в качестве заголовков

В Excel у меня есть несколько данных. Они представлены в 2 столбцах в виде списка. В левом столбце есть имя сотрудника, а во втором столбце – время / шт.

Employee Time/pc TE 0.616438356 TE 0.581896552 FL 0.474040632 AD 0.473251029 AD 0.491803279 TE 0.616438356 TE 0.652173913 TE 0.575 CG 0.744680851 JU 0.784313725 JU 0.568181818 JU 0.709459459 JU 0.227272727 AD 0.461956522 AD 0.555555556 JU 0.014285714 JU 0.692307692 

Мне нужно легко преобразовать это в диапазон, где столбец 1 используется в качестве заголовков, мне нужно удалить дубликаты. Затем ему нужно перечислить все значения, найденные рядом с каждым именем, под каждым именем.

Может кто-нибудь мне помочь?

Я довольно новичок в VBA, но я пытаюсь ответить на вопрос, чтобы поддержать сообщество. Я приветствую любые / исправления этого кода, но я его протестировал. Он работает, и он делает то, что они просили. Однако он не оптимизирован ни в какой форме, форме или форме.

Я назвал начальный лист «RawData» и новый лист «NewData»,

 Option Explicit Sub Pivot() Dim i, m, q As Integer i = 2 q = 3 Do While Sheets("RawData").Cells(i, 1).Value <> "" If Sheets("NewData").Range("A1:ZZ1").Find(Sheets("RawData").Cells(i, 1), LookAT:=xlWhole) Is Nothing Then If Sheets("NewData").Range("A1") <> "" Then If Sheets("NewData").Range("B1") <> "" Then Worksheets("RawData").Cells(i, 1).Copy Worksheets("NewData").Activate Cells(1, q).Activate ActiveCell.PasteSpecial xlPasteValues Worksheets("RawData").Cells(i, 2).Copy Worksheets("NewData").Activate Cells(2, q).Activate ActiveCell.PasteSpecial xlPasteValues q = q + 1 Else Worksheets("RawData").Cells(i, 1).Copy Worksheets("NewData").Activate Range("B1").Activate m = ActiveCell.Column ActiveCell.PasteSpecial xlPasteValues Worksheets("RawData").Cells(i, 2).Copy Worksheets("NewData").Activate Cells(2, m).Activate ActiveCell.PasteSpecial xlPasteValues End If Else Worksheets("RawData").Cells(i, 1).Copy Worksheets("NewData").Activate Range("A1").Activate m = ActiveCell.Column ActiveCell.PasteSpecial xlPasteValues Worksheets("RawData").Cells(i, 2).Copy Worksheets("NewData").Activate Cells(2, m).Activate ActiveCell.PasteSpecial xlPasteValues End If Else Worksheets("RawData").Cells(i, 2).Copy Worksheets("NewData").Activate Sheets("NewData").Range("A1:ZZ1").Find(Sheets("RawData").Cells(i, 1), LookAT:=xlWhole).Activate m = ActiveCell.Column Worksheets("NewData").Cells(1, m).End(xlDown).Offset(1, 0).Activate ActiveCell.PasteSpecial xlPasteValues End If i = i + 1 Loop End Sub 

Проверьте код ниже, это поможет вам получить желаемый результат. Код, опубликованный Эмили Олден, также будет работать. Это более короткий путь.

 Sub test() Dim raw_data, new_data As Worksheet Dim new_col_num, data_row_num, i As Long Dim employee, time As String Dim rng As Range data_row_num = 1 new_col_num = 1 Set raw_data = ThisWorkbook.Sheets("raw_data") Set new_data = ThisWorkbook.Sheets("new_data") Do Until raw_data.Cells(data_row_num, 1).Value = "" employee = raw_data.Cells(data_row_num, 1).Value time = raw_data.Cells(data_row_num, 2).Value new_data.Range("A1").Activate Set rng = new_data.Range("A1:XFD1").Find(what:=employee, LookIn:=xlValues, LookAt:=xlWhole, searchorder:=xlByColumns) If rng Is Nothing Then new_data.Cells(1, new_col_num).Value = employee new_data.Cells(2, new_col_num).Value = time new_col_num = new_col_num + 1 data_row_num = data_row_num + 1 Else i = new_data.Cells(1, rng.Column).End(xlDown).Row + 1 new_data.Cells(i, rng.Column).Value = time data_row_num = data_row_num + 1 End If Loop End Sub 
Давайте будем гением компьютера.