2013-10-08 11 views
-2

Я пробовал и тестировал так много способов, но так и не смог получить то, что мне было нужно.excel vba сравнить ячейки

У меня есть лист Excel, содержащий эти данные: (Это резюме, у меня есть более 150 000 линий)

A   B  C 

30170 38,08 553299 
30170 -12  553299 
30170 -0,8  553299 
30172 38,08 553299 
30172 -12  553299 
30172 -0,8  553299 
30173 19,04 553299 
30173 -6  553299 
30173 -0,4  553299 
30174 19,04 553299 
30174 -6  553299 
30174 -0,4  553299 
90221 197,29 553299 
90221 -5,92 553299 

Что нужно сделать:

  1. тест каждые клетки в колонке а и столбце с

  2. выберите (строка), который имеет матч

  3. удалить последний ряд матча

  4. петля до конца листа excel.

Чтобы быть более точным, мне нужно будет рассчитать каждую строку в столбце B и сравнить с последней строкой выбора.

пример: первые три строки одинаковы, первые две строки суммируют его затем на 3%, а если последняя строка равна, удалите последнюю строку.

Не уверен, если я достаточно ясен, если вам нужна дополнительная информация, дайте мне знать.

+3

WTF я только что прочитал? Ваш вопрос очень расплывчатый. Не могли бы вы его очистить? – CustomX

+3

WTF действительно. Это не имеет никакого смысла. Кроме того: вопросы, требующие кода, должны демонстрировать минимальное понимание проблемы, которую нужно решить. Включите попытки решения, почему они не работают и ожидаемые результаты. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

+1

Спасибо, ребята, за WTF !!! Не всегда легко добавить то, что мы имеем в виду, к словам ... Я постараюсь быть достаточно ясным ... столбец A - код товара, столбец B - цена, столбец C - номер счета-фактуры. Мне нужно сопоставить код товара с кодом товара и номером счета-фактуры с номером счета-фактуры (строка с 1 по 3 является совпадением) и (строка 4-6 соответствует) и т. Д. После того, как матч найден, мне нужно (B), добавьте первые строки вместе (не последние), это даст мне результат, тогда я умножу этот результат на 3%, если результат формулы равен последней строке (третья строка или любая последняя строка) удалить строку ... – user2844413

ответ

0

Это может сработать и пропускает петлю (равно гораздо более быстрое выполнение)

Sub Sample() 

    Range("D2").FormulaR1C1 = _ 
     "=IF(RC[-3]&RC[-1] = R[1]C[-3]&R[1]C[-1],"""",IF(ABS(CEILING(SUMIFS(R[-1]C2:R2C2,R[-1]C1:R2C1,RC1,R[-1]C3:R2C3,RC3)*0.03,0.1))=ABS(RC[-2]),""Delete"",""""))" 
    Range("D2").AutoFill Destination:=Range("D2:D15"), Type:=xlFillDefault 
    Range("D1").AutoFilter Field:=4, Criteria1:="<>" 
    Range("D2", Range("D" & Rows.Count)).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    Columns("D").Delete 
    ActiveSheet.AutoFilterMode = False 

End Sub 

Предупреждения: Также тестовый код на COPY ваших данных, пока вы не 100% уверены, что это правильно

ПРИМЕЧАНИЕ: Этот ответ предполагает, что у вас есть заголовки для ваших данных, если у вас нет еще нескольких строк, будет n чтобы получить полную функциональность.

Смежные вопросы