Excel VBA: поиск и удаление нескольких значений из строк в одном столбце

Справочная информация. Мне нужно очистить CSV-файл моей банковской выписки для использования в онлайн-инструменте финансовой отчетности.

Все транзакции представлены в следующих форматах (столбцы разделены запятыми):

0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9

У меня проблема в том, что вся информация в третьем столбце уникальна из-за включения суммы и даты транзакции - «ПЛАТЕЖ КАРТОЙ МИККИ МАУЗУ*29,90 GBP 22-12-2010*» . Следовательно, я вынужден классифицировать все более 200 транзакций по отдельности, что не способствует моему психическому благополучию.

Лучшее решение, которое я могу придумать, - это удалить все числа из этого столбца и найти и заменить все избыточные термины ("GBP ON", ".", "-") нулевым значением, но я не уверен, как чтобы собрать это вместе.

Любая помощь будет принята с благодарностью.


person Kurt    schedule 30.12.2010    source источник
comment
Это я, или вы не указываете, что вы хотите СОХРАНИТЬ из третьего столбца.   -  person Dr. belisarius    schedule 30.12.2010
comment
данные изначально находятся в рабочей книге Excel, которую вы затем сохраняете в формате .csv для загрузки в онлайн-инструмент?   -  person Alex P    schedule 30.12.2010
comment
Возможно, вы можете использовать заголовок анализа. Например, в E1 у вас есть ОПЛАТА КАРТОЙ, в C4 у вас есть ОПЛАТА КАРТОЙ МИККИ МАУСУ, в D4 у вас есть денежная стоимость, а в E4 у вас есть формула, которая проверяет строку заголовка в тексте C4 =IF(ISERROR(FIND(E$1,$C4,1)),"",$D4)   -  person Fionnuala    schedule 30.12.2010


Ответы (1)


Следующее может помочь вам. Я делаю следующие предположения:

  1. Сначала вы получаете реквизиты для онлайн-банкинга в формате .csv.
  2. Ваш третий столбец всегда имеет форму TextDescription+Amount+Currency+Date
  3. В файле .csv третий столбец — это столбец C в книге.

Следуй этим шагам:

  1. Откройте CSV-файл
  2. Откройте редактор VBE, нажав ALT + F11
  3. Выберите Вставить > Модуль на панели инструментов.
  4. Вставьте в модуль следующий код, поместите курсор в любом месте кода, а затем нажмите «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
    

Это должно сделать следующее для каждого элемента в столбце C:

CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010 

... становится...

CARD PAYMENT TO MICKEY MOUSE

Обратите внимание, что код работает, ища первое вхождение числа в описании и удаляя все после этого. Это предполагает, что первое появление числа всегда обозначает цену. Если у получателя платежа было число в имени, то код не сработает, например. ОПЛАТА КАРТОЙ НА PHONES4U

person Alex P    schedule 30.12.2010
comment
Остаток, который отлично работает! Минус нечетное снятие банкомата, указанное как Снятие наличных в банкомате LLOYDS TSB BANK PLC 123 FULHAM BROADWAY LONDON, это абсолютно идеально. Кстати, инструкции, которые вы написали, были очень четкими и не предполагали никаких предварительных знаний - настоящего эксперта. Престижность. - person Kurt; 30.12.2010
comment
Вместо удаления после первого числа вы можете найти первую десятичную точку, затем сделать резервную копию 6 символов и начать поиск первого числа оттуда. Может быть, больше шансов иметь число, чем точку в описании. Затем вы должны выйти после того, как вы нашли номер. - person Dick Kusleika; 30.12.2010