2010-06-04 33 views
7

tengo varias listas que se encuentran en columnas separadas en Excel. Lo que necesito hacer es combinar estas columnas de datos en una gran columna. No me importa si hay entradas duplicadas, sin embargo, quiero que salte la fila 1 de cada columna.Excel - Combine varias columnas en una columna

también sobre qué si ROW1 tiene encabezados de enero a diciembre, y la longitud de las columnas son diferentes y hay que combinar en una gran columna?

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

deberían combinar en

A  
B  
C  
D  
E  
F  
G  
H  
I 

La primera fila de cada columna tiene que ser omitidos.

Respuesta

0

No estoy seguro si esto ayuda por completo, pero tuve un problema por el que necesitaba una combinación de "inteligente". Tenía dos columnas, una & B. quería mover B durante sólo si A estaba en blanco. Vea abajo. Se basa en un rango de selección, que puede usar para compensar la primera fila, tal vez.

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

probar esto. Haga clic en cualquier lugar de su gama de datos y luego utilizar esta macro:

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 
5

puede combinar las columnas sin utilizar macros. Llene la siguiente función en la barra de fórmulas:

= IF (ROW() < = CONTARA (A: A), INDEX (A: A, ROW()), IF (ROW() < = CONTARA (A : B), índice (B: B, ROW() - CONTARA (A: A)), SI (ROW()> CONTARA (A: C), "", ÍNDICE (C: C, ROW() - CONTARA (a: B)))))

la instrucción utiliza 3 funciones SI, porque necesita combinar 3 columnas:

  • para la columna a, la función compara el número de fila de una célula con el número total de celdas en una columna que no están vacías. Si el resultado es verdadero, la función devuelve el valor de la celda de la columna A que está en la fila(). Si el resultado es falso, la función pasa a la siguiente instrucción IF.
  • Para la columna B, la función compara el número de fila de una celda con el número total de celdas en el rango A: B que no están vacías. Si el resultado es verdadero, la función devuelve el valor de la primera celda que no está vacía en la columna B. Si es falso, la función pasa a la siguiente instrucción IF.
  • Para la columna C, la función compara el número de fila de una celda con el número total de celdas en el rango A: C que no están vacías. Si el resultado es verdadero, la función devuelve una celda en blanco y no hace más cálculos. Si es falso, la función devuelve el valor de la primera celda que no está vacía en la columna C.
+0

¡Esta es una respuesta increíble! –

Cuestiones relacionadas