Excel - Actualizacion de datos

 
Vista:
sin imagen de perfil

Actualizacion de datos

Publicado por Anggi Camacho Castillo (1 intervención) el 30/08/2024 17:57:25
Buen día, tengo una duda, tengo este código que requiero actualizar pero no logro identificar cual es su secuencia para poder replicarlo con mas limites. Este código es para tomar como base un listado y a partir de ese listado sacar que sobra o que falta para el siguiente, en este caso debo actualizarlo para que pueda identificar lo de 10 listados de manera consecutiva osea: Listado 1 , que sobra y que se necesita para el listado 2, luego del listado 2, contemplando lo que sobra y se necesita para el listado 2 y 1, e identifique que le sobra o necesita para el listado 3 y asi sucesivamente. todo esto, con dar click a un commandbotton. Soy nueva en este tema y la verdad no se como plantear los códigos. Agradecería su colaboración. El código base es el siguiente;



Private Sub NECESITA_Click()
Dim I, J As Integer
Dim AL2() As String
Dim SL2() As String

ReDim Preserve SL2(LIMITE1, 2)
ReDim Preserve AL2(LIMITE2, 3)

For I = 2 To LIMITE2
AL2(I, 1) = Worksheets(1).Cells(I, 4).Value
AL2(I, 2) = Worksheets(1).Cells(I, 5).Value
AL2(I, 3) = Worksheets(1).Cells(I, 4).Font.Color
Next

For I = 2 To LIMITE1
SL2(I, 1) = Worksheets(1).Cells(I, 1).Value
SL2(I, 2) = Worksheets(1).Cells(I, 2).Value
Next

For I = 2 To LIMITE2
For J = 2 To LIMITE1

If AL2(I, 1) = SL2(J, 1) Then
If AL2(I, 2) <> SL2(J, 2) Then
If CInt(AL2(I, 2)) < CInt(SL2(J, 2)) And AL2(I, 2) <> "" Then
SL2(J, 2) = SL2(J, 2) - AL2(I, 2)
AL2(I, 1) = ""
AL2(I, 2) = ""
ElseIf CInt(AL2(I, 2)) > CInt(SL2(J, 2)) Then
AL2(I, 2) = AL2(I, 2) - SL2(J, 2)
SL2(J, 1) = ""
SL2(J, 2) = ""
End If
Else
SL2(J, 1) = ""
SL2(J, 2) = ""
AL2(I, 1) = ""
AL2(I, 2) = ""
End If
End If

Next J
Next I

Dim Z As Integer
Z = 2

Worksheets(1).Cells(LIMITE2 + Z, 4).Value = "ADICIONAL"
Z = Z + 1
For I = 2 To UBound(AL2)
If AL2(I, 1) <> "" Then
Worksheets(1).Cells(LIMITE2 + Z, 4).Value = AL2(I, 1)
Worksheets(1).Cells(LIMITE2 + Z, 5).Value = AL2(I, 2)
Worksheets(1).Cells(LIMITE2 + Z, 4).Font.Color = AL2(I, 3)
Worksheets(1).Cells(LIMITE2 + Z, 5).Font.Color = AL2(I, 3)
Z = Z + 1
End If
Next

Z = Z + 1
Worksheets(1).Cells(LIMITE2 + Z, 4).Value = "SOBRANTE"

Z = Z + 1
For J = 2 To UBound(SL2)
If SL2(J, 1) <> "" Then
Worksheets(1).Cells(LIMITE2 + Z, 4).Value = SL2(J, 1)
Worksheets(1).Cells(LIMITE2 + Z, 5).Value = SL2(J, 2)
Z = Z + 1
End If
Next

Dim SW As Boolean


For I = 2 To UBound(AL2)
If AL2(I, 1) <> "" Then
SW = True
For J = 2 To LIMITE1
If AL2(I, 1) = Worksheets(1).Cells(J, 1).Value Then
SW = False
Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + AL2(I, 2)
End If
Next J
If SW Then
INS = INS + 1
Worksheets(1).Cells(LIMITE1 + INS, 1).Value = AL2(I, 1)
Worksheets(1).Cells(LIMITE1 + INS, 2).Value = AL2(I, 2)
End If
End If
Next I

'************************************************************************
'************************************************************************
'************************************************************************
Dim SL3() As String
Dim AL3() As String

ReDim Preserve SL3(LIMITE1 + INS, 2)
ReDim Preserve AL3(LIMITE3, 3)

For I = 2 To LIMITE3
AL3(I, 1) = Worksheets(1).Cells(I, 7).Value
AL3(I, 2) = Worksheets(1).Cells(I, 8).Value
AL3(I, 3) = Worksheets(1).Cells(I, 7).Font.Color
Next

For I = 2 To LIMITE1 + INS
SL3(I, 1) = Worksheets(1).Cells(I, 1).Value
SL3(I, 2) = Worksheets(1).Cells(I, 2).Value
Next

For I = 2 To LIMITE3
For J = 2 To LIMITE1 + INS

If AL3(I, 1) = SL3(J, 1) Then
If AL3(I, 2) <> SL3(J, 2) Then
If CInt(AL3(I, 2)) < CInt(SL3(J, 2)) And AL3(I, 2) <> "" Then
SL3(J, 2) = SL3(J, 2) - AL3(I, 2)
AL3(I, 1) = ""
AL3(I, 2) = ""
ElseIf CInt(AL3(I, 2)) > CInt(SL3(J, 2)) Then
AL3(I, 2) = AL3(I, 2) - SL3(J, 2)
SL3(J, 1) = ""
SL3(J, 2) = ""
End If
Else
SL3(J, 1) = ""
SL3(J, 2) = ""
AL3(I, 1) = ""
AL3(I, 2) = ""
End If
Exit For
End If

Next J
Next I

Z = 2

Worksheets(1).Cells(LIMITE3 + Z, 7).Value = "ADICIONAL"
Z = Z + 1
For I = 2 To UBound(AL3)
If AL3(I, 1) <> "" Then
Worksheets(1).Cells(LIMITE3 + Z, 7).Value = AL3(I, 1)
Worksheets(1).Cells(LIMITE3 + Z, 8).Value = AL3(I, 2)
Worksheets(1).Cells(LIMITE3 + Z, 7).Font.Color = AL3(I, 3)
Worksheets(1).Cells(LIMITE3 + Z, 8).Font.Color = AL3(I, 3)
Z = Z + 1
End If
Next

Z = Z + 1
Worksheets(1).Cells(LIMITE3 + Z, 7).Value = "SOBRANTE"

Z = Z + 1
For J = 2 To UBound(SL3)
If SL3(J, 1) <> "" Then
Worksheets(1).Cells(LIMITE3 + Z, 7).Value = SL3(J, 1)
Worksheets(1).Cells(LIMITE3 + Z, 8).Value = SL3(J, 2)
Z = Z + 1
End If
Next

For I = 2 To UBound(AL3)
If AL3(I, 1) <> "" Then
SW = True
For J = 2 To LIMITE1
If AL3(I, 1) = Worksheets(1).Cells(J, 1).Value Then
SW = False
Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + AL3(I, 2)
End If
Next J
If SW Then
INS = INS + 1
Worksheets(1).Cells(LIMITE1 + INS, 1).Value = AL3(I, 1)
Worksheets(1).Cells(LIMITE1 + INS, 2).Value = AL3(I, 2)
End If
End If
Next I

End Sub

Private Sub RECORRIDO_Click()
Dim I, J As Integer
For I = 2 To LIMITE2
For J = 2 To LIMITE1 + INS
If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
If Worksheets(1).Cells(I, 5).Value > Worksheets(1).Cells(J, 2).Value Then
Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + (Worksheets(1).Cells(I, 5).Value - Worksheets(1).Cells(J, 2).Value)
End If
End If
Next J
Next I
End Sub

Private Sub SUMA_Click()
Dim I, J As Integer
For I = 2 To LIMITE2
For J = 2 To LIMITE1 + INS
If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + Worksheets(1).Cells(I, 5).Value
End If
Next J
Next I
End Sub


' If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
' If Worksheets(1).Cells(I, 5).Value <> Worksheets(1).Cells(J, 2).Value Then
' If Worksheets(1).Cells(I, 5).Value < Worksheets(1).Cells(J, 2).Value Then
' Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value - Worksheets(1).Cells(I, 5).Value
' Worksheets(1).Cells(I, 4).Value = ""
' Worksheets(1).Cells(I, 5).Value = ""
' ElseIf Worksheets(1).Cells(I, 5).Value > Worksheets(1).Cells(J, 2).Value Then
' Worksheets(1).Cells(I, 5).Value = Worksheets(1).Cells(I, 5).Value - Worksheets(1).Cells(J, 2).Value
' Worksheets(1).Cells(J, 2).Value = ""
' Worksheets(1).Cells(J, 1).Value = ""
' End If
' Else
' Worksheets(1).Cells(I, 4).Value = ""
' Worksheets(1).Cells(I, 5).Value = ""
' Worksheets(1).Cells(J, 2).Value = ""
' Worksheets(1).Cells(J, 1).Value = ""
' End If
' End If
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

Actualizacion de datos

Publicado por Antoni Masana (2540 intervenciones) el 03/09/2024 10:54:26
El código se ve mejor asi:

Lo he intentado seguir viendo los comentarios y no se que se supone que hace. Comentarios CERO.
Explica que hace la macro y que debe hacer la nueva macro.
Tambien ayuda mucho ver sobre que datos esta trabajando la macro, por lo que es importante subir el libro.

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Private Sub NECESITA_Click()
    Dim I, J As Integer
    Dim AL2() As String
    Dim SL2() As String
 
    ReDim Preserve SL2(LIMITE1, 2)
    ReDim Preserve AL2(LIMITE2, 3)
 
    For I = 2 To LIMITE2
        AL2(I, 1) = Worksheets(1).Cells(I, 4).Value
        AL2(I, 2) = Worksheets(1).Cells(I, 5).Value
        AL2(I, 3) = Worksheets(1).Cells(I, 4).Font.Color
    Next
 
    For I = 2 To LIMITE1
        SL2(I, 1) = Worksheets(1).Cells(I, 1).Value
        SL2(I, 2) = Worksheets(1).Cells(I, 2).Value
    Next
 
    For I = 2 To LIMITE2
        For J = 2 To LIMITE1
 
        If AL2(I, 1) = SL2(J, 1) Then
            If AL2(I, 2) <> SL2(J, 2) Then
                If CInt(AL2(I, 2)) < CInt(SL2(J, 2)) And AL2(I, 2) <> "" Then
                    SL2(J, 2) = SL2(J, 2) - AL2(I, 2)
                    AL2(I, 1) = ""
                    AL2(I, 2) = ""
                    ElseIf CInt(AL2(I, 2)) > CInt(SL2(J, 2)) Then
                    AL2(I, 2) = AL2(I, 2) - SL2(J, 2)
                    SL2(J, 1) = ""
                    SL2(J, 2) = ""
                End If
            Else
                SL2(J, 1) = ""
                SL2(J, 2) = ""
                AL2(I, 1) = ""
                AL2(I, 2) = ""
            End If
        End If
 
        Next J
    Next I
 
    Dim Z As Integer
    Z = 2
 
    Worksheets(1).Cells(LIMITE2 + Z, 4).Value = "ADICIONAL"
    Z = Z + 1
    For I = 2 To UBound(AL2)
        If AL2(I, 1) <> "" Then
            Worksheets(1).Cells(LIMITE2 + Z, 4).Value = AL2(I, 1)
            Worksheets(1).Cells(LIMITE2 + Z, 5).Value = AL2(I, 2)
            Worksheets(1).Cells(LIMITE2 + Z, 4).Font.Color = AL2(I, 3)
            Worksheets(1).Cells(LIMITE2 + Z, 5).Font.Color = AL2(I, 3)
            Z = Z + 1
        End If
    Next
 
    Z = Z + 1
    Worksheets(1).Cells(LIMITE2 + Z, 4).Value = "SOBRANTE"
 
    Z = Z + 1
    For J = 2 To UBound(SL2)
        If SL2(J, 1) <> "" Then
            Worksheets(1).Cells(LIMITE2 + Z, 4).Value = SL2(J, 1)
            Worksheets(1).Cells(LIMITE2 + Z, 5).Value = SL2(J, 2)
            Z = Z + 1
        End If
    Next
 
    Dim SW As Boolean
 
 
    For I = 2 To UBound(AL2)
        If AL2(I, 1) <> "" Then
            SW = True
            For J = 2 To LIMITE1
                If AL2(I, 1) = Worksheets(1).Cells(J, 1).Value Then
                    SW = False
                    Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + AL2(I, 2)
                End If
            Next J
            If SW Then
                INS = INS + 1
                Worksheets(1).Cells(LIMITE1 + INS, 1).Value = AL2(I, 1)
                Worksheets(1).Cells(LIMITE1 + INS, 2).Value = AL2(I, 2)
            End If
        End If
    Next I
 
    '************************************************************************
    '************************************************************************
    '************************************************************************
    Dim SL3() As String
    Dim AL3() As String
 
    ReDim Preserve SL3(LIMITE1 + INS, 2)
    ReDim Preserve AL3(LIMITE3, 3)
 
    For I = 2 To LIMITE3
        AL3(I, 1) = Worksheets(1).Cells(I, 7).Value
        AL3(I, 2) = Worksheets(1).Cells(I, 8).Value
        AL3(I, 3) = Worksheets(1).Cells(I, 7).Font.Color
    Next
 
    For I = 2 To LIMITE1 + INS
        SL3(I, 1) = Worksheets(1).Cells(I, 1).Value
        SL3(I, 2) = Worksheets(1).Cells(I, 2).Value
    Next
 
    For I = 2 To LIMITE3
        For J = 2 To LIMITE1 + INS
 
            If AL3(I, 1) = SL3(J, 1) Then
                If AL3(I, 2) <> SL3(J, 2) Then
                    If CInt(AL3(I, 2)) < CInt(SL3(J, 2)) And AL3(I, 2) <> "" Then
                        SL3(J, 2) = SL3(J, 2) - AL3(I, 2)
                        AL3(I, 1) = ""
                        AL3(I, 2) = ""
                    ElseIf CInt(AL3(I, 2)) > CInt(SL3(J, 2)) Then
                        AL3(I, 2) = AL3(I, 2) - SL3(J, 2)
                        SL3(J, 1) = ""
                        SL3(J, 2) = ""
                    End If
                Else
                    SL3(J, 1) = ""
                    SL3(J, 2) = ""
                    AL3(I, 1) = ""
                    AL3(I, 2) = ""
                End If
                Exit For
            End If
 
        Next J
    Next I
 
    Z = 2
 
    Worksheets(1).Cells(LIMITE3 + Z, 7).Value = "ADICIONAL"
    Z = Z + 1
    For I = 2 To UBound(AL3)
        If AL3(I, 1) <> "" Then
            Worksheets(1).Cells(LIMITE3 + Z, 7).Value = AL3(I, 1)
            Worksheets(1).Cells(LIMITE3 + Z, 8).Value = AL3(I, 2)
            Worksheets(1).Cells(LIMITE3 + Z, 7).Font.Color = AL3(I, 3)
            Worksheets(1).Cells(LIMITE3 + Z, 8).Font.Color = AL3(I, 3)
            Z = Z + 1
        End If
    Next
 
    Z = Z + 1
    Worksheets(1).Cells(LIMITE3 + Z, 7).Value = "SOBRANTE"
 
    Z = Z + 1
    For J = 2 To UBound(SL3)
        If SL3(J, 1) <> "" Then
            Worksheets(1).Cells(LIMITE3 + Z, 7).Value = SL3(J, 1)
            Worksheets(1).Cells(LIMITE3 + Z, 8).Value = SL3(J, 2)
            Z = Z + 1
        End If
    Next
 
    For I = 2 To UBound(AL3)
        If AL3(I, 1) <> "" Then
            SW = True
            For J = 2 To LIMITE1
                If AL3(I, 1) = Worksheets(1).Cells(J, 1).Value Then
                    SW = False
                    Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + AL3(I, 2)
                End If
            Next J
            If SW Then
                INS = INS + 1
                Worksheets(1).Cells(LIMITE1 + INS, 1).Value = AL3(I, 1)
                Worksheets(1).Cells(LIMITE1 + INS, 2).Value = AL3(I, 2)
            End If
        End If
    Next I
End Sub
 
Private Sub RECORRIDO_Click()
    Dim I, J As Integer
    For I = 2 To LIMITE2
        For J = 2 To LIMITE1 + INS
            If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
                If Worksheets(1).Cells(I, 5).Value > Worksheets(1).Cells(J, 2).Value Then
                    Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + (Worksheets(1).Cells(I, 5).Value - Worksheets(1).Cells(J, 2).Value)
                End If
            End If
        Next J
    Next I
End Sub
 
Private Sub SUMA_Click()
    Dim I, J As Integer
    For I = 2 To LIMITE2
        For J = 2 To LIMITE1 + INS
            If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
                Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value + Worksheets(1).Cells(I, 5).Value
            End If
        Next J
    Next I
End Sub
 
 
' If Worksheets(1).Cells(I, 4).Value = Worksheets(1).Cells(J, 1).Value Then
'     If Worksheets(1).Cells(I, 5).Value <> Worksheets(1).Cells(J, 2).Value Then
'         If Worksheets(1).Cells(I, 5).Value < Worksheets(1).Cells(J, 2).Value Then
'             Worksheets(1).Cells(J, 2).Value = Worksheets(1).Cells(J, 2).Value - Worksheets(1).Cells(I, 5).Value
'             Worksheets(1).Cells(I, 4).Value = ""
'             Worksheets(1).Cells(I, 5).Value = ""
'             ElseIf Worksheets(1).Cells(I, 5).Value > Worksheets(1).Cells(J, 2).Value Then
'             Worksheets(1).Cells(I, 5).Value = Worksheets(1).Cells(I, 5).Value - Worksheets(1).Cells(J, 2).Value
'             Worksheets(1).Cells(J, 2).Value = ""
'             Worksheets(1).Cells(J, 1).Value = ""
'         End If
'     Else
'         Worksheets(1).Cells(I, 4).Value = ""
'         Worksheets(1).Cells(I, 5).Value = ""
'         Worksheets(1).Cells(J, 2).Value = ""
'         Worksheets(1).Cells(J, 1).Value = ""
'     End If
' End If

Lo he intentado seguir viendo los comentarios y no se que se supone que hace. Comentarios CERO.
Explica que hace la macro y que debe hacer la nueva macro.
Tambien ayuda mucho ver sobre que datos esta trabajando la macro, por lo que es importante subir el libro.

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