Volver una variable constante

Nuevamente yo, un problema distinto

Tengo Los Siguientes Datos

A B

1 NOMBRE R.E.C.
2 XXXXXX XXXXXXX MARCO ANTONIO X72XXX4XX6X
3 XXXXXXX XXXXXXXXX ARTURO 7711XX279X1
4 XXXXXXXXX XXXX MARGARITA EVARISTA 79X9XX68289
5 XXXXXXX XXXXXXXXX JOSÉ ROSARIO 79X9X3X326X
6 XXXXXXX XXXXXXX LUIS 79X9XX69826
7 XXXXXXXX XXXXXXXX ALFONSO 79X9X164X44

La R.E.C. Es mi identificador, tengo la siguiente duda, puedo obtener el valor de una celda y asociarlo con otro valor, ejemplo:

Sub Sig_Shad()
For a = 2 To 7
b = Cells(a, 2).Value

'b= X72XXX4XX6X Este es el Valor que se obtiene

'Ahora lo que Busco es que al Valor Obtenido, Asignarle otro valor, de la siguiente manera
b = Cells(a, 1).Value

'X72XXX4XX6X = XXXXXX XXXXXXX MARCO ANTONIO
Next a

'Para que cuando yo Utilice Este Dato, X72XXX4XX6X, siempre me haga referencia a XXXXXX XXXXXXX MARCO ANTONIO
End Sub

Al parecer puedo declarar una variable CONST b As String=100, jajaja pero no le entiendo, y desgraciadamente el tiempo me come, Nuevamente Agradesco tu Atención y tiempo,

1 Respuesta

Respuesta
1

¿Quieres qué ahora X72XXX4XX6X sea una variable y el contenido de esa variable sea "XXXXXX XXXXXXX MARCO ANTONIO"?

Y puedo saber, con un ejemplo, ¿cómo vas a emplear esa variable?

Tengo 3 Hojas

Hoja1 ("PADRÓN")

Hoja2("REGISTROS")

Hoja3("INFORME")

La siguiente Macro buscara en la Hoja2 (Columna B) mediante un bucle, fechas que se encuentren entre El 01/01/2013 y 16/10/2013, primero evaluara si la fecha encontrada es igual o mayor a 01/01/2013 y posteriormente evaluara si esta es igual o menor a 16/10/2013 en caso de ser asi,Tomara el valor de la celda con la fecha (Columna B) así como el valor contiguo de la columna "E" ("TOTAL A PAGAR"), y lo registrara en la 3er Hoja (Informe) a su vez mediante u = Sheets("REGISTROS").Cells(b, 1).Characters(Start:=5, Length:=1).Text

Extraerá un valor el cual según sea el caso determinara el dato a establecer en la columna "D" de La Hoja3 "INFORME"

Select Case u
Case "1", "3"
Q = "IMPUESTOS - " & u & "ER - BIMESTRE - "
Case "2"
Q = "IMPUESTOS - " & u & "DO - BIMESTRE - "
Case "4", "5", "6"
Q = "IMPUESTOS - " & u & "TO - BIMESTRE - "
End Select
.Cells(13 + i, 4).Value = Q & Sheets("REGISTROS").Cells(b, 1).Characters(Start:=1, Length:=4).Text

Quedando de la Siguiente Manera en la Hoja3 "INFORME"

El detalle esta en que la Hoja2("REGISTROS") cuenta con 6750 Filas y como se observa

en esta, el valor de celda de la columna "A" se integra de la siguiente manera:

20061X72XXX38454
20062X72XXX38454
20063X72XXX38454
20064X72XXX38454
20065X72XXX38454
20066X72XXX38454

................................

................................

...20146X72XXX38454

Siendo los últimos 11 valores una constante, que son extraídos mediante la siguiente linea

uu = Sheets("REGISTROS").Cells(b, 1).Characters(Start:=6, Length:=11).Text

Dato el cual se buscara en la Hoja1("Padrón"), Columna "B", y una vez encontrada su ubicación se tomara el valor de la celda contigua ("A"),el problema radica en que cada ocasión que se encuentre un valor que cumpla las expectativas, se rrecorrera la Hoja1 ("PADRÓN"), en busca del valor correspondiente, disparando el tiempo de ejecución de la macro, busco que si el valor no ha sido declarado, entonces se busque y se declare, caso contrario, unicamente se tome el ya declarado. espero darme a entender, pero son las mejores palabras que tengo, por tu ayuda, muchas gracias, jejeje tardo, por que no se como explicar como ya te habrás dado cuenta.

(Es obvio que el fragmento de código que aparece abajo esta mal, debido a que no estoy controlando el tamaño de ii en cada recorrido)

Prueba: 'Etiqueta
If Sheets("PADRÓN").Cells(2 + ii, 2).Value <> uu Then
ii = ii + 1
GoTo Prueba:
Else
iii = Sheets("Padrón").Cells(2 + ii, 2).Row
End If
.Cells(13 + i, 5).Value = Sheets("PADRÓN").Range("A" & iii).Value

Macro Completa que elabore, kon error

Sub Ejemplo()
Application.ScreenUpdating = False
fecha1 = DateSerial(2013, 1, 1)
fecha2 = DateSerial(2013, 10, 16)
Dim uu As String
a = Sheets("REGISTROS").Range("A1").End(xlDown).Row
aa = Sheets("INFORME").Range("B13").End(xlDown).Row
Sheets("INFORME").Range("B13:E" & aa).Clear
For b = 2 To a
Select Case Sheets("REGISTROS").Cells(b, 2).Value
Case Is = ""
GoTo Siguiente
Case Is = fecha1, Is > fecha1
Select Case Sheets("REGISTROS").Cells(b, 2).Value
Case Is < fecha2, Is = fecha2
With Sheets("INFORME")
.Cells(13 + i, 2).Value = Sheets("REGISTROS").Cells(b, 2).Value
.Cells(13 + i, 3).Value = Sheets("REGISTROS").Cells(b, 5).Value
u = Sheets("REGISTROS").Cells(b, 1).Characters(Start:=5, Length:=1).Text
Select Case u
Case "1", "3"
Q = "IMPUESTOS - " & u & "ER - BIMESTRE - "
Case "2"
Q = "IMPUESTOS - " & u & "DO - BIMESTRE - "
Case "4", "5", "6"
Q = "IMPUESTOS - " & u & "TO - BIMESTRE - "
End Select
.Cells(13 + i, 4).Value = Q & Sheets("REGISTROS").Cells(b, 1).Characters(Start:=1, Length:=4).Text
uu = Sheets("REGISTROS").Cells(b, 1).Characters(Start:=6, Length:=11).Text
Prueba:
If Sheets("PADRÓN").Cells(2 + ii, 2).Value <> uu Then
ii = ii + 1
GoTo Prueba:
Else
iii = Sheets("Padrón").Cells(2 + ii, 2).Row
End If
.Cells(13 + i, 5).Value = Sheets("PADRÓN").Range("A" & iii).Value
End With
i = i + 1
Sheets("INFORME").Range("G2").Value = i
End Select
End Select
Siguiente:
Next b
Application.ScreenUpdating = True

End Sub

Solo una cosa, cuando dige que "Siendo los últimos 11 valores una constante, que son extraídos mediante la siguiente linea", es por que, como veras:

20061X72XXX38454
20062X72XXX38454
20063X72XXX38454
20064X72XXX38454
20065X72XXX38454
20066X72XXX38454
................................
................................
...20146X72XXX38454

Llega hasta el 20146, siendo 54 registros por persona, La Hoja 1("PADRÓN"), cuenta con 132 Registros

20061X72XXX38454

Al

20146X72XXX38454

2006179X9X28881X

Al
2014679X9X28881X

y asi sucecivamente

Prueba con la siguiente macro, hice la prueba con tu archivo de 6750 registros y se tarda un segundo en terminar.

Sub Ejemplo()
'Por.DAM
Application.ScreenUpdating = False
fecha1 = DateSerial(2013, 1, 1)
fecha2 = DateSerial(2013, 10, 16)
Set h1 = Sheets("REGISTROS")
Set h2 = Sheets("PADRON")
Set h3 = Sheets("INFORME")
h3.Range("B13:E" & h3.Range("B" & Rows.Count).End(xlUp).Row).Clear
j = 13
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
    If h1.Cells(i, "B") >= fecha1 And h1.Cells(i, "B") <= fecha2 Then
        Select Case Mid(h1.Cells(i, 1), 5, 1)
            Case "1", "3":      Q = "IMPUESTOS - " & Mid(h1.Cells(i, 1), 5, 1) & "ER - BIMESTRE - "
            Case "2":           Q = "IMPUESTOS - " & Mid(h1.Cells(i, 1), 5, 1) & "DO - BIMESTRE - "
            Case "4", "5", "6": Q = "IMPUESTOS - " & Mid(h1.Cells(i, 1), 5, 1) & "TO - BIMESTRE - "
        End Select
        Set b = h2.Columns("B").Find(Right(h1.Cells(i, 1), 11))
        If Not b Is Nothing Then r = h2.Cells(b.Row, "A") Else r = ""
        h3.Cells(j, 2) = Format(h1.Cells(i, 2), "mm/dd/2013")
        h3.Cells(j, 3) = h1.Cells(i, 5)
        h3.Cells(j, 4) = Q & Left(h1.Cells(i, 1), 4)
        h3.Cells(j, 5) = r
        j = j + 1
    End If
Next
Application.ScreenUpdating = True
End Sub

Saludos.Dante Amor
Si es lo que necesitas.

Ver la forma en la que resuelves mis dudas, me hace ser consciente del largo camino que un tengo por recorrer, en su momento me deprimió un poco, pero la verdad es que ahora me resulta emocionante, agradezco el tiempo y conocimiento que me has brindado, sé que en algún momento te volveré a molestar, hasta entonces, Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas