¿Alguna macro tipo función udf que me extraiga una cadena específica luego de validar otra cadena antecedente?

Tengo una consulta tengo una planilla con 500 filas y quisiera armar una tabla dinámica utilizando un número alfanumerico, el problema que el texto no está ubicado siempre en el mismo lugar pero la palabra común en todas las filas es "importación N." ya que al lado siempre sigue mi número de despacho, por ejemplo si la macro lee está frase en A1 "Operacion de despacho de Importación N. 1900C5789003A Documento N. 001-002-012 abierta en fecha 12/02/19" y en a2 dice "recepción de despacho de importacion N. 1900C5789003A remitida en fecha 17/02/19" y en A3 "cancelacion por pedido cliente de despacho de Importación N. 1900C5789003A cancelada por Documento N. 001-003-023 en fecha 22/02/19" y en a4 "Proceso de habilitación segun pago para apertura de Despacho de Importacion N. 1900C578003A de fecha 19/01/19 con documento 001-001-019" en la columna B quisiera que me extraiga la porción Alfanumerica "1900C5789003A" y mi idea es que cuando la macro recorra toda la colulmna A y encuentre la cadena "Importacion N." me lo replique en la columna B el número alfanumerico no se si se puede crear una función udf o algo parecido, me encantaría que extraiga si me pueden ayudar

2 respuestas

Respuesta
2

Veo que ya te han enviado la función.

Como también estuve desarrollándola, te dejo mi aporte considerando que en tus ejemplos hubo textos sin acentos. Y según tu última petición también se retira la coma final si hubiera.

Function EXTRAER_TEXTO(TEXTO As String) As String
'x Elsamatilde
SEPARA = Split(UCase(TEXTO), UCase("Importación N."))
If UBound(SEPARA) > 0 Then
    SEPARA2 = Split(SEPARA(1), " ")
Else
    SEPARA = Split(UCase(TEXTO), UCase("Importacion N."))
    If UBound(SEPARA) > 0 Then SEPARA2 = Split(SEPARA(1), " ")
End If
If Right(SEPARA2(1), 1) = "," Then SEPARA2(1) = Mid(SEPARA2(1), 1, Len(SEPARA2(1)) - 1)
EXTRAER_TEXTO = SEPARA2(1)
End Function

Esos fueron tus datos de origen y así se observa el resultado.

Respuesta
1

Prueba esa macro, es una UDF que usa el punto de N. como separador, teclear y luego mandas llamar la fórmula o la copias de la fila previa, respecto a teclear y dar enter eso no funciona en una hoja a menos que sea un formulario con campos textbox

Buenas tardes experto James Bond, estuve probando y no me extrae porque veo que en tu texto pusiste "Operacion de Despacho de importacion N. 1900C5789003A", pero mi reporte saca en filas con el siguiente texto "Operacion de despacho de Importación N. 1900C5789003A Documento N. 001-002-012 abierta en fecha 12/02/19", como veras tiene mas datos en la cadena de texto, lo que me gustaria si la macro pudiera extraerlo una vez que encuentre una lectura "importacion N. que me extraiga la porcion alfanumerica porque siempre esta al lado, solo que nunca estan ordenados en el mismo lugar, mismo caso es el texto "cancelacion por pedido cliente de despacho de Importación N. 1900C5789003A cancelada por Documento N. 001-003-023 en fecha 22/02/19" y en a4 "Proceso de habilitación segun pago para apertura de Despacho de Importacion N. 1900C5789003A de fecha 19/01/19 con documento 001-001-019", que me extraiga solo el numero alfanumerico y no lo que esta despues de la porcion alfanumerico "1900C5789003A", te voy a agradecer si podrias ayudarme por favor

Por hay debiste haber empezado poniendo las condiciones necesarias para no estar adivinando, checa la imagen con los ejemplos que pusiste en el post y el resultado de la función personalizada, como puedes observar la función extrae el alfanumérico correspondiente a la importación sin importar el orden en que se encuentre dentro del texto, solo una condición la macro solo mostrara resultados si la palabra importación N. va acentuada y la N termina en un punto, y por cierto al ser función personalizada en un numero grande de filas tu excel puede alentarse.

Function EXTRAER_TEXTO(TEXTO As String) As String
SEPARA = Split(UCase(TEXTO), UCase("Importación N."))
If UBound(SEPARA) > 0 Then
    SEPARA2 = Split(SEPARA(1), " ")
    EXTRAER_TEXTO = SEPARA2(1)
End If
End Function

¡Gracias! Muchísimas gracias James Bond! Eres un genio! Una ultima consulta en caso que la porción alfanumérica tenga 119032IC04000169R, (una coma) al final al usar la función que creaste me extrae también la coma ",", que posibilidades hay de ajustar de que no extraiga la (,) y quede solo así 19032IC04000169R y no así 19032IC04000169R,? Si me podrías ayudar por favor y mil disculpas por no aclarar bien desde un principio,

saludos 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas