Excel - Consulta sobre Macro

   
Vista:

Consulta sobre Macro

Publicado por ToniRM (2 intervenciones) el 21/11/2013 15:33:17
Muy buenas,

Estoy intentando encontrar la solución a este problema, veran:

Sub DiEst()
Dim N As Date
Dim M As Date
N = Range("C6").Value
M = Range("E9").Value
R = M - N
Range("I9").Value = R
End Sub

Es una aplicacion para que me cuente la diferencia de dias:

N= Es un valor fijo, siempre estará en esa celda. (Fecha de entrada)
M=Es un valor variable (Fecha de salida), está a partir de la celda E9 hasta N veces, ya que hay días que habrá mas entradas y otros menos. Pero siempre en esa columna.
R= Es la diferencia de días , que irá puesto a partir de la celda I9.


Claro de la manera que lo tengo hecho, solo me da para el primer valor, pero he estado mirando con el While Wend, y no sé como poner la condición de que me lo haga siempre que haya datos a partir de la columna/fila E9 hacia abajo, y que luego me los vaya escribiendo en la columna/fila I9 hacia abajo.

Sé que no es muy complicado, pero estoy empezando con esto, y lo he intentado con el ActiveCell, luego poniendo ActiveCell.Offset., seleccionando el Rango...pero no lo consigo.

No sé como poder solucionarlo, les estaría muy agradecido que pudieran ayudarme.

Un saludo!

También lo puse en consulta dentro del Foro Visual Basic, porque no sé donde encajaría mejor mi consulta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana

Consulta sobre Macro

Publicado por Antoni Masana (264 intervenciones) el 22/11/2013 07:03:43
Esta es la formula


1
2
3
4
5
6
7
8
9
10
11
12
13
Sub DiEst()
    Dim N As Date
    Dim M As Date, Lin as Byte '  Byte hasta 255 - Integer hasta 36535 - Long El resto
 
    N = Range("C6").Value
    Lin = 9
    While IsDate(Cells(Lin, 5))
        M = Cells(Lin, 5)
        R = M - N
        Cells(Lin, 9) = R
        Lin = Lin + 1
    Wend
End Sub


Más simple

1
2
3
4
5
6
7
8
9
10
Sub DiEst()
    Dim N As Date, Lin as Byte '  Byte hasta 255 - Integer hasta 36535 - Long El resto
 
    N = Range("C6").Value
    Lin = 9
    While IsDate(Cells(Lin, 5))
        Cells(Lin, 9) = Cells(Lin, 5) - N
        Lin = Lin + 1
    Wend
End Sub


Y más simple aun

1
2
3
4
5
6
7
8
9
Sub DiEst()
    Dim Lin as Byte '  Byte hasta 255 - Integer hasta 36535 - Long El resto
 
    Lin = 9
    While IsDate(Cells(Lin, 5))
        Cells(Lin, 9) = Cells(Lin, 5) - Range("C6").Value
        Lin = Lin + 1
    Wend
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sobre Macro

Publicado por jcs (494 intervenciones) el 22/11/2013 08:52:13
Muy buenas.

Las macros son extremadamente útiles y dan solución a problemas imposibles de resolver de otra forma, pero no siempre son la mejor alternativa. Por ejemplo, en tu caso, yo creo que te podría servir una simple fórmula, poniendo en I9
=M9-N$6
y luego copiando hacia abajo.

Pero bueno, es una alternativa a la que te ofrece Antoni, que es perfectamente correcta.

Un saludo. Juanjo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Consulta sobre Macro

Publicado por Antoni Masana (264 intervenciones) el 22/11/2013 09:49:11
Se me olvido comentar lo de la formula, pero tiene razón Juanjo otra opción mucha más simple es poner una formula y en este caso con una condición:

1
2
3
4
Celda C9  ==>  =SI(ESNUMERO(E9 );E9 -C$6;"")
Celda C10 ==>  =SI(ESNUMERO(E10);E10-C$6;"")
Celda C11 ==>  =SI(ESNUMERO(E11);E11-C$6;"")
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar