Saltar al contenido

Insertar un número determinado de filas a partir de un número determinado a elegir


Recommended Posts

publicado

Buenas tardes, 

Necesito ayuda en varios aspectos, me he bloqueado y a pesar de haber intentado varios métodos no consigo llegar a lo que necesito.

Adjunto archivo con una pequeña prueba.

1. Necesito insertar un número determinado de filas desde A1 hacia abajo, a partir de la cantidad que ponga en B2, será entre 1 y 6 máximo, pero es por no estar insertando manualmente. Lo he intentado con la siguiente macro, pero siempre tengo que tener la celda bien marcada y con al menos 2 filas ya fijadas para que se quede el mismo formato, no sé si existe otra forma de hacerlo:

Sub InsertarFilas()
 Dim numFilas As Long
     Preguntar al usuario por el número de filas a insertar
    numFilas = Application.InputBox(Prompt:="Filas a insertar:", Type:=1)
     Validar si el número de filas indicado es superior a cero
    If numFilas > 0 Then
        'Insertar filas
        Rows(ActiveCell.Row & ":" & ActiveCell.Row + numFilas - 1).Insert
    End If
End Sub

2. Al tener el número de filas, necesito que se copie el nombre (B2) seguido del número (C2), por ejemplo MIKE 01, y en cada fila poner mismo nombre pero seguido del siguiente número, en este caso sería MIKE 02,  y así sucesivamente. Para este caso, ni con CONCATENAR, ni usando & lo he conseguido, ya que añadir una valor más al número no me deja.

3. Por último, en la celda J de la fila correspondiente, usar los datos en una sola línea (como en el ejemplo), que he usado CONCATENAR, pero si en alguna celda pongo 0, me gustaría que no apareciera ese dato. De esto, le he dado mil vuelta y no consigo dar con absolutamente nada.

Gracias de antemano, por simplemente leer la entrada. Toda ayuda sería de gran ayuda. Un saludo

 

Prueba.xlsx

publicado

Qué tal @Melisa,

 

Deberías subir tu archivo con un ejemplo de cómo quedaría en un caso real, por ejemplo poniendo el nombre y número y poniendo la tabla con todos los valores que tendría que tener.

Por otro lado ¿Las celdas con LOXIII, LOXII, LOXI, etc. qué significan? ¿Se copiaran tal cuál en todas las filas que se pusiesen?

publicado

Buenos días @Haplox,

Gracias por tu respuesta. 

Como me has comentado, subo archivo con lo que necesito, ya tiene las macros necesarias para que consiga los puntos 2 y 3, pero necesito que si pongo en B2 determinado número, se creen esas filas a partir de A5 con las fórmulas y todo.

Gracias de antemano.

Prueba_01.xlsm

publicado

Saludos totales.

recording-2023-03-24-10-06-14.gif

Dejo mi propuesta esperando sea de utilidad en algo o pueda ser editada según las necesidades de @Melisa

En 23/3/2023 at 8:52 , Melisa dijo:

1. Necesito insertar un número determinado de filas desde A1 hacia abajo, a partir de la cantidad que ponga en B2, será entre 1 y 6 máximo, pero es por no estar insertando manualmente. Lo he intentado con la siguiente macro, pero siempre tengo que tener la celda bien marcada y con al menos 2 filas ya fijadas para que se quede el mismo formato, no sé si existe otra forma de hacerlo:

Mi propuesta es que en lugar de insertar las filas, repliquemos ese rango con formato el mismo número de filas que escribas en B2.

En 23/3/2023 at 8:52 , Melisa dijo:

2. Al tener el número de filas, necesito que se copie el nombre (B2) seguido del número (C2), por ejemplo MIKE 01, y en cada fila poner mismo nombre pero seguido del siguiente número, en este caso sería MIKE 02,  y así sucesivamente. Para este caso, ni con CONCATENAR, ni usando & lo he conseguido, ya que añadir una valor más al número no me deja.

Esa parte si la entendí bien, creo se logra de manera adecuada.

En 23/3/2023 at 8:52 , Melisa dijo:

3. Por último, en la celda J de la fila correspondiente, usar los datos en una sola línea (como en el ejemplo), que he usado CONCATENAR, pero si en alguna celda pongo 0, me gustaría que no apareciera ese dato. De esto, le he dado mil vuelta y no consigo dar con absolutamente nada.

Esta última parte mi poca experiencia en VBA me limitó a cumplir por código al detalle lo que describes, te puedo compartir que la fórmula se coloque en el mismo rango que ha pegado "las filas", incluso que concatene los valores con los encabezados. Mi detalle fue que al terminar la sentencia las celdas están vacías, pero el encabezado no y termina concatenando si llega haber un valor 0. Si antepusiera  la condición 0, no te concatenaría nada porque los valores de inicio  no tienen nada.

Tal vez si te interesas por alguna solución posterior con funciones, algo se podría hacer. Pero ya no me quedaría dentro de la misma sentencia.

Aunque seguro tendrás más propuestas de soluciones.

Espero haber ayudado un poco.

Saludines.

Prueba.xlsm

publicado
En 23/3/2023 at 16:56 , Haplox dijo:

Por otro lado ¿Las celdas con LOXIII, LOXII, LOXI, etc. qué significan? ¿Se copiaran tal cuál en todas las filas que se pusiesen?

Sigo preguntando lo mismo... ¿O acaso esos valores los pones a mano?

publicado

Hola @Haplox, lo siento, había olvidado darte respuesta a esto en concreto...

Las celdas que me comentas serían siempre con el mismo "texto", es decir, es un nombre de algo concreto que no cambiaría.

Un saludo.

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.