2014-11-23 7 views
2

Я пытаюсь дублировать строки в excel с помощью VBA и объединять столбцы в один.Как дублировать строку на основе значения столбца или ячейки

Код VBA ниже скрывает некоторые столбцы. Мне нужна помощь в редактировании моего кода, чтобы показать все столбцы (скопировать col A через col Q).

Это как исходные данные выглядит enter image description here

Это, как я хотел бы закончить до enter image description here

Это, как я получить, используя код, приведенный ниже (проблема: оленья кожа шоу или копия цв. B до Col P)

enter image description here

I woul d хотел бы показать все столбцы между A и Q. Кодекс ниже скрывает все столбцы, кроме первого и объединенного (Col A и объединенный col на col. Б).

Sub SortMacro() 
    Dim SourceSheet As Worksheet 
    Dim OutSheet As Worksheet 

    Set SourceSheet = ActiveSheet 
    Set OutSheet = Sheets.Add 

With SourceSheet 
    Out_i = 1 
    For r = 1 To .Cells(Rows.Count, 1).End(xlUp).Row 
    For i = 17 To 20 'or For each i in Array(17,18,20) 
     OutSheet.Cells(Out_i, 1) = .Cells(r, 1) 
     OutSheet.Cells(Out_i, 2) = .Cells(r, i) 
     Out_i = Out_i + 1 
    Next 
    Next 
End With 
End Sub 

Спасибо!

+0

Итак, каков ваш вопрос? –

+0

@JohnSaunders I, чтобы показать все столбцы, приведенный выше код скрывает все столбцы между первым и объединенным, который col. Q Я хочу показать все столбцы в дополнение к объединенной ячейке – KGK

+0

Этот вопрос, очевидно, показывает усилие, но, как @JohnSaunders, я смущен тем, что вы просите. Можете ли вы прояснить ситуацию? – theMayer

ответ

1

Это моя интерпретация того, что вам нужно. Я добавил цикл для копирования столбцов A: P в каждую новую строку

Sub SortMacro() 

Dim SourceSheet As Worksheet 
Dim OutSheet As Worksheet 

Set SourceSheet = ActiveSheet 
Set OutSheet = Sheets.Add 

With SourceSheet 
    Out_i = 1 
    For r = 1 To .Cells(Rows.Count, 1).End(xlUp).Row 
    ' Create a new row for each column entry in Q:T 
    For i = 17 To 20 
     ' Check the cell isn't empty before creating a new row 
     If (.Cells(r, i).Value <> "") Then 
     ' Copy columns A:P 
     For j = 1 To 16 
      OutSheet.Cells(Out_i, j) = .Cells(r, j) 
     Next j 

     ' Copy the current column from Q:T 
     OutSheet.Cells(Out_i, 17) = .Cells(r, i) 
     Out_i = Out_i + 1 
     End If 
    Next i 
    Next r 
End With 

End Sub 
+0

Работайте как шарм !! Намного лучше, спасибо !!! – KGK

+0

спасибо @barrowc: что делать, если я хочу скопировать объединенную ячейку из Q: T в col N вместо размещения в конце? Также как я могу пропустить, когда существует пустая ячейка? Благодаря!! – KGK

+0

Что должно произойти с тем, что уже находится в столбце N в этот момент? – barrowc

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