Ejecutar código en columnas intercaladas

Como puedo hacer que este código

Buenas expertos de excel
Tengo el siguiente código pero me gustaría que se ejecutara solamente en las columnas intermedias como A, C, E, G, I, QUE, M, O, QUE, ES, U, POR, Z
Como puedo lograrlo
Sub colorear()
inicio = Time
Set ha = Worksheets("resultados").Range("a1:ab80")
Set hn = Worksheets("probables").Range("a1:da42")
For i = 1 To hn.Cells.Count
numero = hn.Cells(i)
cuenta = WorksheetFunction.CountIf(ha, numero)
If cuenta > 0 Then
For j = 1 To cuenta
If j = 1 Then Set busca = ha.Find(numero)
If j > 1 Then Set busca = ha.FindNext(busca)
celda = busca.Address
If Worksheets("resultados").Range(celda).Interior.ColorIndex = xlNone Then
Worksheets("resultados").Range(celda).Interior.ColorIndex = 6
End If
Next j
End If
salida:
Next i
fin = Time: minutos = fin - inicio
MsgBox ("duro " & Minute(minutos) & " minutos")
Set ha = Nothing: Set hn = Nothing
End Sub

1

1 respuesta

Respuesta
1

Según tu código se recorren tablas de 2 hojas.

¿En cuál de las 2 necesitas que vaya por col intercaladas?

Si deseas que recorra la hoja 'probables', en el primer For deja así:

For i = 1 To hn.Cells.Count Step 2

En cambio si deseas que solo las busque en col intercaladas de hoja 'resultados' el texto Step 2 va en el otro bucle For:

For j = 1 To cuenta Step 2

Al ejecutar el código me sale el siguiente error

Sub colorear()
inicio = Time
Set ha = Worksheets("resultados").Range("a1:ab80")
Set hn = Worksheets("probables").Range("a1:da42")
For i = 1 To hn.Cells.Count
numero = hn.Cells(i)
cuenta = WorksheetFunction.CountIf(ha, numero)
If cuenta > 0 Then
For j = 1 To cuenta Step 2
If j = 1 Then Set busca = ha.Find(numero)
If j > 1 Then Set busca = ha.FindNext(busca)
Celda = busca.Address
If Worksheets("resultados").Range(Celda).Interior.ColorIndex = xlNone Then
Worksheets("resultados").Range(Celda).Interior.ColorIndex = 6
End If
Next j
End If
salida:
Next i
fin = Time: minutos = fin - inicio
MsgBox ("duro " & Minute(minutos) & " minutos")
Set ha = Nothing: Set hn = Nothing
End Sub

¿La macro se ejecutaba bien antes del cambio?

Asegurate bien. Volve a ejecutar la original.

Y si funciona bien y luego al agregarle el step 2 falla hace lo siguiente:

- Cuando te muestre el error (línea amarilla) pasa el ratón por la variable j y toma nota del valor q tiene. Lo mismo sobre la variable 'cuenta'.

- Luego me envias imagen de la hoja Resultados y esos 2 valores.

Sdos!

hice lo que me dijistes y me muestra j=1 y en la linea amarila cuenta= vacio

¿La macro se ejecutaba bien antes del cambio, en esas mismas hojas?

Subí una imagen de la hoja Resultados.

Sdos!

Experta elsa

Hice el proceso el código funciona bien pero al agregarle valores a las columnas b,de, f, h,...

da el error de la linea Celda = busca.Address

las columnas b,d,f,h,.... las tengo con un formato condicional

https://drive.google.com/open?id=1P74VUqHA31bwJx_iNw-HKlLAN35_vvxY 

Probala así:

Sub colorear()
'ajustada x Elsamatilde
inicio = Time
Set ha = Worksheets("resultados").Range("a1:ab80")
Set hn = Worksheets("probables").Range("a1:cy42")     'controlar rango
For i = 1 To hn.Cells.Count
    'si la columna es par se omite
    If hn.Cells(i).Column Mod 2 = 0 Then GoTo salida
    numero = hn.Cells(i)
    cuenta = WorksheetFunction.CountIf(ha, numero)
    If cuenta > 0 Then
        For j = 1 To cuenta
            If j = 1 Then Set busca = ha.Find(numero)
            If j > 1 Then Set busca = ha.FindNext(busca)
            On Error Resume Next   'si no se encuentra busca se omite el error
            Celda = busca.Address
            If Worksheets("resultados").Range(Celda).Interior.ColorIndex = xlNone Then
                Worksheets("resultados").Range(Celda).Interior.ColorIndex = 6
            End If
        Next j
    End If
salida:
Next i
fin = Time: minutos = fin - inicio
MsgBox ("duro " & Minute(minutos) & " minutos")
Set ha = Nothing: Set hn = Nothing
End Sub

PD) En libro Análisis la tenías correcta, con control de error para cuando no encuentra en líneas Set busca.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas