Excel VBA: busque y elimine múltiples valores de cadenas en una columna
-
14-10-2019 - |
Pregunta
Antecedentes: necesito limpiar un archivo CSV de mi extracto bancario para su uso en una herramienta de información financiera en línea.
Todas las transacciones están en los siguientes formatos (columnas separadas por comas):
0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9
El problema que tengo es que la información en la columna THRID es única debido a la inclusión del monto de la transacción y la fecha: "Pago de tarjeta a Mickey Mouse*29.90 GBP el 22-12-2010*". En consecuencia, me veo obligado a clasificar las más de 200 transacciones individualmente, lo que no es condicional con mi bienestar mental.
La mejor solución que se me ocurre es eliminar todos los números de esta columna y encontrar y reemplazar todos los términos redundantes ("GBP On", ".", "-") con un valor nulo, pero no estoy seguro de cómo para armar eso.
Cualquier ayuda sería muy apreciada.
Solución
Lo siguiente puede ayudarlo. Estoy haciendo los siguientes supuestos:
- Obtiene sus detalles de banca en línea en un formato .csv inicialmente
- Tu tercera columna es siempre de la forma
TextDescription+Amount+Currency+Date
- En el archivo .csv, la tercera columna es la columna C en el libro de trabajo
Sigue estos pasos:
- Abrir archivo .csv
- Abra VBE Editor presionando
ALT + F11
- Seleccione Insertar> módulo de la barra de herramientas
En el módulo, pegue el siguiente código, coloque el cursor en cualquier parte del código y luego presione 'F5'
Sub CleanTransaction() Dim rng As Range, cl As Range Dim lastRow As Long, iChar As Long lastRow = Range("C1").End(xlDown).Row Set rng = Range("C1:C" & lastRow) For Each cl In rng For iChar = 1 To Len(cl) If IsNumeric((VBA.Mid$(cl, iChar, 1))) Then cl = VBA.Trim$(VBA.Left$(cl, iChar - 1)) End If Next iChar Next cl End Sub
Esto debería hacer lo siguiente para cada elemento en la columna C:
CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010
... se convierte en ...
CARD PAYMENT TO MICKEY MOUSE
Tenga en cuenta que el código funciona buscando la primera ocurrencia de un número en la descripción y eliminando todo después de eso. Esto supone esa primera ocurrencia de un número siempre denota el precio. Si el destinatario de pago tuviera un número en el nombre, el código fallaría, por ejemplo, el pago de la tarjeta a los teléfonos4U