Saltar al contenido

Sacar Texto en una Celda de distintas longitudes... (Macro)


Recommended Posts

publicado

Estimados

Junto con saludar, solicito a Uds. la ayuda con una macro que me permita sacar dos informaciones desde una celda.

Existe una celda en un archivo que tengo diariamente con las ventas de la empresa.

En un campo viene la observación donde vienen dos datos que necesito sacar 1. Folio 2. Rut de Vendedor

Frente a esto, he tratado de encontrar dos formas de lograr sacar el dato, con la formula Hallar y Reemplazar.

El problema que se suscita es que existe a veces, un espacio de más y distintas variables de los espacio.

He pensado que se podría buscar o hallar en una macro que me extraiga los valores conforme a dos criterios:

a. Folio tiene 7 digitos XXXXXXX

b. RUT tiene 9 o 10 digitos XXXXXXXX-X

Adjunto un archivo de Prueba donde solo tengo las formulas Hallar...

Haber si me ayudan a pensar el tema...

Un abrazo a todos...

P.D.: Una duda, para subir archivos listos como aportes que puedan servir a otros ¿Como lo puedo hacer?

PRUEBA.rar

publicado

Esta macro elimina blancos por la derecha y por la izquierda.

También deja solamente un espacio entre las palabras.

Sub EliminarBlancos()

For Each celda In ActiveSheet.UsedRange
celda.Value = Trim(celda.Value)
Do Until InStr(celda.Value, " ") = 0
celda.Value = Replace(celda.Value, " ", " ")
Loop
Next


End Sub


[/CODE]

publicado

Esta buenísima, sin embargo sucede lo mismo que me ocurre con la simple formula Hallar (combinada).

en algunos casos por ejemplo toman o indican en observación "RV o RUT Vendedor" y no lo indican, o palabras que tienen estas convinaciones de letras por ejemplo: "SERVICIOS"por lo tanto toma los valores siguientes como textos.

Por eso consultaba si existían la forma de identificar a través de la macro una forma que me identifique por valor de campo Numerico con los digitos por ejemplo un RUT contiene campos numéricos y son de 9 o 10 dígitos, y el folio es de 7 solo numérico.

P.D.: Quede loco, y estoy tratando de comprender la macro en su medida...

Consultas:

1. Array nunca lo había trabajado, esto segun lo que leì tiene que ver con llenar o encontrar en una matriz con determinados datos ¿O entendi mal?

2.Ubound ¿Que es?

En definitiva muchos conceptos que no se, y que estoy investigando para comprender.

Saludos Cordiales

publicado

Un Array es una serie de valores. Para referenciar esos valores se ha de proporcionar el número de orden (Índice) que ocupan dentro de la serie empezando desde cero.

En este caso cada uno de ellos recoge la casuística posible de las palabras anteriores al folio y al RUT del vendedor.

Ubound(NombreArray) devuelve el nº de elementos del Array.

Estudiaré la macro que propones.

publicado

Macro Antonio, perdona mi demora en responder...

Estuve revisando el archivo y la macro:

Observación=Replace(Observación, "-", "") ' Me genera la duda, puesto que en alguno casos la observacion contienen otros caracteres numericos.  Si mantuviera el guion como una manera de Identificar el RUT, evitaria tomar el Registro por ejemplos de Fonos o Numero de Serie de la CI.[/PHP]

[PHP]Con El For y = 1 To Len(Observación) ' Aca me imagino que estas contando el largo para saber la posición de donde existe un numero?[/PHP]

Al existir más numero dentro de la observacion, el problema que me da es que en algunos me toma otros valores como RUT, te adjunto un ejemplo donde el RUT del Vendedor toma otros valores.

[PHP]If IsNumeric(Mid(Observacion, y, 1)) = True Then
Numerico = True
Cadena = Cadena & Mid(Observación, y, 1)
Else
Numerico= False
End If
[/PHP]

Adjunto ejemplos de Observaciones que generan información distinta a la que se espera obtener.

Ahora, de todas maneras me parece una maravilla la macro, debo decir que me haz hecho sentir tan neofito, considerando que donde trabajo todas las dudas de excel hasta del corporativo de claro me llegan... jejeje, como dijo el gran filosofo: "Solo se, que nada sé".

[color=blue]- - - - - Mensaje combinado - - - - -[/color]

Se me olvida decir, el tema del folio funciona sin mayores inconvenientes...

BuscarDatos(2).rar

publicado

Macro Antonio

En vista que existe de todas formas celdas que complican y dan error coloque un salto de error

la formula la separo del extraer folio porque esta no genera problemas.

La Formula queda así:

Sub ExtraerRUT()
'Buscamos el RUT del Vendedor
RutVendedor = Array("RUT VENDEDOR", "RUT VEND", "VENDEDOR", "VENDEDORA", "RV") 'Valores a buscar
'
Range("CG1").Select
ActiveCell.FormulaR1C1 = "RUT_VENDEDOR_OBS"

For x = 2 To Range("AZ" & Rows.Count).End(xlUp).Row
Observación = Range("AZ" & x).Value
Do Until InStr(Observación, " ") = 0 'Reduce todos los blancos intermedios a uno solo
Observación = Replace(Observación, " ", " ")
Loop
Observación = Replace(Observación, Chr(10), " ") 'Elimina los saltos de línea
Observación = Replace(Observación, "-", "") 'Elimina guieones
For y = 0 To UBound(RutVendedor)
l = Len(RutVendedor(y)) + 1
i = InStr(Observación, RutVendedor(y))
If i > 0 Then
f = InStr(i + l, Observación, " ")
If f > 0 And f > i Then
On Error Resume Next
Range("CG" & x) = Mid(Observación, i + l, f - (i + l))
On Error Resume Next
Range("CG" & x) = Left(Range("cg" & x), Len(Range("cg" & x)) - 1) & "-" & Right(Range("cg" & x), 1)
Exit For
End If
End If
Next
Next
End Sub[/PHP]

Ahora referente al folio no genera problemas con la forma del numero (salvo cuando ingresan fonos), pero como esto lo uso en función de aquellas Ventas que no logro identificar en función de otra BDD, se reduce la información a buscar.

Aca dejo la Formula para extraer el folio.

[PHP]Sub ExtraerFolio()
Dim Folio, Observación, Cadena, Numérico

Range("CH1").Select
ActiveCell.FormulaR1C1 = "FOLIO_OBS"


For x = 2 To Range("AZ" & Rows.Count).End(xlUp).Row

Observación = Range("AZ" & x).Value
Do Until InStr(Observación, " ") = 0
Observación = Replace(Observación, " ", " ")
Loop
Observación = Replace(Observación, Chr(10), " ")
Observación = Replace(Observación, "-", "")

Numérico = False
Folio = ""

For y = 1 To Len(Observación)

If IsNumeric(Mid(Observación, y, 1)) = True Then
Numérico = True
Cadena = Cadena & Mid(Observación, y, 1)
Else
Numérico = False
End If

If Len(Cadena) = 7 And Numérico = False Then
Folio = Cadena
Cadena = ""
End If

If Numérico = False Then Cadena = ""

Next

Range("CH" & x) = Folio

Next

End Sub[/PHP]

Creo, que más allá de esto no se lograría sacar, pero de todas formas, todas las formulas y usos que diste, me han servido para aplicar a otros archivos y reducir tiempos (que es lo que finalmente uno busca con las macros), lo cual implica que he aprendido mucho gracias a tí maestro.

Por lo que podríamos cerrar el tema.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.