-1

У меня есть несколько тысяч строк данных в Excel, где каждая логическая запись использует две строки с номером Job/Eqp и именем задания в столбце C на чередующихся строках. Я хочу переместить данные имени задания в столбец D и удалить ненужные строки, оставив более логичный макет одной записи на строку. Вот как выглядят данные сейчас:

        Column A     Column B    Column C
Row 1   Date:        Employee:   Job/Eqp:
Row 2   07/10/2014   Jeremy      2014042
Row 3                            LABCORP GAITHERSBURG
Row 4   07/10/2014               2013002
Row 5                            DULLES LANDING
Row 6   07/11/2014               2013002
Row 7                            ONE LOUDOUN BUILDING P
Row 8   07/11/2014               2014049
Row 9                            ELITE SHOOTING SPORTS

Вот что я хотел бы иметь:

        Column A     Column B    Column C    Column D
Row 1   Date:        Employee:   Job/Eqp:   Job Name:
Row 2   07/10/2014   Jeremy      2014042    LABCORP GAITHERSBURG
Row 3   07/10/2014               2013002    DULLES LANDING
Row 4   07/11/2014               2013002    ONE LOUDOUN BUILDING P
Row 5   07/11/2014               2014049    ELITE SHOOTING SPORTS

Ни один макрос или формула, которую я пробовал, не работает.

3 ответа3

1

Если вам нужно сделать это только один раз и при условии, что каждая логическая запись имеет ровно две строки, вам не нужен макрос. Я скопировал столбец C в столбец D, а затем удалил одну ячейку D2, убедившись, что вы выбрали Shift Cells Up. Это переместит каждое имя задания на одну строку. Затем я вставляю столбец индекса и заполняю его от 1 до 2000 или любым другим количеством строк. Предположим, вы вставили столбец индекса в столбец E, затем вы должны отсортировать все данные по столбцу A. Все чередующиеся строки с пробелами в столбце даты будут отсортированы вместе и могут быть удалены. Наконец, заново отсортируйте все данные по столбцу индексации, и вы останетесь в указанном вами формате.

0

Я бы разрешил это с помощью Power Query Add-In. Чтобы добраться туда, нужно выполнить несколько шагов, но никакого макрокода или изменений в структуре входных данных не требуется.

Я создал прототип, который вы можете просмотреть или скачать - его демонстрация Power Query - «Разделение строк в столбце на отдельный столбец» на моем One Drive:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

По сути, моя техника заключалась в том, чтобы сначала создать промежуточный запрос, который фильтрует каждую строку с нечетным номером (не считая заголовок) и добавляет столбец "Index Row Pairs" для отслеживания пар строк. Затем я создал дубликат этого запроса, который фильтрует строки по четным номерам. Затем я использовал Merge, чтобы соединить (в столбце "Index Row Pairs") первый запрос и получить столбец Eqp.

0

Предполагая, что в столбце A уже есть дата (в первой из двух строк в каждой группе), этот макрос должен сделать это:

Sub CreateNewColumn()
Const dataSheetName As String = "Sheet1"

Dim dataSheet As Worksheet
Dim lastCellInColumnA As Range
Dim totalNoOfRows As Long
Dim autoFillSource As Range
Dim autoFillTarget As Range
Dim rowIndex As Long

Set dataSheet = ThisWorkbook.Worksheets(dataSheetName)
dataSheet.Range("D1").Value = "Job Name:"
dataSheet.Range("D2").Formula = "=C3"
totalNoOfRows = dataSheet.UsedRange.Rows.Count
'Don't include blank rows at the end
totalNoOfRows = dataSheet.Range("A" & CStr(totalNoOfRows + 1)).End(xlUp).Offset(1, 0).Row
'Set lastCellInColumnA = Sheet1!Range("A" & CStr(totalNoOfRows))

Set autoFillSource = dataSheet.Range("D2")
Set autoFillTarget = dataSheet.Range("D2:D" & CStr(totalNoOfRows))
autoFillSource.AutoFill autoFillTarget
dataSheet.Calculate
autoFillTarget.Copy
autoFillTarget.PasteSpecial xlPasteValues

For rowIndex = totalNoOfRows To 2 Step -1
    If Len(dataSheet.Range("A" & CStr(rowIndex))) = 0 Then
        dataSheet.Rows(rowIndex).Delete
    End If
Next rowIndex

ThisWorkbook.Save
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .