Saltar al contenido

Sustituir valores con base a criterios


Recommended Posts

publicado

Buenas tardes solicito de nuevo su apoyo.

En este caso tengo el siguiente problema

si en la columna ("f") esta el valor "0", verificar si el numero de la columna ("d") de la misma fila tiene en otra fila un numero mayor o igual a "1", si es así sustituir el valor "0" de la columna ("f") por el valor "99"

y no tengo ni idea de como hacerlo.

DISCUL UUSTEDES, ADJUNTO OTRO ARCHIVO ESPERANDO SER UN POCO MAS CLARO. COMO LES COMENTABA NO SE COMO ESTIPULAR ESTA CONDICION, SE LOS PUSE UN POQUITO MAS GRAFICO. LES AGRADESCO MUCHO SU APOYO.

SALUDOS CORIDIALES.

EJMPLO 112.xls

publicado

Hola.

Prueba esta macro:

Sub sustituirnumero()
Dim x As Byte
Dim rng As Range
Set rng = Range("F2:F14")
For Each cel In rng
If cel = 0 And cel.Offset(, -2) >= 1 Then
cel.Value = 99
End If
Next
End Sub

Un saludo.

publicado
Hola.

Prueba esta macro:

Sub sustituirnumero()
Dim x As Byte
Dim rng As Range
Set rng = Range("F2:F14")
For Each cel In rng
If cel = 0 And cel.Offset(, -2) >= 1 Then
cel.Value = 99
End If
Next
End Sub

Un saludo.

muchas gracias toldeman pero esta macro me sustituye todos los valores con "0" sin tomar en cuenta los criterios,

si hay un "0" en la columna "f" que revise si el valor que tiene en la columna "d" tiene en otra fila un valor mayor a "0", y si es asi que sustituya el valor "0" de la columna "f", si no que no haga nada.

publicado

oshimate

Gusto en saludarte, se me ocurre algo con formulas, favor revisa el adjunto y comenta.

Toldeman te envio un abrazo desde el sur de America.

Saludos Cordiales

Pedro

- - - - - Mensaje combinado - - - - -

oshimate

Lo proporcionado por Toldeman es tal cual lo que pides en al adjunto.

Revisa el mensaje que pusiste en el adjunto y comenta que es lo que necesitas.

Saludos Cordiales

Pedro

EJMPLO 112_petercien.xls

publicado

Hola a todos,

Oshimate, la macro esta bién, ahora te interpreto de otra forma que la celda anterior en la columna F que precede al valor o debe ser = 1, porque al convertirse a 99 es mayor que 1. luego tendría otro IF.

Sub sustituirnumero()

Dim x As Byte

Dim rng As Range

Set rng = Range("F2:F14")

For Each cel In rng

If cel = 0 And (cel.Offset(, -2) >= 1) Then

If (cel.Offset(-1, 0) = 1) Then

cel.Value = 99

End If

End If

Next

End Sub

Saludos

- - - - - Mensaje combinado - - - - -

Hola a todos,

Oshimate, la macro esta bién, ahora te interpreto de otra forma que la celda anterior en la columna F que precede al valor o debe ser = 1, porque al convertirse a 99 es mayor que 1. luego tendría otro IF.

Sub sustituirnumero()

Dim x As Byte

Dim rng As Range

Set rng = Range("F2:F14")

For Each cel In rng

If cel = 0 And (cel.Offset(, -2) >= 1) Then

If (cel.Offset(-1, 0) = 1) Then

cel.Value = 99

End If

End If

Next

End Sub

Saludos

publicado

Pedro un gusto en tener noticias tuyas, recibe un fuerte abrazo y mis mejores deseos.

En cuanto a la consulta creo que el forero o no ejecuto la macro o yo entendi mal.

Un saludo a todos.

publicado

señores les paso un ejemplo mas completo el codigo solo cambia algunos "0", soy muy nuevo en esto trato de entender el codigo pero aun no lo decifro, como para poderlo editar a lo que necesito.agradesco infinitamente su apoyo.les mando saludos cordiales.

- - - - - Mensaje combinado - - - - -

señores les paso un ejemplo mas completo el codigo solo cambia algunos "0", soy muy nuevo en esto trato de entender el codigo pero aun no lo decifro, como para poderlo editar a lo que necesito.agradesco infinitamente su apoyo.les mando saludos cordiales.

EJMPLO 112 2 ejemplo.xls

publicado
señores les paso un ejemplo mas completo el codigo solo cambia algunos "0", soy muy nuevo en esto trato de entender el codigo pero aun no lo decifro, como para poderlo editar a lo que necesito.agradesco infinitamente su apoyo.les mando saludos cordiales.

- - - - - Mensaje combinado - - - - -

señores les paso un ejemplo mas completo el codigo solo cambia algunos "0", soy muy nuevo en esto trato de entender el codigo pero aun no lo decifro, como para poderlo editar a lo que necesito.agradesco infinitamente su apoyo.les mando saludos cordiales.

Hola.

Sube de nuevo un ejemplo:

En las columnas D Y F pon Los valores originales y en las columnas A Y B pon como deberia de quedar los valores una vez ejecutado el codigo.

Un saludo.

publicado

oshimate

Definitivamente no entiendo

LO QUE PRETENDO ES LO SIGUENTE:

SI EN LA COLUMNA ("F") ESTA EL VALOR "0",

VERIFICAR SI EL NUMERO DE LA COLUMNA ("D") DE LA MISMA FILA TIENE EN OTRA FILA UN NUMERO MAYOR O IGUAL A "1", SI ES ASÍ SUSTITUIR EL VALOR "0" DE LA COLUMNA ("F") POR EL VALOR "99"

Lo que te destaco en rojo me confunde completamente,

Verificar si F = cero, facil.

Verificar si D de la misma fila tiene valor mayor o igual a 1, facil.

Pero eso que "tiene en otra fila un numero mayor o igual a 1", me confunde, ya que todos los valores de la columna D son mayores a 1, y por ende lo que te proponemos cumple con eso.

Ahora si alguien entiende otra cosa le pido por favor me lo explique

Saludos Cordiales

Pedro

publicado
oshimate

definitivamente no entiendo

lo que te destaco en rojo me confunde completamente,

verificar si f = cero, facil.

Verificar si d de la misma fila tiene valor mayor o igual a 1, facil.

Pero eso que "tiene en otra fila un numero mayor o igual a 1", me confunde, ya que todos los valores de la columna d son mayores a 1, y por ende lo que te proponemos cumple con eso.

Ahora si alguien entiende otra cosa le pido por favor me lo explique

saludos cordiales

pedro

jajajajaja yo tambien estoy un poco confundido pero haber.

1:verificar si f = cero

2:verificar el valor de "ese cero" en la columna d.

Un ejemplo.

D f

5 0

5 1

5 0

6 0

6 0

6 0

en este caso el valor de "ese cero" en la columna d es igual a "5"

3:verificar si el valor "5" de la columna d tiene un valor mayor a "0" en la columna f.

4:si es asi que cambie el "ese cero" por el valor 99.

Asi tendria que quedar despues de correr el codigo.

D f

5 99

5 1

5 99

6 0

6 0

6 0

se sustituyen los "0" de la columna f porque el valor 5 de la columna d tiene el valor "1" en la columna f

imaginense que tengo una base de datos de "50000" filas y en la columna d tengo mis ordenes de compra, y en la columna f tengo mis productos.

Imaginense que la orden de compra era de 3 productos, pero 2 de ellos no se despacharon, el identificarlos con el valor 99 seria mas facil para otros codigos que necesite hacer.

Ojala me explique mejor con esto.

Gracias por su esfuerzo

un abrazo desde mexico

publicado
revisa el adjunto, lo realice con funciones, ya que macros no tengo el poder.

Saludos cordiales

pedro

ok al parecer lo hace perfecto. Solo que no entiendo tu formula, podrias ilustrarme un poco mas.

Como la podria adapta a un rango de 50000 filas.?

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.