Comparar Celdas!!

17/03/2005 - 04:51 por DANILO ARANGO | Informe spam
Hola De Nuevo!!
Necesito Comparar una celda, que si tiene una valor determinado me ponga en
una celda otro valor, en el archivo que trabajo lo tengo que hacer asi:
Las Columnas de la I a la R deben o no de tener una X dependiendo de lo que
hay en otra celas por ejemplo:

I J K L M N O P Q R T
X RET
X ING
X VAC
Los valores que hay en la columna T son las condiciones de cada una columnas
de las de la I a la R.
Tengo una macro que me compara una fila:

Select Case Range("T1").Select
Case Range("T1").Value = "ing"
Range("I1").Select
ActiveCell.FormulaR1C1 = "X"
Case Range("T1").Value = "ret"
Range("J1").Select
ActiveCell.FormulaR1C1 = "X"
Case Range("T1").Value = "vac"
Range("R1").Select
ActiveCell.FormulaR1C1 = "X"
Case Else
Range("I1").Select
ActiveCell.FormulaR1C1 = ""
Range("J1").Select
ActiveCell.FormulaR1C1 = ""
Range("K1").Select
ActiveCell.FormulaR1C1 = ""
Range("L1").Select
ActiveCell.FormulaR1C1 = ""
Range("M1").Select
ActiveCell.FormulaR1C1 = ""
Range("N1").Select
ActiveCell.FormulaR1C1 = ""
Range("O1").Select
ActiveCell.FormulaR1C1 = ""
Range("P1").Select
ActiveCell.FormulaR1C1 = ""
Range("Q1").Select
ActiveCell.FormulaR1C1 = ""
Range("R1").Select
ActiveCell.FormulaR1C1 = ""
End Select

Y asi todas las celdas, pero esto lo tengo que hacer fila por fila y me
queda un codigo muy grande por que llevo 500 filas y quiero hacerlo para
muchas mas filas.

Alguna manera de hacerlo en un ciclo, o de alguna manera mas automatico..

GRACIAS A TODOS

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
17/03/2005 - 05:41 | Informe spam
hola, Danilo !

... celda, que si tiene un valor determinado me ponga en una celda otro valor
... de la I a la R deben o no de tener una X dependiendo de lo que hay en otra celas por ejemplo:
I J K L M N O P Q R T
X RET
X ING
X VAC [...]



de acuerdo con la 'posicion' que marcas en el ejemplo...
-> ING 'va' en la columna I
-> RET 'va' a la columna 'J'
-> VAC 'va' a la columna 'R'...
=> selecciona el rango de claves de la columna 'T' y prueba con la siguiente macro

si cualquier duda [o las condiciones 'cambian']... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Sub PonerClave()
Application.ScreenUpdating = False
Dim Clave, Desplaza, Celda As Range, Sig As Byte
Clave = Array("Ing", "Vac", "Ret")
Desplaza = Array(-11, -10, -2)
For Each Celda In Selection
Celda.Offset(, -11).Resize(, 10).ClearContents
For Sig = LBound(Clave) To UBound(Clave)
If LCase(Celda) = LCase(Clave(Sig)) Then Celda.Offset(, Desplaza(Sig)) = "X": Exit For
Next
Next
End Sub
Respuesta Responder a este mensaje
#2 DANILO ARANGO
18/03/2005 - 03:51 | Informe spam
HOLA HECTOR MIGULE!!!!
Gracias por la macro me sirvio mucho, pero tengo unos problemas:
Te digo todas las condiciones,
ING= marca X en columna I
RET= marca X en columna J
TDA= marca X en columna K
TAA= marca X en columna L
VSP= marca X en columna M
VST= marca X en columna N
SLN= marca X en columna O
IGE= marca X en columna P
LMA= marca X en columna Q
VAC= marca X en columna R

Lo que pasa es que estos son unos listados que nos mandan, y nos llegan
aveces desorganizados por ejemplo la condicion ING nos llega una I y esta se
puede confundir con ING o IGE, entonces debe sacar un msgbox diciendo que
investigue o algo así. o mejor aun me gustaria que preguntara que si desea
marcar o no.

GRACIAS HECTOR POR TUS APORTES DE VERDA QUE ME HAN SERVIDO MUCHO
Si quieres me mandas un e-mail
Saludos








"Héctor Miguel" escribió:

hola, Danilo !

> ... celda, que si tiene un valor determinado me ponga en una celda otro valor
> ... de la I a la R deben o no de tener una X dependiendo de lo que hay en otra celas por ejemplo:
> I J K L M N O P Q R T
> X RET
> X ING
> X VAC [...]

de acuerdo con la 'posicion' que marcas en el ejemplo...
-> ING 'va' en la columna I
-> RET 'va' a la columna 'J'
-> VAC 'va' a la columna 'R'...
=> selecciona el rango de claves de la columna 'T' y prueba con la siguiente macro

si cualquier duda [o las condiciones 'cambian']... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==> Sub PonerClave()
Application.ScreenUpdating = False
Dim Clave, Desplaza, Celda As Range, Sig As Byte
Clave = Array("Ing", "Vac", "Ret")
Desplaza = Array(-11, -10, -2)
For Each Celda In Selection
Celda.Offset(, -11).Resize(, 10).ClearContents
For Sig = LBound(Clave) To UBound(Clave)
If LCase(Celda) = LCase(Clave(Sig)) Then Celda.Offset(, Desplaza(Sig)) = "X": Exit For
Next
Next
End Sub



Respuesta Responder a este mensaje
#3 Héctor Miguel
18/03/2005 - 06:21 | Informe spam
hola, Danilo !

... la macro me sirvio mucho, pero tengo unos problemas:... todas las condiciones



para [de momento] NO 'moverte el tapete'... podrias continuar con la misma estructura si 'complementas'...
=> Clave = Array("ing", "ret", "tda", "taa", "vsp", "vst", "sln", "ige", "lma", "vac")
=> Desplaza = Array(-11, -10, -9, -8, -7, -6, -5, -4 -3, -2)
[suponiendo que la columna de las claves sigue siendo 'T'... 11 columnas a la izquierda queda la 'I']

... son unos listados que... nos llegan a veces desorganizados
... la condicion ING nos llega una I y... se puede confundir con ING o IGE
... sacar un msgbox diciendo que investigue... o mejor aun... preguntara si desea marcar o no.



si cambias [solo] las dos lineas mencionadas 'arriba'... lo que NO 'coincida'... quedara 'brincado/omitido'
podria adaptarse una estructura diferente para que [posiblemente] 'se la pase preguntando' [no se cuantas veces] :))
o [p.e.] 'colorear' la fila donde no quedo 'clara' la clave que llego
o... [existe una variedad de alternativas]

comentas por donde 'le damos'?
saludos,
hector.

=> gracias a ti... [por el 'feed-back'] ;)
Respuesta Responder a este mensaje
#4 DANILO ARANGO
19/03/2005 - 05:17 | Informe spam
Hola Hector!
Me gustaria que cuando llegue una clave que no coincida saque un mensaje
diciendo en que fila no se marco o que no fue reconocida, pero si le tengo
que hacer mucha referencia a la clave ING (Ingreso) es una de las mas
importantes, si nos llega la clave I que pregunte si desea marcarla o no.
Yo tengo una macro pero creo que es un poco rudimentaria por que tengo que
preguntar fila por fila:
Select Case Range("T1").Select
Case Range("T1").Value = "I" Or Range("T1").Value = "i"
Rows("1:1").Select
MsgBox "Novedad de Ingreso Marcada con I, ingreso o incapacidad
Verifique LINEA 1", 48, "Comparar Novedades"
End Select
Select Case Range("T1").Select
Case Range("T2").Value = "I" Or Range("T2").Value = "i"
Rows("2:2").Select
MsgBox "Novedad de Ingreso Marcada con I, ingreso o incapacidad
Verifique LINEA 2", 48, "Comparar Novedades"
End Select

Y asi fila por fila, creo que es un poco rudimentario o no?, se pueden meter
estar instrucciones a la macro que me diste o hay que hacer otro
procedimiento, o dime alguna opinion de como debe hacerlo.

GRACIAS POR TODA TU AYUDA
Respuesta Responder a este mensaje
#5 Héctor Miguel
19/03/2005 - 07:19 | Informe spam
hola, Danilo !

... cuando... una clave... no coincida... un mensaje diciendo en que fila no se marco o que no fue reconocida
... le tengo que hacer mucha referencia a la clave ING (Ingreso) es una de las mas importantes
... si nos llega la clave I que pregunte si desea marcarla o no [...]



comprenderas que el codigo ha 'sufrido' una [ligera] 'crecidita' :))
he tratado de 'cubrir' las 'variantes' [al menos... las que se me han 'ocurrido'] ;)
haz pruebas y... si cualquier duda... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Sub PonerClave()
Application.ScreenUpdating = False
Dim Clave, Desplaza, Celda As Range, Sig As Byte, Preguntar As Boolean, Filas As Long, Fila As Long
Clave = Array("ing", "ret", "tda", "taa", "vsp", "vst", "sln", "ige", "lma", "vac")
Desplaza = Array(-11, -10, -9, -8, -7, -6, -5, -4, -3, -2)
For Each Celda In Selection
Celda.Offset(, -11).Resize(, 10).ClearContents
For Sig = LBound(Clave) To UBound(Clave)
Preguntar = True
If LCase(Celda) = LCase(Clave(Sig)) Then Celda.Offset(, Desplaza(Sig)) = "X": Preguntar = False: Exit For
Next
If Preguntar Then
With ActiveWindow
Fila = Celda.Row
Filas = .VisibleRange.Rows.Count + .VisibleRange.Row - 1
If Fila > Filas Then .ScrollRow = .VisibleRange.Row + (Fila - Filas): Application.ScreenUpdating = True
End With
Application.ScreenUpdating = False
Select Case LCase(Celda)
Case "i"
Select Case Respuesta(Celda.Address, "ING", "IGE", "SIN Marca")
Case vbYes: Celda.Offset(, -11) = "X"
Case vbNo: Celda.Offset(, -4) = "X"
End Select
Case "t"
Select Case Respuesta(Celda.Address, "TDA", "TAA", "SIN Marca")
Case vbYes: Celda.Offset(, -9) = "X"
Case vbNo: Celda.Offset(, -8) = "X"
End Select
Case "v"
Select Case Respuesta(Celda.Address, "VSP", "VST", "Siguiente...")
Case vbYes: Celda.Offset(, -7) = "X"
Case vbNo: Celda.Offset(, -6) = "X"
Case vbCancel
If MsgBox("¿Deseas marcarla como ""VAC""?", _
vbYesNo + vbQuestion, "Corregir " & Celda.Address) = vbYes Then _
Celda.Offset(, -2) = "X"
End Select
Case Else: MsgBox "Clave NO 'reconocida' !!!", vbCritical, Celda.Address
End Select
End If
Next
End Sub
Private Function Respuesta(ByVal Celda As String, _
ByVal Op1 As String, ByVal Op2 As String, ByVal Op3 As String) As Integer
Respuesta = MsgBox("Selecciona la opción apropiada..." & vbCr & _
"SI = " & Op1 & vbCr & "NO = " & Op2 & vbCr & "Cancelar = " & Op3, _
vbYesNoCancel + vbQuestion, "Corregir " & Celda)
End Function
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida