Macro en excel

Hola, ya me has contestado en otra ocasión y muy bien por cierto, tengo otro problema, no me manejo bien con VBA, antes con BV (antiguo)no lo hacia mal pero ahora se la lógica que he de seguir pero no se programarla.El problema es que he hecho una base de datos access y en una excel hago una consulta de union que chupa los datos de este access (que ataca realmente a un SQL)hasta ahí todo bien, pero me han pedido que marque los resultados en distintos colores, como son personas, los registros se repiten pero no el mismo numero de veces por cada persona y quieren que marque el fondo de un color y cuando cambien al siguiente de otro y así sucesivamnente (con dos colores seria suficiente). ¿Puedes echarme una mano?
No lo pongo en el tablón, porque luego no se buscarla en el tablón, créeme.
Muchas y un saludo

1 respuesta

Respuesta
1
Disculpa por responderte hasta ahora.
No se si entendí bien, al menos lo que capte fue que quieres que cada registro tenga un color diferente, siendo así prueba lo siguiente pegando el código en modulo vba :
Option Explicit
Sub colores()
Dim mydata
Dim myline
mydata = 0
myline = 0
Cells.Select
Selection.Interior.ColorIndex = xlNone
Rows("2:2").Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
Rows("3:3").Select
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With
'suponiendo que el encabezado esta en la primera linea
mydata = Range("A65536").End(xlUp).Row - 1
If mydata < 4 Then
'do nothing
Else
If mydata = (Application.WorksheetFunction.RoundDown(mydata / 2, 0) * 2) Then
myline = mydata
Else
myline = mydata + 1
End If
Rows("2:3").Select
Selection.Copy
Rows("2:" & myline + 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
Range("A2").Select
End Sub
Espero te sirva y cualquier cosa me avisas si te sirve, porque como mencionas que hay registros que se duplican no entendí bien si lo que quieres es que por cada grupo de registros duplicados se coloree, en fin, estamos en contacto.
Estos Registros ya están ordenados o hay que ordenarlos, porque si deseas un color por grupo, primero hay que ordenarlos.
O más bien agruparlos ...
Confírmame si lo están..
Hola, muchas gracias por contestar, lo que necesito es que los registros de una misma persona estén en un color, el listado tiene registros de muchas personas que estas se duplican, pues entre persona y persona un color distinto, no se si me explico de todos modos, con el código que me has pasado intentare hacerlo, muchas gracias y si se te ocurre como te agradeceré la ayuda.
Ya están ordenados, lo que pretendo es que ejemplo, los 5 primeros registros pertenecen a "pelor en azul claro, los siguientes 4 son de sanchez, en verde, los siguientes 3 de lopez, en azparecido a lo que me has hecho pero para cada persona, perdona, se que has hecho un buen esfuerztro código, que también me vale, lo siento, tendría que hacerlo yo.
Gracias
Te lo reenvío porque veo que al darle enviar respuesta elimina algunos caracteres o los catros, checa si corre bien .
Option Explicit
Sub Color()
Dim Val1
'es donde empiezos
Range("A2").Select
If ActiveCell.Value <> "" Then
Do
Do
If ActiveCell.Value = ""t Do
Else
End If
'color 1
Selection.EntireRow.Interior.ColorIndex = 35
ActiveCell.OffSelect
Val1 = ActiveCell.Offset(-1, 0).Value
If ActiveCell.Value = Val1 Then
'color 1
EntireRow.Interior.ColorIndex = 35
Else
Exit Do
End If
Loop Until ActiveCell <> Val1 Oll.Value = ""
Do
If ActiveCell.Value = "" Then
Exit Do
Else
End If
'color 2
SeleceRow.Interior.ColorIndex = 34
ActiveCell.Offset(1, 0).Select
Val1 = ActiveCell.Offset(-1
If ActiveCell.Value = Val1 Then
'color 2
Selection.EntireRow.Interior.ColorIndex = 34t Do
End If
Loop Until ActiveCell <> Val1 Or ActiveCell.Value = ""
Do
If ActiveCell. Then
Exit Do
Else
End If
'color 3
Selection.EntireRow.Interior.ColorIndex = 36
Acti set(1, 0).Select
Val1 = ActiveCell.Offset(-1, 0).Value
If ActiveCell.Value = Val1 Then
Selection.EntireRow.Interior.ColorIndex = 36
Else
Exit Do
End If
Loop Until ActiveCellr ActiveCell.Value = ""
Do
If ActiveCell.Value = "" Then
Exit Do
Else
End If
'colotion.EntireRow.Interior.ColorIndex = 37
ActiveCell.Offset(1, 0).Select
Val1 = ActiveCell, 0).Value
If ActiveCell.Value = Val1 Then
'color 4
Selection.EntireRow.Interior.ColorI
Else
Exit Do
End If
Loop Until ActiveCell <> Val1 Or ActiveCell.Value = ""
Do
If AValue = "" Then
Exit Do
Else
End If
'color 5
Selection.EntireRow.Interior.ColorIndex veCell.Offset(1, 0).Select
Val1 = ActiveCell.Offset(-1, 0).Value
If ActiveCell.Value = V'color 5
Selection.EntireRow.Interior.ColorIndex = 15
Else
Exit Do
End If
Loop Until <> Val1 Or ActiveCell.Value = ""
Loop Until ActiveCell.Value = ""
Else
End If
R .Select
End Sub
Veo que se truncan algunos caracteres o se sustituyen por otros, intenta copiarlo a VBA corregir errores si te aparecen, si no enviame tu correo y te mando el archivo.
Bye
Adjunto un código, espero sea el que necesitas, comentame si te sirve.
Cse a información de la columna "A" y los datos deben estar a partir de "A2" ; es para cincdistintos y si quieres agregarle más colores solo copia un grupo de Loop y anexalo al codidigo vba
Option Explicit
Sub Color()
Dim Val1
'es donde empiezan los datos
Range("A
If ActiveCell.Value <> "" Then
Do
Do
If ActiveCell.Value = "" Then
Exit Do
Else
olor 1
Selection.EntireRow.Interior.ColorIndex = 35
ActiveCell.Offset(1, 0).Select
Val1ell.Offset(-1, 0).Value
If ActiveCell.Value = Val1 Then
'color 1
Selection.EntireRow.InorIndex = 35
Else
Exit Do
End If
Loop Until ActiveCell <> Val1 Or ActiveCell.Value = "f ActiveCell.Value = "" Then
Exit Do
Else
End If
'color 2
Selection.EntireRow.Interioex = 34
ActiveCell.Offset(1, 0).Select
Val1 = ActiveCell.Offset(-1, 0).Value
If ActiveC= Val1 Then
'color 2
Selection.EntireRow.Interior.ColorIndex = 34
Else
Exit Do
End Ifil ActiveCell <> Val1 Or ActiveCell.Value = ""
Do
If ActiveCell.Value = "" Then
Exit End If
'color 3
Selection.EntireRow.Interior.ColorIndex = 36
ActiveCell.Offset(1, 0).Se = ActiveCell.Offset(-1, 0).Value
If ActiveCell.Value = Val1 Then
'color 3
Selection.En terior.ColorIndex = 36
Else
Exit Do
End If
Loop Until ActiveCell <> Val1 Or ActiveCell"
Do
If ActiveCell.Value = "" Then
Exit Do
Else
End If
'color 4
Selection.EntireRr.ColorIndex = 37
ActiveCell.Offset(1, 0).Select
Val1 = ActiveCell.Offset(-1, 0).Value
ell.Value = Val1 Then
'color 4
Selection.EntireRow.Interior.ColorIndex = 37
Else
Exit
Loop Until ActiveCell <> Val1 Or ActiveCell.Value = ""
Do
If ActiveCell.Value = "" TDo
Else
End If
'color 5
Selection.EntireRow.Interior.ColorIndex = 15
ActiveCell.Offselect
Val1 = ActiveCell.Offset(-1, 0).Value
If ActiveCell.Value = Val1 Then
'color 5
SetireRow.Interior.ColorIndex = 15
Else
Exit Do
End If
Loop Until ActiveCell <> Val1 Or .Value = ""
Loop Until ActiveCell.Value = ""
Else
End If
Range("A2").Select
End

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas