2010-06-04 5 views
7

У меня есть несколько списков, которые находятся в отдельных столбцах в excel. Что мне нужно сделать, это объединить эти столбцы данных в одну большую колонку. Мне все равно, есть ли повторяющиеся записи, однако я хочу, чтобы он пропускал строку 1 каждого столбца.Excel - объединить несколько столбцов в один столбец

Также, если у ROW1 есть заголовки с января по декабрь, а длина столбцов различна и их необходимо объединить в одну большую колонку?

ROW1| 1 2 3  
ROW2| A D G  
ROW3| B E H  
ROW4| C F I 

должен объединить в

A  
B  
C  
D  
E  
F  
G  
H  
I 

В первой строке каждого столбца должен быть пропущен.

ответ

0

Не уверен, что это полностью помогает, но у меня была проблема, когда мне нужно было «умное» слияние. У меня было две колонки: A & B. Я хотел переместить B только в том случае, если A был пустым. Смотри ниже. Он основан на диапазоне выбора, который вы, возможно, можете использовать для смещения первой строки.

Private Sub MergeProjectNameColumns() 
    Dim rngRowCount As Integer 
    Dim i As Integer 

    'Loop through column C and simply copy the text over to B if it is not blank 
    rngRowCount = Range(dataRange).Rows.Count 
    ActiveCell.Offset(0, 0).Select 
    ActiveCell.Offset(0, 2).Select 
    For i = 1 To rngRowCount 
     If (Len(RTrim(ActiveCell.Value)) > 0) Then 
      Dim currentValue As String 
      currentValue = ActiveCell.Value 
      ActiveCell.Offset(0, -1) = currentValue 
     End If 
     ActiveCell.Offset(1, 0).Select 
    Next i 

    'Now delete the unused column 
    Columns("C").Select 

    selection.Delete Shift:=xlToLeft 
End Sub 
0
Function Concat(myRange As Range, Optional myDelimiter As String) As String 
    Dim r As Range 
    Application.Volatile 
    For Each r In myRange 
    If Len(r.Text) Then 
     Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text 
    End If 
    Next 
End Function 
12

Попробуйте это. Нажмите в любом месте диапазона данных, а затем использовать этот макрос:

Sub CombineColumns() 
Dim rng As Range 
Dim iCol As Integer 
Dim lastCell As Integer 

Set rng = ActiveCell.CurrentRegion 
lastCell = rng.Columns(1).Rows.Count + 1 

For iCol = 2 To rng.Columns.Count 
    Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut 
    ActiveSheet.Paste Destination:=Cells(lastCell, 1) 
    lastCell = lastCell + rng.Columns(iCol).Rows.Count 
Next iCol 
End Sub 
1

я создал пример таблицы здесь о том, как сделать это с помощью простых формул Excel, и без использования макросов (вам нужно будет сделать свои настройки для избавления от первого ряда, но это должно быть легко, как только вы поймете, как работает мой пример таблицы):

https://docs.google.com/a/umich.edu/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c#gid=0

5

вы можете объединить столбцы без использования макросов. Введите следующую функцию в строке формул:

= IF (ROW() < = COUNTA (А: А), ИНДЕКС (А: А, СТРОКА()), если (ROW() < = COUNTA (A : В), ИНДЕКС (В: В, СТРОКА() - СЧЕТЗ (А: А)), ЕСЛИ (СТРОКА()> СЧЕТЗ (А: В), "", ИНДЕКС (С: С, СТРОКА() - СЧЕТЗ (A: B)))))

Оператор использует 3 функций ЕСЛИ, потому что он должен объединить 3 колонки:

  • для колонка А, функция сравнивает номер строки ячейки с общее количество ячеек в столбце A, которые не являются пустыми. Если результат верен, функция возвращает значение ячейки из столбца A, которое находится в строке(). Если результат является ложным, функция переходит к следующему оператору IF.
  • Для столбца B функция сравнивает номер строки ячейки с общим количеством ячеек в диапазоне A: B, которые не являются пустыми. Если результат верен, функция возвращает значение первой ячейки, которая не является пустой в столбце B. Если значение false, функция переходит к следующему оператору IF.
  • Для столбца C функция сравнивает номер строки ячейки с общим количеством ячеек в диапазоне A: C, которые не являются пустыми. Если результат верен, функция возвращает пустую ячейку и больше не вычисляет. Если false, функция возвращает значение первой ячейки, которая не является пустой в столбце C.
+0

Это замечательный ответ! –

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