Saltar al contenido

pasar a columnas los datos de otra columna


nlopez

Recommended Posts

publicado

buen dia estimados, a la espera que estén muy bien, los molesto para pedir ayuda con un Excel que tengo

dentro de un Excel tengo datos hasta la columna H, y en la columna G me envían unos datos concatenados los cuales desearía separar y ordenar en varias columnas;  que deseo separar y se ordene a partir de la ultima columna vacía, en este caso es la columna I .

trataré de explicarlo, la data que tengo en la columna G es una cadena separa por "|" y mas o menos es asi

|ISOPR|PREVI|NUTRI|DERMA|
|FLUIM|FLUIM|FLUTX|OTOZA|RINOC|
|FLUIM|CETRA|
|FLUIM|FLUTX|FOSTE|RINOC|
|
|
|
|
|
|
|
|
|
|FLUIM|ISOPR|DERMA|

como pueden ver el orden no siempre es el mismo y cada dato desearía ponerlo como cabecera y que cuente las veces que se muestra

 

publicado

Hola,

Sin tener un archivo donde ver exactamente cómo están ubicados los datos, es complicado dar respuestas concretas.

Se me ocurre que con la utilidad 'Texto en columnas' (que está en la hoja 'Datos') puedes separar en columnas los datos que se encuentren [más o menos] juntos en una única columna. Quizá copiando esa columna G en otra que esté en blanco, puedas conseguir ese objetivo. Excel ya acepta, si eliges 'Delimitados', el carácter "|" como separador.

En cuanto a tu último texto:

Hace 10 horas, nlopez dijo:

...el orden no siempre es el mismo y cada dato desearía ponerlo como cabecera y que cuente las veces que se muestra...

al menos a mí no me queda claro el significado.

Repito: lo ideal es que subas un archivo con los datos tal cual los tienes, por ejemplo en Hoja1, y añadas a mano, en Hoja2, cómo quieres que se vea el resultado que esperas obtener. No hace falta que sean muchos; supongo que con 4 o 5 ejemplos serán suficientes para entender el problema.

Saludos,

publicado

Hola de nuevo,

El archivo tienes que adjuntarlo en el propio comentario. Creo que no están autorizados los enlaces externos, aparte de que entenderás que bastantes colaboradores (yo soy uno de ellos) tengan algún reparo en clicar links de procedencia desconocida. No dudo que tus intenciones sean buenas y ese link sea totalmente inocente, pero entiende también mi posición.

Saludos,

publicado

es cierto que dar click a cualquier enlace es de mucho riesgo.

pero no encuentro como adjuntar mi archivo, en la parte inferior tengo un icono que dice INSERTAR OTRO MEDIO luego me muestra la opcion de EXISTENTES y no puedo adicionar mi archivo

si me puedes guiar por favor

publicado
Hace 15 minutos , GabrielRaigosa dijo:

Esta es la formula que puse en "I2"

=--NO(ESERROR(HALLAR(I$1,$G2)))

Rellenar la región donde estan los numeros actuales con ella,

Saludos

 

perfecto, si ayuda. muchas gracias

mi tema es que el dato en la columna G, donde esta la data concatenada, no se sabe que datos se tiene, es decir, pueden adicionar un nombre nuevo y yo no me entero hasta revisar toda la data.

esa es mi principal traba, como generar el encabezado que tengo desde "I1" a partir de toda la data, luego llenar la informacion.

publicado
Hace 2 horas, GabrielRaigosa dijo:

No se si puede ver imagenes, ahora, yo uso Excel 365 y he hecho esto:

image.thumb.png.832fed268324df4d748bf0b0dfa1e2b3.png

Y como tiene Excel WEB puede ensayar.

gracias por la sugerencia, si uso el Office 365, y con el Excel 365 de escritorio  mayormente

lo probé y no tengo la función DIVIDIRTEXTO

otro tema es que hay ocasiones como en la celda G3 que se repite dos veces FLUIM , por lo tanto en esa columna debería de pintar DOS en lugar de UNO, es decir que cuente las veces que se repite.

