Saltar al contenido

borrar y pintar bloques de datos


Recommended Posts

publicado

Estimados, buenos días

Me comunico con ustedes ya que estoy con un problema de programación. Tengo idea de como sería la estructura pero no de como es el código ya que yo programaba en pascal / delphi.

La planilla es para evaluar ofertas de equipos médicos con una puntuación que está en la hoja 2 llamada listas. Eso lo solucioné y anda bien, hace la suma y todo eso.

Lo que pretendo ahora es poder borrar los ítems que los oferentes no presentan. Si bajan la planilla, en la hoja 1 llamada Evaluación por ítems vemos que hay columnas que agrupan a las empresas y filas que agrupan los equipos ofrecidos. La idea sería que el programa busque dentro de las columnas de con datos (for si columna <> vacio) filas desde la 9 (y cada nueve que es donde van los precios de lo ofertado ....) y si es vacía que borre la econtrada más siete y las ocho filas de la columna de al lado....así hasta el último ítems distinto de vacío.

Lo de pintar, sería que se fijara recorriendo las filas de puntaje final (fila 10, 19, 28....) y si es el mayor de esa fija pintar las ocho filas como se ve en la planilla.

Se que es bastante y para mi lo más importante sería lo de borrar...si lo de pintar o colorear se logra sería fantástico!

Desde ya muchas gracias.

Saludos

Chikyto

2012 VI 05 - Prueba - Proforma de evaluación de oferentes.zip

publicado

Hola Chikyto, antes de complicarla demasiado... ¿ya probaste usando las funciones propias de Excel: Formato Condicional y Borrar Duplicados? Parece que esas funciones -vienen desde Excel 2007- cumplen la tarea. Si lo que necesitás es algo más estructurado ahí sí hay que meterse de lleno en VBA.

publicado

La verdad que no porque como siempre parto de una planilla completa, donde tengo repetido todas las filas en los grupos esos de 8 filas, porque cada vez que evalúo un equipo debo completarla y no siempre las evaluaciones son de la misma cantidad de ítems, entonces quería hacer una macro que recorriera y pueda borrar lo no usado!

Gracias de todos modos

publicado

Simplemente fantástico...modifiqué varias cosas de formas pero nada de la base que fue lo que me mandaste. No se porque en esa planilla arrancaba en la columna B y fila 6 así que rehice todo eso, sacando filas y columnas innecesarias y cambié el color por uno RGB. La verdad que así me lo imaginaba pero es que no conozco la sintaxis.

Ahora hice la planilla con muchas más filas y columnas, las cuales como viste se repiten y se me ocurrió pensar en si hay una forma de que al abrir el archivo, aparezca un mensaje donde poner la cantidad de empresas y la cantidad de equipos o ítems a evaluar y que se cargue solo eso....pero de todos modos, es fantástico, me funciona a la perfección. Voy a colgar la planilla final porque le puede servir a alguien más.

Saludos y nuevamente muchas gracias

Chikyto

Evaluación de oferentes 2003.zip

publicado
modifiqué varias cosas de formas pero nada de la base que fue lo que me mandaste. No se porque en esa planilla arrancaba en la columna B y fila 6 así que rehice todo eso, sacando filas y columnas innecesarias y cambié el color por uno RGB. La verdad que así me lo imaginaba pero es que no conozco la sintaxis.

Perfecto entonces, porque hice mucho más código del necesario justamente por esos 2 motivos:

1º) para permitirte aprender este lenguaje

2º) para hacerlo más adaptable a las variaciones de la planilla: si dejaba celdas "fijas" de inicio -tipo Range("A1")- cada vez que agregues filas y/o columnas (o muevas los datos), debías meterte a corregir el código.

Ahora hice la planilla con muchas más filas y columnas, las cuales como viste se repiten y se me ocurrió pensar en si hay una forma de que al abrir el archivo, aparezca un mensaje donde poner la cantidad de empresas y la cantidad de equipos o ítems a evaluar y que se cargue solo eso....

Esto es posible, pero quizás resulte molesto. A mi personalmente me resulta más cómodo dejar esos datos en una celda que esté en desuso y que las variables tomen los valores necesarios de esas celdas.

Ejemplo:

- en la celda Listas!A20 coloco el dato Para Celda Empresa 1 (D1, sin las comillas)

- Luego, en VBA, asignación de variables iniciales, cambio la línea

Set celdaPrimerEmpresa = Planilla.Range("D1")

por esta otra:

Set celdaPrimerEmpresa = Range(ThisWorkbook.Sheets(2).Range("A20").Value)

y de igual manera proceder con las otras variables que quieras controlar desde afuera del código.

Aplaudo la actitud de compartir el archivo con las modificaciones finales :encouragement:.

--------

TEMA SOLUCIONADO

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.