Excel: transposición basada en fórmulas de valores separados por comas a filas individuales


1

Mantengo mi inventario de CD / DVD en un archivo de Excel (Excel 2013). Los datos se organizan como se muestra en la siguiente instantánea.

En cada fila hay una primera celda que menciona la etiqueta del CD y la siguiente celda contiene la lista de aplicaciones separadas por comas que he escrito en ella.

Sin embargo, estoy interesado en una vista en la que los valores separados por comas se transpongan a filas para que solo haya un elemento por celda y por fila como se muestra a continuación.

Entiendo, VBA puede ayudar aquí fácilmente y tengo conocimientos básicos de VBA, sin embargo, ¿hay una posible solución basada en fórmulas para transponer los datos de entrada a salida? Quiero evitar Macros y también quiero evitar el proceso manual de Texto a columna y luego Copiar-Pegar transposición.

También debe recortar el espacio extra si lo hay después de la coma.

ingrese la descripción de la imagen aquí


Probablemente haya algún tipo de matriz que funcione en su pequeño conjunto de datos, pero si tiene un conjunto de datos mucho más grande para trabajar, creo que tendrá dificultades para encontrar una solución sin VBA
PeterH

Hay alrededor de 40 filas de datos en este momento. Las filas se agregan a medida que se usa un nuevo disco óptico.
rajeev

@rajeev, en lugar de una Fórmula, encontré que MACRO (VBA) es el método más adecuado y más fácil para manejar el problema. Como puede encontrar en los comentarios, PeterH también ha sugerido la solución VBA. Por lo tanto, publiqué el código, que es fácil de usar y podría manejar fácilmente filas separadas por comas, tanto grandes como grandes . Es útil y, creo que también lo encuentra útil.
Rajesh S

Respuestas:


2

Para hacerlo con una fórmula, con Excel anterior a Office 365 necesitará una columna auxiliar.

Al lado de su lista delimitada por comas (mi lista comienza en C2) ponga:

=LEN(C1)-LEN(SUBSTITUTE(C1,",",""))+1+D1

Esto mantendrá un total acumulado de la cantidad de palabras.

ingrese la descripción de la imagen aquí

Luego, hace referencia a ambas columnas con INDEX / MATCH para hacer referencia a la celda correcta a medida que la fórmula larga se arrastra hacia abajo.

La fórmula larga es:

=TRIM(MID(SUBSTITUTE(INDEX(C:C,MATCH(ROW(1:1),D:D)),",",REPT(" ",99)),(ROW(1:1)-INDEX(D:D,MATCH(ROW(1:1),D:D)))*99 +1,99))

Luego dos INDEX / MATCH devuelven las celdas correctas para ser procesadas.

El SUSTITUTO agrega una gran cantidad de espacio en blanco, lo que da un gran objetivo para que el Mid encuentre.

El Mid divide la larga cuerda en el espacio en blanco.

El TRIM elimina el espacio en blanco extraño.

ingrese la descripción de la imagen aquí


Con Office 365, puede omitir la columna auxiliar y usar TEXTJOIN () si la cadena no es demasiado larga.

=TRIM(MID(SUBSTITUTE(TEXTJOIN(",",TRUE,$C$2:$C$5),",",REPT(" ",99)),(ROW(1:1)-1)*99+1,99))

Esto reemplaza el ÍNDICE / PARTIDO con TEXTJOIN, de lo contrario, actúa como anteriormente.

ingrese la descripción de la imagen aquí


2

Me gustaría sugerir un método simple de VBA (Macro), que es muy fácil de usar y mejor que cualquier fórmula tediosa.

ingrese la descripción de la imagen aquí

Private Sub CommandButton1_Click()

    Dim xArr() As String
    Dim xAddress As String
    Dim Rg As Range
    Dim Rg1 As Range

    On Error Resume Next

    xAddress = Application.ActiveWindow.RangeSelection.Address

    Set Rg = Application.InputBox("please select the data range:", "Column to Row", xAddress, , , , , 8)

    If Rg Is Nothing Then Exit Sub

    Set Rg = Application.Intersect(Rg, Rg.Parent.UsedRange)

    If Rg Is Nothing Then Exit Sub

    Set Rg1 = Application.InputBox("please select output cell:", "Column to Row", , , , , , 8)

    If Rg1 Is Nothing Then Exit Sub
    xArr = Split(Join(Application.Transpose(Rg.Value), ","), ",")
    Rg1.Resize(UBound(xArr) + 1) = Application.Transpose(xArr)
    Rg1.Parent.Activate
   Rg1.Resize(UBound(xArr) + 1).Select

Call TrimXcessSpaces

End Sub

Cómo funciona:

  • Haga clic en Developer TAB , presione Diseño y luego Insertar .
  • Seleccione el botón Comando de la categoría ActiveX y dibuje en cualquier lugar de la hoja.
  • Haga clic con el botón derecho en el botón Comando y seleccione Propiedad .
  • Encuentra Título de la lista y cámbialo a Columna a fila.
  • Cierre la ventana de propiedades y regrese a la hoja.
  • Haga doble clic en el botón Comando, aterrizará en la ventana del editor VB.
  • Copie y pegue este código entre Private Sub CommandButton1_Click () y End Sub y haga clic en Guardar icono .
  • Desde la ventana del editor de VB, haga clic en Comando de archivo y haga clic en Cerrar y volver a Microsoft Excel.
  • Haga clic en el Modo de diseño para desactivarlo .

Ahora haga clic en el botón de comando Hoja:

  • Aparecerá el primer cuadro de entrada , luego seleccione Lista separada por comas en (B4: B6) y termine con Aceptar.

  • Aparecerá el segundo cuadro de entrada , seleccione cualquier celda individual como hice E4 y termine con el botón Aceptar.

Encontrará la lista en Filas como se muestra en Captura de pantalla.

NB Ajuste las referencias de celda según sea necesario.

EDITADO:

He editado el cargo desde PeterH tiene me sugieren para quitar el espacio blanco de la salida de la columna E .

  1. Formar la hoja Presione ALT + F11 para abrir el Editor VB.
  2. Busque el nombre de la hoja de Project Explorer Windows a la izquierda.
  3. Seleccione y haga clic derecho en el nombre de la hoja.
  4. Busque Insertar desde el menú y luego haga clic en el comando Módulo .
  5. Copie y pegue este código y guarde para devolver la hoja.

     Option Explicit
    
     Sub TrimXcessSpaces()
    
      Dim cl As Variant
    
      For Each cl In Selection
         If Len(cl) > Len(WorksheetFunction.Trim(cl)) Then
             cl.Value = WorksheetFunction.Trim(cl)
         End If
      Next cl
    End Sub
    

Tenga en cuenta que agregue este código justo antes del End Sub en el código anterior (verifique el código anterior).

Call TrimXcessSpaces
  1. Desde la hoja Haga clic en el botón Comando , la salida se verá como se muestra a continuación.

ingrese la descripción de la imagen aquí


Gracias @PeterH ,, LOL, al comentar que realmente extrañé el código para incluir. Ahora se ha agregado. Gracias me lo pediste. :-)
Rajesh S

+1 de mi parte, gran respuesta, lo único que falta es que todavía se incluyen espacios en la salida
PeterH

Gracias @PeterH, por apreciar mis esfuerzos, déjame ver cómo ajustar los espacios.
Rajesh S

@ PeterH, solo revise la publicación que he editado para eliminar los espacios en blanco de la salida.
Rajesh S
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.