otra consulta, mi archivo es de mas o menos 15,000 registros, se debe de marcar el rango exacto, es decir G:G en lugar de G2:G15 en la formula; o esto no seria recomendable

publicado

Que tal  a todos, me permito proponer una solución alternativa:

=(LARGO($G2)-LARGO(SUSTITUIR($G2;I$1;"")))/5

Espero les sea útil.

publicado
Hace 17 horas, nlopez dijo:

DIVIDIRTEXTO

Entendido.

https://support.microsoft.com/es-es/office/función-textsplit-b1ca414e-4c21-4ca0-b1b7-bdecace8a6e7?ns=excel&version=90&syslcid=3082&uilcid=3082&appver=zxl900&helpid=xlmain11.chm60673&ui=es-es&rs=es-es&ad=es

Es posible que aún no tenga disponible esa función en el Excel de escritorio, yo me uní al programa Insider (Versión Preliminar), es por eso que ya tengo esa función, tal vez podria ensayar ese canal insider, a mi me ha funcionado bien, me sali del canal beta ya que en algun momento me dio problemas.

Con respecto al conteo de los elementos repetidos la solución aportada por @Oscar_MRFfunciona bien para el archivo de muestra, en la imagen si notará que las cadenas deberian estar todas en mayusculas para que funcione, supongo que su sistema las entrega siempre en mayusculas.

image.thumb.png.4801481f08130f503ba4505e241a83ec.png

 

Mezclas como estas dan problemas

image.thumb.png.3f352c6ca4190aff68c52eae73489490.png

 

La region de la izquierda se puede convertir en TABLA, le he dado el nombre de "Datos"

image.png.9d4d6ca3dbe4593bb05d3a335b987aca.png

 

Formula para la celda J1:

"=TRANSPONER(ORDENAR(UNICOS(DIVIDIRTEXTO(UNIRCADENAS(Datos[STRINGVADEMECUM];VERDADERO;Datos[STRINGVADEMECUM]);;"|";VERDADERO))))"

Formula para la celda J2:

"=(LARGO(Datos[STRINGVADEMECUM])-LARGO(SUSTITUIR(Datos[STRINGVADEMECUM];J$1#;"")))/5"

Al ser una tabla no se selecciona la columna "G" completa, se hace referencia al campo "Datos[STRINGVADEMECUM]"

 

Saludos.

publicado

muchas gracias @Oscar_MRF y @GabrielRaigosa por el tiempo dedicado en mi tema

si me funcionó muy bien sus sugerencias en ambiente de prueba, es decir hasta 750 registros, a partir de ello la formula para el encabezado no funciona solo dice "#CALC!" tanto si se usa como tabla como si se usa sin la tabla.

para contar los nombres si funciona ambas opciones en mis 15,000 registros

 

  • 3 weeks later...
publicado

SUgiero utilizar el comando Flash Fill

Me explico. En tu columna G tienes esto:

 

STRINGVADEMECUM
|ISOPR|PREVI|NUTRI|DERMA|
|FLUIM|FLUIM|FLUTX|OTOZA|RINOC|
|FLUIM|CETRA|
|FLUIM|FLUTX|FOSTE|RINOC|

|FLUIM|ISOPR|DERMA|

 

 entendiendo STRINGVADEMECUM como la cabecera de la columna

En la Columna H, en la misma fila, escribes 

|ISOPR{ENTER} y en la nueva fila tecleas 

|FLUIM{ENTER}

automáticamente el comando debe proponerte toda la columna entera como tu deseas,

Si no lo propone puedes probar con el shortcut CTRL-SHIFT-E seleccionando, después de haber metido dos o tres filas como queda dicho, selecccionando la columna H desde el principio de lo escrito y hasta la última línea valída de G.

Acabo de probarlo con tus datos y  ami si que me funciona.

NOTA: NO hace falta que haya tablas, G y H pueden ser simples rangos.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.