Excel - vba macro Help

 
Vista:
sin imagen de perfil

vba macro Help

Publicado por thomas (6 intervenciones) el 06/06/2018 19:16:16
producto cantidad precio unitario total
ACEIT.AGROPRO.900M 5 782 3910
ARVEJ.D.CABALLOS 12 303 3636
ARVEJ.D.CABALLOS -11 303 3636
ARVEJ.D.CABALLOS 12 303 3636


necesito crear una macro que busque e elimine el producto
resultado

producto cantidad precio unitario total
ACEIT.AGROPRO.900M 5 782 3910
ARVEJ.D.CABALLOS 1 303 303
ARVEJ.D.CABALLOS 12 303 3636





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
Dim guardanombre  As String
Dim guardaprecio As Long
Dim resta As Long
Dim i As Long
Application.ScreenUpdating = False
For i = [D65536].End(xlUp).Row To 2 Step -1
 
If LCase(Cells(i, "D")) <= 0 Then
    guardaprecio = (Cells(i, "d"))
guardanombre = (Cells(i, "b"))
'compara si esta y eliminar
For x = Range("d" & i).End(xlUp).Row To 2 Step -1
' For x = 6 To 70
 If Range("b" & x) = guardanombre Then
 resta = Range("d" & x)
 Range("d" & x) = resta + guardaprecio ' + - = -
 
 Else
 End If
 
 
 
Next x
'''
 
 
 
 
Rows(i).Delete
 
Else
 
End If
 
  guarda = guarda
 
Next i
 
 
MsgBox guarda
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
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

vba macro Help

Publicado por Antoni Masana (2482 intervenciones) el 07/06/2018 07:17:47
No entiendo que solicitas o pretendes hacer y cual es el problema.

Revisando el código hay cosas que no entiendo y marco algunas de ellas

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
Sub Macro
    Dim guardanombre  As String
    Dim guardaprecio As Long
    Dim resta As Long
    Dim i As Long
 
    Application.ScreenUpdating = False
 
    For i = [D65536].End(xlUp).Row To 2 Step -1
        If LCase(Cells(i, "D")) <= 0 Then
            guardaprecio = (Cells(i, "d"))
            guardanombre = (Cells(i, "b"))
            ' --- compara si esta y eliminar
            For x = Range("d" & i).End(xlUp).Row To 2 Step -1
                ' ---- For x = 6 To 70
                If Range("b" & x) = guardanombre Then
                    resta = Range("d" & x)
                    Range("d" & x) = resta + guardaprecio ' + - = -
                Else
                End If
            Next x
            Rows(i).Delete
        Else
        End If
        guarda = guarda
    Next i
    MsgBox guarda
End Sub

Línea 09: ¿Que version de Excel tienes?
Línea 10: ¿Convertir un número a minusculas?
Línea 14: ¿No se ha de definir la X ?
Línea 15: ¿Para que es el comentario. ?
Línea 19: ¿Para que sirve este ELSE?
Línea 22: ¿Quieres borrar todas las líneas?
Línea 23: ¿Para que sirve este ELSE?
Línea 25: ¿Que guarda en guarda? ¿Donde esta definido?

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

vba macro Help

Publicado por thomas (6 intervenciones) el 07/06/2018 15:24:57
PRODUCTO CANT VALOR TOTAL
|columna A |B | C | D |
|JAB.GLI.CREMOS.700 ||02 ||807 |1614|
|JAB.GLI.CREMOS.700 ||-01 ||807 |807|
|TRUTRO ENTE.SUPER ||03.655||1420|5191|

Basicamente es una boleta, necesito que si el producto trae un menos 1 en cantidad lo busque en la clumna y se lo reste ademas se elimine la fila que contiene el menos.
dando este resultado

PRODUCTO CANT VALOR TOTAL
|columna A |B | C | D |
|JAB.GLI.CREMOS.700 ||01 ||807 |807|
|TRUTRO ENTE.SUPER ||03.655||1420|5191|
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

vba macro Help

Publicado por Antoni Masana (2482 intervenciones) el 07/06/2018 22:41:33
Ahora entiendo mejor tu problema.

Puedes subir un ejemplo para probar la macro.

1
2
3
4
---|columna A          |    B   |  C |  D |
100|JAB.GLI.CREMOS.700 |      2 | 807|1614|
101|JAB.GLI.CREMOS.700 |     -1 | 807| 807|
102|TRUTRO ENTE.SUPER  |  3.655 |1420|5191|

Basicamente consiste en buscar un valor negativo en la columna B, buscar el contenido de la celda A en la misma columna y restar B y D. es decir siguiendo el ejemplo restar a B100 el valor de B101, restar a D100 el valor de D101 y eliminar la fila 101,

¿Que pasa si el resultado es negativo?
¿Y si no encuentra la pareja?
¿En la columna A puede haber dos códigos iguales y que no tengan negativos?
¿Que se hace?

Me hace falta un poco más de información.

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

vba macro Help

Publicado por THOMAS (6 intervenciones) el 07/06/2018 23:09:23
¿Que pasa si el resultado es negativo?
SI EL RESULTADO ES NEGATIVO O SERO SE ELIMA
¿Y si no encuentra la pareja?
SI HAY UNA ANULACION DE PRODUCTO, SI O SI DEBE ESTAR EL PRODUCTO ARRIBA
¿En la columna A puede haber dos códigos iguales y que no tengan negativos?
SI PUEDEN HABER DOS
¿Que se hace?

TECNICAMENTE ES UNA BOELTA CUANDO UNO COMPRA EN UN SUPERMERCADO. Y ANULA UN PRODUCTO ESTE DEBE RESTARSE DE LA BOELTA O DESAPARECER.
EL FORMATO QUE ME DAN ES EL QUE POSTIE Y EL RESULTADO DEBERIA SER EL QUE PUSE ABAJO.
CLARO SI HAY UN PRODUCTO QUE ES 1 Y SE ANULA ESTE DEBERIA DESAPARECER.
---|columna A | B | C | D |
100|JAB.GLI.CREMOS.700 | 1 | 807|1614|
101|JAB.GLI.CREMOS.700 | -1 | 807| 807|

RESULTADO

---|columna A | B | C | D |
NADA YA QUE SE ANULO
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

vba macro Help

Publicado por thomas (6 intervenciones) el 08/06/2018 16:17:12
ejercicio
ejercicio

resultado

resultado

modulo que programe

No soy experto en Vba Excel

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
Sub anulacion()
Dim guardanombre  As String
Dim guardaprecio As Long
Dim resta As Long
 
 
   Dim i As Long
    Application.ScreenUpdating = False
    For i = 7 To 60
 
    If LCase(Cells(i, "D")) <= 0 Then
    guardaprecio = (Cells(i, "d"))
    guardanombre = (Cells(i, "b"))
    'compara si esta y eliminar
    For x = 7 To 60
    ' For x = 6 To 70
     If Range("b" & x) = guardanombre Then
     resta = Range("d" & x)
     Range("d" & x) = resta + guardaprecio ' + - = -
     Exit For
    End If
 
    Next x
    '''
 
 
    Rows(i).Delete ' elimina el producto con menos -
 
 
    End If
 
 
     Next i
 
 
