10 votos

Cómo combinar los valores de varias filas en una sola fila en Excel?

Tengo un volcado de datos en Excel que consta de anual de los datos de los clientes para dos valores diferentes. Los datos se proporcionan con una fila separada de valor para cada año y el cliente. I. e. se parece a esto:

enter image description here

Estoy atascado con una fila para el Cliente 1 para el Valor de a en 2009 y una fila separada por Valor de B para el mismo cliente en el mismo año.

En algunos casos no hay ningún Valor o Un Valor de B. En el ejemplo anterior, podemos ver que el Cliente 1 no tiene ningún Valor B en el 2011, por lo que no hay ninguna fila se generó para que. Y, aunque no se representa en el ejemplo, algunos clientes no tienen datos para cualquier valor en un año (y por lo tanto no hay una fila para que el cliente en ese año). En esa situación, a falta de una fila para que el cliente en ese año es buena.

Quiero conseguir esto en una hoja de cálculo donde hay una fila para ambos valores para cada año y el cliente. I. e., Quiero que los datos para este aspecto:

enter image description here

¿Cuál es la manera más efectiva de crear ese resultado?

6voto

Root Null Puntos 18

Este es VBA, o una macro se puede ejecutar en su hoja. Usted debe golpear la tecla alt+F11 para abrir el Visual Basic para Aplicaciones símbolo del sistema, vaya a su libro y right click - insert - module y pegar este código en allí. A continuación, puede ejecutar el módulo de dentro de VBA pulsando F5. Esta macro se denomina "prueba"

Sub test()
'define variables
Dim RowNum as long, LastRow As long
'turn off screen updating
Application.ScreenUpdating = False
'start below titles and make full selection of data
RowNum = 2
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
Range("A2", Cells(LastRow, 4)).Select
'For loop for all rows in selection with cells
For Each Row In Selection
    With Cells
    'if customer name matches
    If Cells(RowNum, 1) = Cells(RowNum + 1, 1) Then
        'and if customer year matches
        If Cells(RowNum, 4) = Cells(RowNum + 1, 4) Then
            'move attribute 2 up next to attribute 1 and delete empty line
            Cells(RowNum + 1, 3).Copy Destination:=Cells(RowNum, 3)
            Rows(RowNum + 1).EntireRow.Delete
        End If
     End If
    End With
'increase rownum for next test
RowNum = RowNum + 1
Next Row
'turn on screen updating
Application.ScreenUpdating = True

End Sub

Este se ejecuta a través de una ordenada hoja de cálculo y combinar filas consecutivas, que coinciden con el cliente y el año y eliminar el vacío de la fila. La hoja de cálculo deben ser ordenados de la manera que usted ha presentado, los clientes y los años ascendente, esta macro no mirar más allá de filas consecutivas.

Editar - es totalmente posible mi with statement es completamente innecesario, pero que no hace daño a nadie..

REVISITED 02/28/14

Alguien ha usado esta respuesta en otra pregunta y cuando volví pensé que esto VBA pobres. He rehecho -

Sub CombineRowsRevisited()

Dim c As Range
Dim i As Integer

For Each c In Range("A2", Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 1))
If c = c.Offset(1) And c.Offset(,4) = c.Offset(1,4) Then
            c.Offset(,3) = c.Offset(1,3)
            c.Offset(1).EntireRow.Delete
End If

Next

End Sub

2voto

zx8754 Puntos 216

Otra opción:

  1. Seleccione la Columna B, presione CTRL+G -> Special-> Blanks -> OK
  2. Tipo = pulse , a continuación, CTRL+ENTER
  3. Seleccione la Columna C, presione CTRL+G -> Special-> Blanks -> OK
  4. Tipo =IF( pulse tipo = pulse pulse tipo , pulse tipo ,0) , a continuación, CTRL+ENTER
  5. Seleccionar todos los datos y Copy y Paste Special as Values
  6. Eliminar duplicados.

EDITAR:

Explicación: estoy tratando de hacer uso de GoTo Espacios opción. Una vez que haya seleccionado los espacios en blanco a continuación, puede introducir la misma fórmula para todos los seleccionados celdas en blanco. Respecto a la OP de la pregunta, los datos parecen tener consistente en blanco, es decir,: Value A columna espacios en blanco tienen el mismo CustomerID como en el anterior no vacías de la fila. De la misma manera Value B columna espacios en blanco tienen el mismo CustomerID como a continuación no vacías de la fila.

0voto

xXPhenom22Xx Puntos 487

La manera más eficaz de hacer esto es para el volcado de todos los datos en una Tabla dinámica y la caída de "el Cliente" en las Etiquetas de Fila y, a continuación, siga con el resto de las columnas. Puedes colocar el 'Año' en el encabezado de columna si desea ver el desglose por año

Las Tablas dinámicas se pueden encontrar en Insertar en Excel 2010

0voto

Aquí están los pasos para crear una tabla con el resumen de los datos.

  1. Copia de su tabla completa y pegarla en una nueva hoja.
  2. Seleccione la nueva tabla y Eliminar Duplicados (Datos de la cinta de opciones -> Eliminar Duplicados) en las columnas Customer y Year. Esto proporcionará el marco para el condensado de la tabla.
  3. En B2 (la primera entrada para Value A), introduzca lo siguiente:

    =IFERROR(INDEX(Sheet1!B$1:B$11,MIN(IF(Sheet1!$A$1:$A$11=$A2,IF(Sheet1!$D$1:$D$11=$D2,IF(Sheet1!B$1:B$11<>"",ROW(Sheet1!$A$1:$A$11),1000000),1000000),1000000))),"")

    Escriba la fórmula como una fórmula de matriz presionando Ctrl+Mayús+Entrar.

  4. Llenar la fórmula hacia abajo en la columna. A continuación, rellenar para rellenar el Value B columna. Voila!

Un par de notas:

  • Tiene naturalmente necesidad de ajustar las direcciones para que se ajuste a los datos. Para su referencia, la Hoja1 es el original de los datos en las columnas de la a a la D.
  • Estoy asumiendo sus datos (o cabeceras) comienza en la Fila 1. Esto es probablemente cierto, si este es un volcado de datos. La fórmula se tiene que ajustar si este no es el caso.
  • Estoy suponiendo que la tabla tiene menos de un millón de filas. Si de alguna manera tienes más que eso, cambiar el 1000000s en la fórmula a algo mayor que el número de filas.
  • Si la tabla tiene muchos miles de filas (100,000+), puede que desee considerar el uso de una solución de VBA lugar ya que las fórmulas de matriz puede empantanarse con matrices grandes.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: