2016-08-19 2 views
-1

enter image description hereVBA Sum с 2 условия

Sub Tsum() 
Dim int001 As Range 
Dim int002 As Range 
Dim int003 As Range 
    Dim data1 As Date 
    Dim data2 As Date 
    Dim data3 As Date 
Dim dates As Date 
Dim nr_rows As Integer 

'-------------------------------------------------------------- 

nr_rows = Cells(Rows.Count, "A").End(xlUp).Row 
Set int001 = Range("B2:B" & nr_rows) 
Set int002 = Range("C2:C" & nr_rows) 
Set int003 = Range("D2:D" & nr_rows) 
    data1 = "01/02/2016" 
    data2 = "02/02/2016" 
    data3 = "03/02/2016" 
Set dates = Range("A2:A" & nr_rows) 
'-------------------------------------------------------------- 

Range("H2:H" & nr_rows) = Application.WorksheetFunction.SumIfs(dates, Range("B2:B" & nr_rows), data1 & data2 & data3, Range("B2:B" & nr_rows), ">0") 


End Sub 

мне нужно немного помочь с VBA.

У меня есть только таблица «A1: D10», и я сделал столбец «H», чтобы понять, какие результаты я хочу.

Таким образом, сумма в графе «H» сделана из таблицы «A1: D10», но это необходимо 2 условия:

  • суммы все данные из колонки с той же датой
  • значения из эта колонка должна быть> 0

И установите этот результат в колонке «Н», как на картинке.

Выше я попытался запустить сценарий, но результатов пока нет.

+0

SUMIFS или формула массива может сделать это –

+0

Вы знаете, что можете делать это с SUMIF, но вы не знаете, как это сделать? Вы посмотрели на помощь для SUMIF? –

ответ

0

SUMIFS или формула массива может сделать это, например SUMIFS($B$1:$B$3,$A$1:$A$3,"01/02/2016",$B$1:$B$3,">0")

+0

Да, но вы можете заполнить и использовать OFFSET, чтобы переместить столбец SUM на основе дня, посмотрите на помощь SUMIF и OFFSET, вы найдете там решение. –

+0

Я хочу это сделать, в VBA не в Excel – BOB

+0

Ну, как вы делаете SUM в VBA, идите, идите сами. Вы можете использовать такие функции, как OFFSET в VBA. –

0

Вы могли бы просто использовать формулу для этого.

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

Первым делом нужно создать формулу, чтобы принять во внимание:

Создать именованный диапазон по следующей формуле: =Sheet1!$A$2:INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A))
Убедитесь, что вы включили имя листа в формуле. Я назвал этот диапазон ReportDates.

В Excel 2007+ вы можете использовать:
=SUMIFS(OFFSET(ReportDates,,1),ReportDates,DATEVALUE("01-Feb-2016"),OFFSET(ReportDates,,1),">0")

или вы можете создать именованные диапазоны для int001 ... int003 (int001 является недопустимым именованный диапазон, хотя, так что вы не можете назвать это так: я использовал in001
=Sheet1!$B$2:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$A:$A)) (примечание, что я до сих пор считаю колонку A).

Ваша формула будет затем:
=SUMIFS(into001,ReportDates,DATEVALUE("01-Feb-2016"),into001,">0")

Если вы используете Excel 2003 вы можете использовать:
=SUMPRODUCT((ReportDates=DATEVALUE("01-Feb-2016"))*(into001>=0)*into001)
или
=SUMPRODUCT((ReportDates=DATEVALUE("01-Feb-2016"))*(OFFSET(ReportDates,,1)>=0)*OFFSET(ReportDates,,1))

+0

Как установить переменную для месяца (1-12) и другую для дня (1-31) для ее использования, для автоматизации процессов, когда появляется условие «дата». – BOB

+0

Как реализовать это в VBA? – BOB

+0

Без использования VBA вы можете ввести дату в ячейку F2 - 01/02/2016 и присвоить ей пользовательский формат номера «День» d' - тогда отобразится «День 1». Ваша формула в H2 могла бы быть следующей: '= SUMIFS (in001, ReportDates, F2, in001,"> 0 ")', H3 и H4 могли бы использовать in002 и in003. Затем просто скопируйте эти три формулы и вставьте для каждого дня. Не вижу причины для VBA ... –

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