Excel - DUDA MACRO

 
Vista:
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 12/02/2019 12:23:42
Hola a todos

Soy nuevo programando y tengo una dudas con las macros de excel.

Tengo una tabla con muchos datos. Cada fila indica un aparato con sus características.

Lo que quiero hacer es que cuando un valor supere los límites que le indico (Hasta ahí si lo he hecho bien), ponga ese dato en color rojo(También me ha salido) y además toda la fila que contiene todos los datos del aparato me la copie y me la pegue en otra hoja(NO he sabido hacer este paso)

¿Alguien me podría ayudar a programar el paso para que cuando un dato supere el limite(Con que solo uno supere los limites me vale) ponga toda la fila en la hoja 2?.

Gracias a todos
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
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 13/02/2019 13:46:56
Gracias Antoni.

Subo el archivo.

Yo lo que quiero es programar para que cuando una fila tenga un valor superior al indicado(he realizado la macro para que esos valores los marque en rojo), TODA la fila se copie y pegue en la hoja dos del archivo.

También me gustaría saber como poner para que el programa funcione hasta la ultima fila con datos. (Hasta ahora lo he puesto manual. Si se añade una fila, tengo que meterme en la macro y colocar la nueva fila)

Gracias por la ayuda

PD:La macro está dentro del archivo

objetosv1
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
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por Antoni Masana (2477 intervenciones) el 13/02/2019 14:06:39
Esto te resuelve el problema del numero de filas y hace más clara la lectura de la macro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Objeto()
    Dim i As Byte
    i = 2
    While Cells(i, 1) <> ""
        If Cells(i, 3) = "1" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3
        End If
 
        If Cells(i, 3) = "2" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3
        End If
    Wend
End Sub

Esto copia una fila a otra hoja y se consigue con la mágica opción de GRABAR MACRO.

1
2
3
4
5
6
7
8
Sub Macro1()
    Range("A11:G11").Select
    Selection.Copy
    Sheets("Hoja2").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("Hoja1").Select
End Sub

Ahora hay que hacer unos cambios para adaptarla a la que ya tienes. En este momento no puedo, seguiré más tarde.

Saludos.
\\//_
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
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 13/02/2019 15:20:37
Gracias por la ayuda Antoni

Vale, cuando puedas me ayudas a resolver la macro para que copie y pegue cuando cumpla al menos una condición
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 13/02/2019 15:24:01
Al correr la macro se queda pillado el excel. Puede que sea el ordenador? O es algo de la macro que hace que su ejecución sea muy lenta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por Antoni Masana (2477 intervenciones) el 13/02/2019 15:49:30
Hay un error como no podia ser de otra forma. Falta una linea


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Objeto()
    Dim i As Byte
    i = 2
    While Cells(i, 1) <> ""
        If Cells(i, 3) = "1" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3
        End If
 
        If Cells(i, 3) = "2" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3
        End If
        i = i + 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
1
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 14/02/2019 09:54:43
Muchas Gracias por la ayuda.

No se si aquí se pueden dar estrellas o valoraciones, pero si se pueden te doy las máximas.
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
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 14/02/2019 10:21:05
Una última duda que no se hacer y lo acabo de ver:

Cómo se pone para que si la Temperatura tiene un dato superior al que queremos (Por tanto ese valor está marcado en rojo) se copie también a la hoja 2?.

Veo que hasta ahora sólo se copian y pegan los valores de la columna Nº de usos.

Gracias y disculpa las molestias.
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
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por Antoni Masana (2477 intervenciones) el 14/02/2019 16:45:39
En las lineas 34 y 39 hay un Copia = True que hace que copie cuando se da la condición de colorer por el numero de Usos.
Si quieres que copie en el caso de la temperatura hay que añadir otro Copia = True en las líneas 33 y 38

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Sub Objeto()
    Dim i As Byte, Copia As Boolean
 
    ' ---&--- Lo primero es limpiar ante de colorear
 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("A2").Select
 
    ' ---&--- Limpio la hoja2
 
    Sheets("Hoja2").Select
    Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.ClearContents
    Selection.Delete Shift:=xlToLeft
    Selection.Clear
    Range("A1").Select
    Sheets("Hoja1").Select
 
    ' ---&--- Coloreamos
 
    i = 2
    d = 2
    While Cells(i, 1) <> ""
        Copia = False
 
        If Cells(i, 3) = "1" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3:  Copia = True 
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3: Copia = True
        End If
 
        If Cells(i, 3) = "2" Then
           If Cells(i, 5) > 20 Then Cells(i, 5).Interior.ColorIndex = 3:  Copia = True 
           If Cells(i, 6) > 500 Then Cells(i, 6).Interior.ColorIndex = 3: Copia = True
        End If
 
        ' ---&--- Copia la fila
 
        If Copia Then
           Range("A" & i & ":G" & i).Select
           Selection.Copy
 
           Sheets("Hoja2").Select
           Range("A" & d).Select
           ActiveSheet.Paste
           Range("A" & d).Select
 
           Sheets("Hoja1").Select
           d = d + 1
           Range("A" & d).Select
        End If
 
        i = i + 1
    Wend
    Application.CutCopyMode = False
    Range("A" & i).Select
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por AITOR (7 intervenciones) el 15/02/2019 12:24:50
Muchas Gracias,

He metido este código a un excel de más de 2500 objetos y tengo varias dudas.

1. La variable Byte no funciona para tantos valores, ¿Pongo double?
2. No me funciona para valores decimales, ¿Como pongo para que me funcione?
3. Cuando una celda está vacía y no quiero que aplique la macro puse esto: and cells (i,127) <> "" ¿Está bien?

Aquí abajo dejo una línea del código. La duda 2 está en el 0.15 del código, que considera todos los valores de la celda 127 superiores a 0.15 y los marca a todos en rojo.Cuando no debería ser así.

If Cells(i, 15) = ">170" And Cells(i, 127) > 0.15 And Cells(i, 127) <> "" Then Cells(i, 127).Interior.ColorIndex = 3: Copia = True
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
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

DUDA MACRO

Publicado por Antoni Masana (2477 intervenciones) el 15/02/2019 14:01:58
Sobre el punto 1. El codigo correcto es

1
2
Sub Objeto()
    Dim i As Long, Copia As Boolean

Has 32767 con una variable Integer es suficiente, en caso de más líneas a de se tipo Long.

El segundo punto no lo acabo de entender. Envíame el libro y sobre la marcha haber si lo entiendo.

Una observación que puede ayudar a entender mejor el código: Cuando se trata de las primeras columnas es fácil identificar a que letra corresponde cada número, pero cuanto más a la derecha se desplaza uno ya la cosa se va complicando.

CELLS() Tiene dos parámetros el primero es la fila y el segundo la columna y esta ultima permite expresarla en número, que va muy bien cuando hay que hacer desplazamientos horizontales o texto.

Por ejemplo Esto: While Cells(i, 1) <> "" y esto While Cells(i, "A") <> "" funcionan igual.

Saludos.
\\//_
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