Como simplificar condiciones en EXCEL

Buenas tardes expertos,

Intento hacer que EXCEL me gestione un almacén donde tengo algunas cajas que me pueden ocupar tres espacios a lo ancho, y utilizo las filas y columnas de EXCEL para simular un poco el almacén.

Tengo este código, y quisiera saber como siplificarlo usando un For Next, o un For Each Next, o algo que no me obligue a escribir todas las posibilidades.

En este ejemplo utilizo un rango de A1 hasta F2. Gracias de antemano! Saludos.
Public Sub Gran()
If Range("A1") = 0 And Range("B1") = 0 And Range("C1") = 0 Then
Range("A1:C1") = Range("F5")
ElseIf Range("B1") = 0 And Range("C1") = 0 And Range("D1") = 0 Then
Range("B1:D1") = Range("F5")
ElseIf Range("C1") = 0 And Range("D1") = 0 And Range("E1") = 0 Then
Range("C1:E1") = Range("F5")
ElseIf Range("D1") = 0 And Range("E1") = 0 And Range("F1") = 0 Then
Range("D1:F1") = Range("F5")
ElseIf Range("A2") = 0 And Range("B2") = 0 And Range("C2") = 0 Then
Range("A2:C2") = Range("F5")
ElseIf Range("B2") = 0 And Range("C2") = 0 And Range("D2") = 0 Then
Range("B2:D2") = Range("F5")
ElseIf Range("C2") = 0 And Range("D2") = 0 And Range("E2") = 0 Then
Range("C2:E2") = Range("F5")
ElseIf Range("D2") = 0 And Range("E2") = 0 And Range("F2") = 0 Then
Range("D2:F2") = Range("F5")
End If
End Sub
Private Sub CommandButton3_Click()
Application.Run "Hoja1.gran"
End Sub

1 respuesta

Respuesta
1

Me salió esta macro. Revisa desde la fila 1 y la columna 1. Puedes poner más filas y más columnas

Sub almacen()
'Por.Dante Amor
    f = 2
    c = 6
    For i = 1 To f 'filas
        For j = 1 To c 'columnas
            n = 0
            lugar = False
            For k = 1 To 3
                If j + n > c Then
                    lugar = False
                    Exit For
                End If
                If Cells(i, j + n) = 0 Then
                    lugar = True
                Else
                    lugar = False
                    Exit For
                End If
                n = n + 1
            Next
            If lugar Then
                Range(Cells(i, j), Cells(i, j + 2)) = Range("F5")
                Exit For
            End If
        Next
        If lugar Then Exit For
    Next
End Sub

Saludos.Dante Amor

Si es lo que necesitas. No olvides valorar la respuesta.

Mil GRAAAAACIAAAAAS!!!!!

Es una respuesta PERFECTA, cumple exactamente con lo que necesito.

Sino es mucho pedir, ¿me podrías explicar que es lo que hace a partir de "n = n + 1" ? Es que a partir de ahí me cuesta seguir el programa y no se del todo lo que hace. Tampoco entiendo el porqué del contador de "n". Merci.

Otra cosita, ¿como puedo hacer para que cuando defina cuantas filas y columnas son, decirle que la fila empieza por ejemplo a partir de la celda G8 y la columna también?

Gracias de antemano.

Para establecer una celda inicial, el número de filas y el número de columnas, utiliza la siguiente macro. Cambia G8 por la celda inicial, cambia f=3 por el número de filas y c= 9 por el número de columnas.

Sub almacen()
'Por.Dante Amor
    Set celda = Range("G8") 'celda inicial
    f = 3                   'número de filas
    c = 9                   'número de columnas
    '
    fini = celda.Row        'fila inicial
    cini = celda.Column     'columna inicial
    f = fini + f - 1
    c = cini + c - 1
    For i = fini To f 'filas
        For j = cini To c 'columnas
            n = 0
            lugar = False
            For k = 1 To 3
                If j + n > c Then
                    lugar = False
                    Exit For
                End If
                If Cells(i, j + n) = 0 Then
                    lugar = True
                Else
                    lugar = False
                    Exit For
                End If
                n = n + 1
            Next
            If lugar Then
                Range(Cells(i, j), Cells(i, j + 2)) = Range("A1")
                Exit For
            End If
        Next
        If lugar Then Exit For
    Next
End Sub

El contador "n" lo utilizo para saber cuántas columnas se han ocupado, si ya no hay columnas disponibles, entonces se pasa a la siguiente línea.

El ciclo For k = 1 to 3, lo utilizo para revisar si, en una misma fila hay 3 celdas consecutivas libres, si existen las 3 entonces lugar = true (verdadero), si el lugar es verdadero entonces copio el valor de la celda en las 3 celdas consecutivas.

Gracias por la rapidez en contestar, la paciencia en explicármelo todo muy bien detallado y gracias también por el tiempo que me has dedicado.

Saludos, 

Adrià Polls

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas