Verificar la conformidad de una matrícula
Resuelto
bod77
Mensajes publicados
52
Fecha de registro
Estado
Miembro
Última intervención
-
bod77 Mensajes publicados 52 Fecha de registro Estado Miembro Última intervención -
bod77 Mensajes publicados 52 Fecha de registro Estado Miembro Última intervención -
Hola,
Deseo verificar en celdas de Excel la conformidad de matrículas bajo el formato siguiente "AA-123-CC".
Me gustaría que si la celda tiene este formato correcto con los 2 "-" entonces devuelva el valor 1, de lo contrario el valor 0.
Gracias por su ayuda
Atentamente.
Deseo verificar en celdas de Excel la conformidad de matrículas bajo el formato siguiente "AA-123-CC".
Me gustaría que si la celda tiene este formato correcto con los 2 "-" entonces devuelva el valor 1, de lo contrario el valor 0.
Gracias por su ayuda
Atentamente.
19 respuestas
-
Hola, creo que la función IZQUIERDA puede ayudarte, te recomiendo que vayas a la ayuda en línea sobre esta función, es clara y concisa.
https://support.microsoft.com/es-es/office/izquierda-izquierdab-funciones-9203d2d2-7960-479b-84c6-1ea52b99640c?ocmsassetid=hp010062568&correlationid=f78ce82c-097c-41de-8af7-6adf0140faa4&ui=es-es&rs=es-es&ad=es -
Información adicional, el número de placa me es proporcionado por un proveedor (una gran lista de varios cientos de placas) y quiero asegurarme de que no haya un error, como una letra o un número faltante.
Además, no logro entender el razonamiento con la función IZQUIERDA.-
No suelo usarlo a menudo, pero acabo de probarlo en Excel, así que:
Tengo mi celda A1 que contiene "AA-123-CC", le digo a la celda al lado, =IZQUIERDA(A1;2), me devuelve "AA", es decir, los 2 primeros caracteres de la celda A1.
Y la función IZQUIERDAB funciona igual, salvo que un solo carácter equivale a 2, así que si pones IZQUIERDAB(A1;2 obtendrías "AA-1", esta última no le veo mucho sentido. -
-
Tienes la función NBCAR() que te devuelve el número de caracteres, luego haces un control sobre este número
MAJUSCULE() para pasar toda tu celda a MAYÚSCULAS.
Si he entendido bien, tu placa debe tener el formato siguiente "XX-111-XX" donde X es una letra y 1 es un número, por lo tanto, puedes verificar que =CHERCHE("-",A1) te devuelve 3 (la posición de "-" en la cadena) y luego verificas que =CHERCHE("-",A1;(B4+1)) donde B4 es la posición del primer carácter "-" es 7.
-
-
Hola,
Intenta con esto para probar la celda A1, la fórmula se debe incrementar hacia abajo según la altura de tu lista de datos
= SI(SUMA(LARGO(A1)-LARGO(SUSTITUIR(A1; "-"; "")))/LARGO("-")=2;1;0)
También puedes forzar la entrada, por ejemplo, resaltar el rango A1:A100, luego Datos/Validación de datos/seleccionar Personalizado en Permitir y pegar esta fórmula en Fórmula
= SUMA(LARGO(A15)-LARGO(SUSTITUIR(A15; "-"; "")))/LARGO("-")=2
Luego, en la pestaña Alerta de error puedes ingresar un título y un mensaje como que la entrada no es conforme, etc.
Si esta solución te interesa, buscaré un código para imponer el guión después de dos dígitos y antes de los dos últimos
A+
Mike-31
Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento. -
bod77, Hola.
"...Me gustaría que si la celda tiene este buen formato con los 2 "-", entonces devuelva el valor 1, de lo contrario, el valor 0. ..."
A1 = AA-123-CC
Intenta usar esta fórmula.
B1 --> =SI(Y(EXTRAE(A1;3;1)="-";EXTRAE(A1;7;1)="-");1;0)
¿Era eso lo que querías?
Espero haber ayudado.
--
Belo Horizonte, Brasil.
Marcílio Lobão -
Gracias Mazzaropi, esto funciona, me quitas una espina del pie
Gracias también a los demás por la ayuda -
Hola a todos
Y si queremos probar todos los caracteres de la matrícula (pero no tenemos en cuenta las letras prohibidas)
=SI(NBCAR(A2)=9;SI(ET(ET(CODE(STXT(A2;1;1))>=65;CODE(STXT(A2;1;1))<=90);ET(CODE(STXT(A2;2;1))>=65;CODE(STXT(A2;2;1))<=90);STXT(A2;3;1)="-";ET(CODE(STXT(A2;4;1))>=48;CODE(STXT(A2;4;1))<=57);ET(CODE(STXT(A2;5;1))>=48;CODE(STXT(A2;5;1))<=57)*ET(CODE(STXT(A2;6;1))>=48;CODE(STXT(A2;6;1))<=57);STXT(A2;7;1)="-";ET(CODE(STXT(A2;8;1))>=65;CODE(STXT(A2;8;1))<=90);ET(CODE(STXT(A2;9;1))>=65;CODE(STXT(A2;9;1))<=90));1;0);0)
Cdlmnt -
Re,
vuelvo a la carga con mi propuesta de lista de validación, en mi propuesta anterior, si reemplazamos mi fórmula por esta última, será imposible no respetar la entrada de dos letras, el guion, un número aleatorio, un guion y dos letras para terminar
=Y(ENCONTRAR("-",A18)=3;LARGO(A18)-(ENCONTRAR("-",A18;4)-1)=3)
A+
Mike-31
Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento. -
Hola Mike
Con tu última propuesta esto está aceptado
$p-123-!m o 12-123-12
Además, creo que algunas letras (O, I, U) no son válidas en un número de matrícula
Saludos -
Re,
Gracias ccm, sí, es exactamente eso, pero mi fórmula se basa en dos caracteres y un guion al principio, un mínimo de tres caracteres en el centro y un guion y dos caracteres para terminar.
Si la entrada no es conforme, mensaje de error personalizado.
Adjunto archivo de ejemplo para aquellos que siguen la discusión.
https://www.cjoint.com/?DDzt5hae6UY
--
A+
Mike-31
Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento. -
Una vez más, muchas gracias a todos por su ayuda que me ha sido muy valiosa.
-
Hola,
Ahora debo realizar una prueba de Excel sobre las antiguas matrículas para saber si son válidas durante la entrada de datos.
¿Puede ayudarme de nuevo?
Gracias de antemano. -
Re,
Explica lo que quieres, después veremos si es posible
--
A+
Mike-31
Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento. -
Hola,
por diversión con funciones personalizadas
Opción Explícita
'-------
''placas antiguas
Función Verifier_oldplaque(Placa Como String) Como Boolean
Dim Separe, Nbre_letras Como Byte
Dim Reg Como Object
Dim Verif Como Object
Separe = Split(Placa)
Establecer Reg = CreateObject("vbscript.regexp")
Con Reg
Si Len(Separe(1)) < 3 Entonces
.Patrón = "^[0-9]{1,4}[\s][A-Z]{1,2}[\s][0-9]{1,2}$"
Sino
.Patrón = "^[0-9]{1,3}[\s][A-Z]{1,3}[\s][0-9]{1,2}$"
Fin Si
Establecer Verif = .Ejecutar(Placa)
Fin Con
Verifier_oldplaque = (Verif.Count = 1)
Fin Función
'------------------------------------
'nuevas placas
Función Verifier_newplaque(Placa Como String) Como Boolean
Dim Reg Como Object
Dim Verif Como Object
Establecer Reg = CreateObject("vbscript.regexp")
Con Reg
.Patrón = "^[A-Z]{2}[-][0-9]{3}[-][A-Z]{2}$"
Establecer Verif = .Ejecutar(Placa)
Fin Con
Verifier_newplaque = (Verif.Count = 1)
Fin Función
--
Michel-
-
No son inválidas, pero podemos afinar el resultado ;)
Por cierto, me equivoqué, es la U en lugar de la V que no se utiliza.
Esto es donde estoy:Function plaqueOK(Plaque As String) As Boolean Dim Separe, Nbre_lettres As Byte Dim Reg As Object Dim Verif As Object Set Reg = CreateObject("vbscript.regexp") With Reg If InStr(Plaque, "-") > 0 Then ' nueva placa ' 2 letras-3 números-2 letras .Pattern = "^[A-HJ-NP-TV-Z]{2}[-][0-9]{3}[-][A-HJ-NP-TV-Z]{2}$" Else ' placa antigua Separe = Split(Plaque) If Len(Separe(1)) < 3 Then ' 1 a 4 números, 1 o 2 letras, 2 números .Pattern = "^[0-9]{1,4}[\s][A-HJ-NP-TV-Z]{1,2}[\s]((0[1-9])|([1-8][0-9])|(9[0-5])|(2[AB]))$" Else .Pattern = "^[0-9]{1,3}[\s][A-HJ-NP-TV-Z]{3}[\s]((0[1-9])|([1-8][0-9])|(9[0-5])|(2[AB]))$" End If End If Set Verif = .Execute(Plaque) End With plaqueOK = (Verif.Count = 1) End Function
Controla las placas antiguas y nuevas, letras válidas y departamentos del 01 al 95 (con 20, 2A, 2B aceptados).
Aclarar que he hecho esto a partir del trabajo de Michel porque estoy descubriendo las regex. Estoy lejos de poder garantizar una corrección a una posible anomalía constatada.
https://www.cjoint.com/?DEytTaOcdtW
eric
-
-
Para ser exhaustivos y evitar ser acusados de ostracismo, tenga en cuenta que las antiguas placas en los departamentos de Ultramar terminan con
3 cifras
: 971 = Guadalupe, 972 = Martinica, 973 = Guayana, 974 = Reunión.
también verifique cuál es la regulación para Mayotte, Nueva Caledonia, Tahití, Wallis y Futuna, San Pedro y Miquelón, etc.
¡Gracias por nosotros!
--
¡Está bien, la jubilación! Sobre todo en las Antillas ... :-)
☻ Raymond ♂-
Hola Raymond,
¿Y cuántos dígitos al principio y letras son posibles?
Me informé. Si sabes lo que significa la parte subrayada:
Los departamentos y colectividades 971 a 978 utilizan un sistema idéntico al utilizado en metrópoli con un máximo de nueve caracteres, siendo los dos primeros dígitos del número de departamento cada vez más frecuentemente superpuestos para reducir el número máximo de caracteres a ocho.
¿Qué se debe entender? ¿97?
Además, hablan de un máximo de 9 caracteres cuando en metrópoli son 8. Me parece extraño... Todo eso es demasiado confuso.
El problema es que si las reglas no son claras y exhaustivas, muchas placas válidas serán anunciadas como falsas.
Para las otras islas, hay demasiados casos particulares.
Eric -
https://www.cjoint.com/?DEAfNIpQQyP
Efectivamente, esa era mi forma de señalar que esta "prueba de conformidad" estaba lejos de cubrir todos los casos posibles. Al igual que el corrector ortográfico y gramatical de Word, es una ayuda interesante, pero no cubre el 100% de las situaciones.
Amistosamente. -
-
-
HOLA?
Eric,
Con respecto a los DOM, quizás añadir un "O" con 97[1_8]
Para los TOM, el sistema es diferente: generalmente son números seguidos de 1 o 2 letras (P para Polinesia)
pero la numeración de las antiguas placas es en realidad complicada con p+q+n +1 excepciones y algunos nichos fiscales ;o)
la fuente:
https://fr.wikipedia.org/wiki/Plaque_d%27immatriculation_fran%C3%A7aise
así que deberíamos saber dónde el solicitante desea limitar su control
Buen domingo a todos
--
Michel-
Hola Michel,
De acuerdo, esperaré a que se asiente un poco antes de añadir. Para los TOM haremos como con las motocicletas: caeremos en el ostracismo.
Y si queremos ser exhaustivos, he encontrado un sitio interesante: http://plaque.free.fr/f_f.html :-)
Eric
-
-
Hola
La prueba debe hacerse en Excel pero con una fórmula SI y no a través de una macro (lo siento) Basado en las antiguas matrículas.
Debo verificar que el formato sea correcto =>
ejemplo: 3711 LL 77 o 3711 LLL 77 o 371 LL 974 por ejemplo. Si está bien, debe devolver el valor 1, de lo contrario 0. También si 371 L 99 es incorrecto, por ejemplo.
Espero haber sido lo suficientemente claro. Gracias por tu ayuda de nuevo.-
-
¿Y por qué no por macro? ¿Una alergia?
4 ejemplos, de los cuales 1 falso, no son suficientes, se necesita una lista exhaustiva de los casos válidos.
Y con si() eso podría hacerte una fórmula imbebible e imposible de modificar en caso de necesidad.
eric
edit: por fórmula has recibido propuestas de ccm81 y mike. Te toca complementarlas siguiendo el mismo principio.
-
-
Hola,
Nueva versión un poco más completa, se añaden los DOM-TOM y los ciclomotores.
https://www.cjoint.com/?DEAn6eyLKZO
eric
--
Al intentar continuamente, acabamos por lograrlo.
Así que cuanto más falla, más posibilidades tenemos de que funcione. (los Shadoks)
Además de dar las gracias (sí, sí, ¡se hace!), piensa en marcar como resuelto. Gracias -
... y voluntariamente no he mencionado los vehículos de los Servicios del Estado, los vehículos militares, los coches con matrícula diplomática (embajadas), las matrículas provisionales (en tránsito temporal) !
--
¡Es genial, la jubilación! Especialmente en las Antillas ... :-)
☻ Raymond ♂ -
Mi jefe no desea macros y eso me viene bien porque nunca las he hecho. Además, tenemos que transmitir el archivo y los destinatarios no tienen la misma versión de Excel.
Por mi parte, me limitaré a las placas antiguas, los cilindros no nos interesan.
Formato seleccionado =>
1234 AB 01
123 ABC 01
124 ABC 2A
12 AB 01
1 A 01
1234 AB 971
123 ABC 972
123 ABC 00
123-ABC-01
123 ABC 96
123 AB 1
1234 ABC 01
123 AI 01
1234 AO 01
1234 UB 01
1234 ABC 01
AB 123 AB
123 AB 979
1234 ABC 971