End Sub



entonces en caso de que quede en cero o negativo la anulacion deberia borrarme la fila
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

vba macro Help

Publicado por Antoni Masana (2482 intervenciones) el 08/06/2018 23:17:33
Veo que se trata de algo así como un TPV (Terminal Punto de Venta) o dicho de otra forma un programa de caja. O al menos es la pinta que tiene.

Como no entiendo porque y para que haces esto intento deducirlo y no lo entiendo. Si pretendes simplificar el ticket deberías sumar todas las entradas del mismo del mismo producto. En una tienda que trabaje en el ticket se reflejaban todas y cada una de la entradas, correcciones incluidas y por el orden en que se hacían.

Donde he comprado esta mañana en el ticket salen agrupados los productos y ordenados por un código interno.
Es decir el cajero lee por este orden

Leche, Pan, Yogur, Pan, Tomate, Leche, Yogur, Pan, Leche, Tomate

En el Ticket Sale

1
2
3
4
Tomate   2   xxx   xxx
Leche    3   xxx   xxx
Yogur    2   xxx   xxx
Pan      3   xxx   xxx

Debo suponer que es algo así lo que quieres hacer, a menos que mire tu ejemplo y no entienda que pasa.

1
2
3
4
5
6
Producto       Cantidad   Precio   Total
PAN CORRIENTE     1,660     1084    1799
PAN CORRIENTE     1,750     1084    1897
PAN CORRIENTE    -1,750     1084   -1897
PAN CORRIENTE     1,750     1084    1897
PAN CORRIENTE    -1,500     1084   -1626

Este sería mi resultado seguiendo tu ejemplo y no me cuadra:

1
2
Producto       Cantidad   Precio   Total
PAN CORRIENTE     1,910     1084    2070

Suponiendo que este sea el resultado que deseas obtener esta mal el planteamiento. Lo que debería hacer al realizar una nueva entrada es buscar si el producto ya existe y sumar o restar al existente y si no existe añadirlo al final. Esto es más fácil y simple que lo que pretendes.

Y si me equivoco cuenta de que va todo esto, por que incluso hasta una Tabla Dinámica lo haría mejor.

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

vba macro Help

Publicado por thomas (6 intervenciones) el 08/06/2018 23:26:23
Es un trabajo para computacion Aplicada, debo crear un modulo en Vba Excel que haga eso :/

segun lo que ise yo lo realiza en parte, pero no elimina cuando resta y queda en 0 el producto.
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

vba macro Help

Publicado por thomas (6 intervenciones) el 08/06/2018 23:47:57
esta correcta sulogica haci deberia ser el resultado.
como implementoe lcodigo para que de eso :)
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