2016-06-17 9 views
1

У меня есть таблица, которая выделяет определенные типы данных, и мне нужны отдельные суммы для значений выше первой Красной строки, а затем другая сумма для значений ниже экземпляра LAST из красной строки. Я должен упомянуть, что строки условно отформатированы, но если мне нужна встроенная строка-помощник, которая вполне допустима. Например, вместо чтения прочитанного CF, возвращающего TRUE, в столбце H может быть «x» каждый раз, когда есть красная строка, поэтому сумма может суммироваться до первого «x», а затем после последнего экземпляра «x» ».Суммируйте диапазон до и после определенного цвета или значения ячейки?

Объем вводимых данных и выделенные строки изменяются с каждым проектом, поэтому он не может быть простой ссылкой на ячейку. Обычно это больше, чем две красные строки. Числа всегда находятся в желтых рядах, поэтому цвета ячеек самих значений не имеют значения.

Например, для примера ниже мне нужна первая сумма для возврата 6, а затем вторая сумма для возврата 4. (Ячейки не объединены, она просто выглядит именно из-за форматирования, которое я включил в СНиП Все значения в столбце G)

Color Example

с Цвета:.

Sub findRedsAndSum() 

redCount = 0 
For x = 1 To range("b65536").End(xlUp).row 'find last row 
    If range("G" & x).value = "CG" Then 'find red cells 
     redCount = redCount + 1 
    End If 
Next x 

redCountAgain = 0 

For x = 1 To range("b65536").End(xlUp).row 'find last row 
    If range("G" & x).value = "CG" And redCountAgain = 0 Then 
     range("I" & x - 1).value = sumVar 
     sumVar = 0 
     redCountAgain = redCountAgain + 1 
    ElseIf range("G" & x).DisplayFormat.Interior.ColorIndex = 3 Then 
     redCountAgain = redCountAgain + 1 
     sumVar = 0 
    End If 
    If redCountAgain = redCount And range("G" & x).value <> "CG" Then 
     sumVar = sumVar + range("G" & x).value 
    End If 
    If redCountAgain = 0 Then 

sumVar = sumVar + RAN GE ("G" & х) .value

End If 
    If x = range("b65536").End(xlUp).row Then 
     range("I" & x + 1).value = sumVar 
    End If 

Next x 


End Sub 

Я получаю сообщение об ошибке "несоответствия типов" на выделенной линии.

С Helper Колонка:

Эритроциты в колонке «G» (где значения) в настоящее время заполнены «CG» вместо того, чтобы быть пустым. Это можно перенести в столбец «I», если его нужно отделить от добавленных значений.

EDIT: Все еще есть проблема с предоставленными ответами. Подстановочный знак '?' символы в списке вызывают мою ошибку, но я хотел бы сохранить эту функцию, если это возможно.

Вот надрез из критериев:??????

Acadia Realty Trust
согласен недвижимость АМФ
александр s вкл
александр s ?? включая дополнительные
Александрию недвижимость ? акции?вкл

+0

Есть условие, что в настоящее время используется для окраски клеток? –

+0

@ScottCraner Да, для желтых ячеек он просматривает именованный диапазон под названием «Критерии», который имеет почти 300 критериев, и красные ячейки выделяются, если столбец B содержит «Прирост капитала». В настоящий момент я пытаюсь работать над сценарием вспомогательной колонки, который я собираюсь добавить к моему вопросу. – Excellerator

ответ

1

Я вижу, что вы слили клетки в вашем примере, но я дам код выстрел только с помощью колонка А
enter image description here

Sub findRedsAndSum() 

    redCount = 0 
    For x = 1 To Range("a65536").End(xlUp).Row 'find last row 
     If Range("a" & x).Interior.ColorIndex = 3 Then 'find red cells 
      redCount = redCount + 1 
     End If 
    Next x 

    redCountAgain = 0 

    For x = 1 To Range("a65536").End(xlUp).Row 'find last row 
     If Range("a" & x).Interior.ColorIndex = 3 And redCountAgain = 0 Then 
      Range("b" & x - 1).Value = sumVar 
      sumVar = 0 
      redCountAgain = redCountAgain + 1 
     ElseIf Range("a" & x).Interior.ColorIndex = 3 Then 
      redCountAgain = redCountAgain + 1 
      sumVar = 0 
     End If 
     If redCountAgain = redCount And Range("a" & x).Interior.ColorIndex <> 3 Then 
      sumVar = sumVar + Range("a" & x).Value 
     End If 
     If redCountAgain = 0 Then 
      sumVar = sumVar + Range("a" & x).Value 
     End If 
     If x = Range("a65536").End(xlUp).Row Then 
      Range("b" & x + 1).Value = sumVar 
     End If 

    Next x 


End Sub 

EDIT

с помощью «помощника» :
enter image description here

Sub findRedsAndSum() 

    redCount = 0 
    For x = 1 To Range("a65536").End(xlUp).Row 'find last row 
     If Range("a" & x).Value = "this is red" Then 'find red cells 
      redCount = redCount + 1 
     End If 
    Next x 

    redCountAgain = 0 

    For x = 1 To Range("a65536").End(xlUp).Row 'find last row 
     If Range("a" & x).Value = "this is red" And redCountAgain = 0 Then 
      Range("b" & x - 1).Value = sumVar 
      sumVar = 0 
      redCountAgain = redCountAgain + 1 
     ElseIf Range("a" & x).Interior.ColorIndex = 3 Then 
      redCountAgain = redCountAgain + 1 
      sumVar = 0 
     End If 
     If redCountAgain = redCount And Range("a" & x).Value <> "this is red" Then 
      sumVar = sumVar + Range("a" & x).Value 
     End If 
     If redCountAgain = 0 Then 
      sumVar = sumVar + Range("a" & x).Value 
     End If 
     If x = Range("a65536").End(xlUp).Row Then 
      Range("b" & x + 1).Value = sumVar 
     End If 

    Next x 


End Sub 
+0

На самом деле они не слиты. Это просто выглядит из-за форматирования. Мои извинения. Однако, поскольку ячейки условно отформатированы, интерьер. Colorindex фактически не три. Это технически все еще пусто, поэтому он не будет читать это. – Excellerator

+0

мое решение работает для вас? – jellz77

+0

Я только что редактировал свой оригинальный комментарий. К сожалению, это произойдет не из-за интерьера. Colorindex. Я кулачок, работая над вспомогательной колонкой сейчас, и он мог прочитать, что вместо цвета? Я постараюсь сохранить вас в курсе. Благодарю. – Excellerator

2

Используя вспомогательную колонку, вы захотите эту формулу массива сделать этот вспомогательный столбец. Это требует, чтобы критерии варьируются значения в нижнем регистре:

=IF(AND(SUM(LEN(B2)-LEN(SUBSTITUTE(LOWER(B2),Criteria,"")))>0,ROW()<MATCH(TRUE,ISNUMBER(SEARCH("capital gain",$B$1:INDEX(B:B,MATCH("ZZZ",B:B)))),0)),1,IF(AND(SUM(LEN(B2)-LEN(SUBSTITUTE(LOWER(B2),Criteria,"")))>0,ROW() > MATCH(2,IF(ISNUMBER(SEARCH("capital gain",$B$1:INDEX(B:B,MATCH("ZZZ",B:B)))),1))),2,0)) 

Это поставит 1 для этих чисел до и 2 для этих чисел после.

Будучи формулой массива, она должна быть подтверждена клавишей Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования. Если все сделано правильно, Excel поместит {} вокруг формулы.

Тогда это дело быстро SUMIF() (я кладу формулу в колонке J)

=SUMIF(J:J,1,F:F) 

и

=SUMIF(J:J,2,F:F) 

![![![enter image description here

+0

Я получаю «# N/A», потому что ячейки в столбце B являются не только «Прирост капитала», но и содержат его. Например, он может сказать: «Вставка 2а:« Общий прирост капитала »или« 2А. Долгосрочный прирост капитала »и т. Д. Единственной константой является« Прирост капитала », поэтому я пытался использовать функцию поиска, но конечно, это не работает в диапазоне (по крайней мере, насколько мне известно). То же самое и для других данных. Ячейки не соответствуют ячейкам критериев, а просто содержат их. – Excellerator

+0

Моя следующая формула для моей вспомогательной колонки: «= IF (ISNUMBER (SEARCH (« Усиление капитала », B3555)),« CG », IF (ISNUMBER (MATCH (« cg », $ I $ 1: I3554,0)), «1», «0»)), но это дает мне 1 также между КГ, а также после. Может ли это быть каким-то образом объединено с вашим массивом, чтобы сделать после 2 и промежуточный 0, как они есть у вас? – Excellerator

+0

@JRivs см. Редактирование, возможно, вам потребуется обновить экран. –

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