Formula para devolver un valor si su primer dígito es par o impar.

Buen Dia Comunidad;

Una vez mas pidiendo su colaboración:

Tengo una columna de números de tres dígitos cuyo valor cambia automáticamente mediante otra formula, y en una celda aparte tengo un numero que es mi referencia para esa lista de números. La idea es crear una formula que me devuelva solo los números de esa lista si su primer dígito (de izquierda a derecha) es par devuelva los impares, si es impar devuelva los pares; con respecto a el numero de referencia.

ejemplo:

en la celda A1 tengo el numero 123.

en la columna C1:20 tengo los siguientes valores:

A:1 123

124
134
128
158
754
734
674
634
774
772
758
773
214
732
632
122
112
128
178
752

Bien, que la formula me devuelva solo aquellos números de ese listado, cuyo primer dígito empiece por par en este caso con referencia al numero 123.

ya que 123, comienza con un numero impar (1).

el resultado seria:

674
634
214
632

Ahora si en otra ocasión el numero de referencia comienza por par que me devuelva

los números cuyo primer dígito empiecen por impar asi:

A:1 213

574
524
764
724
564
562
578
563
304
522
722
572

Microsoft Office Professional Plus 2010

dejo una hoja de excel con la idea de lo que estoy haciendo.

https://www.mediafire.com/?uu62h2pcy7xac22

1 respuesta

Respuesta
1

Te preparé una macro que se ejecuta cada vez que ingresas un valor en A1, devolviendo la nueva lista en col F.

En el Editor de macros, seleccioná con doble clic el objeto HOJA1 y allí copiá esto:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se ejecuta al cambiar el valor en celda A1
If Target.Address <> "$A$1" Then Exit Sub
'si se limpia la celda no se ejecuta
If Target.Value = "" Then Exit Sub
'limpia el rango donde se colocará la nueva lista
Columns("F:F").Clear
'se controla el 1er dígito
resulta = Application.WorksheetFunction.IsEven(Left(Target.Value, 1))
'recorro la col C y vuelco valor encontrado en col F
filx = 1
fily = 1
While Cells(filx, 3) <> ""
compara = Application.WorksheetFunction.IsEven(Left(Cells(filx, 3), 1))
If resulta <> compara Then
 Cells(fily, 6) = Cells(filx, 3)
 fily = fily + 1
End If
filx = filx + 1
Wend
End Sub

Gracias Profe por tu colaboración;

resulta que al realizar la acción con un dígito cero (0) me devuelve valores pares, es decir reconoce el cero como impar y en este caso el cero es par debería devolverme los impares.

y cuando uno de los dígitos empieza por cero por ejemplo 012 solo me muestra el 12.

y si tiene dos ceros consecutivos ejemplo 001, solo me muestra el 1

te dejo la hoja excel con el ejemplo

https://www.mediafire.com/?lkrqg9n448mfium

Y porqué en tu ejemplo primero, tanto aquí como en el link, ¿no incluiste casos con 0...?

Que tal Profe, Gracias por tu paciencia;

resulta que fue por casualidad no había necesitado un numero que empezará con el dígito cero(0).

todo en la celda de referencia A1 siempre estaba un numero que empezaba con cualquier otro dígito diferente a cero. pero en mi proceso del trabajo me encontré con el numero 012.

fue ahi donde me di cuenta de ese detalle. después que me envío la macro.

estaré atento a su colaboración.

Bien, cambiala x esta entonces.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se ejecuta al cambiar el valor en celda A1
If Target.Address <> "$A$1" Then Exit Sub
'si se limpia la celda no se ejecuta
If Target.Value = "" Then Exit Sub
'limpia el rango donde se colocará la nueva lista
Columns("F:F").Clear
'se controla el 1er dígito, si es 0 el largo del campo no llega a 3
If Len(Target.Value) < 3 Then
 resulta = True
Else
 resulta = Application.WorksheetFunction.IsEven(Left(Target.Value, 1))
End If
'recorro la col C y vuelco valor encontrado en col F
filx = 1
fily = 1
While Cells(filx, 3) <> ""
'si es 0 es par
If Len(Cells(filx, 3)) < 3 Then
 compara = True
Else
 compara = Application.WorksheetFunction.IsEven(Left(Cells(filx, 3), 1))
End If
If resulta <> compara Then
 Cells(fily, 6) = Cells(filx, 3)
 fily = fily + 1
End If
filx = filx + 1
Wend
End Sub

Y tanto la celda A1, como las col C y F en este caso, deben tener formato 'personalizado', con 000 (3 ceros)

Gracias profesora por su buena paciencia y ayuda;

resulta que cada vez que se ejecuta la macro automáticamente las celdas que personalizo con "000", quedan especial Chino (taiwan) pero la columna donde me vuelca el valor encontrado (col f) queda General por ende el cero desaparece.

Y los dígitos que comienzan con cero (0) quedan solos es decir 012 al ejecutarse la macro quedan 12.

Que pena pero con tu configuración no puedo hacer nada... si te parece te envío mi libro y trabajás sobre el.

En tu muestra también lo ví con algo de Taiwan, pero lo personalizé con formato 000 (las 2 col y A1) y anda perfecto.

Sdos

Elsa

Gracias profesora si noy de otra enviame tu libro y trabajo sobre el, por que ya he tratado de cambiar mil veces la personalización de las columna y no he podido.

estaré atento a tu libro feliz dia......

En realidad estoy trabajando en tu libro al que personalicé formatos para que se vea tal como lo necesitas... creo que lo podes hacer vos también sino enviame un correo para que te lo envíe,

Seleccioná el cuadrito que se encuentra entre fila1 y col A, para que se seleccionen TODAS las celdas de la hoja y dale formato General.

Luego seleccioná la celda A1, col C y F, y dale formato Personalizado, y en el campo escribí: 000 y Aceptá.

Si por alguna razón tus formatos vuelven a Taiwan (no sé porqué se les insertó ese formato), modificá la línea que te marco con negrita:

If resulta <> compara Then
Cells(fily, 6) = Format(Cells(filx, 3), "000")


Sdos

Elsa



Profesora esta parte no me quedo clara,

esto lo agrego a la macro que me envío?

o donde lo copio????

If resulta <> compara Then
Cells(fily, 6) = Format(Cells(filx, 3), "000")

Un poquito más de atención... ;) NO hay que agregar ninguna línea, solo MODIFICARLA.

Te dejé una línea de guía y te comenté: <em style="line-height: 1.5em;">modificá la línea que te marco con negrita:

Es decir que busques esta línea:

If resulta <> compara Then

Y modifiques la que sigue dejándola así:

Cells(fily, 6) = Format(Cells(filx, 3), "000")


Sdos!

Profe funciono a la perfección.

Agradecido por tu colaboración y paciencia.

perdón por molestar tanto, hay otros dos temas que tengo en el tablón, espero me colabores.

Feliz Tarde.noche

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas