Диапазон Excel от VBA до SUMIF, только если диапазон не является пустым - PullRequest
0 голосов
/ 04 мая 2018

У меня проблема с данными, которая беспокоила меня уже несколько недель.

Цель: - Суммируйте заданный диапазон в новую контрольную ячейку. Выполните это для 8 различных диапазонов, охватывающих 42 столбца. Это необходимо выполнять построчно, чтобы у каждой записи были свои соответствующие номера. - Столбцы L: S должны иметь значение только в том случае, если сам диапазон SUM имел какие-либо значения. Нет ложных 0.

Вопросы: - Функция SUM работает, но она возвращает 0 в ситуациях, когда не было значений для Sum. Это проблема, поскольку 0 является допустимым значением, а дополнительные 0 отбрасывают средние значения тех, кто действительно имеет значения. - SUMIFS возвращает TRUE вместо значения (я использую SUMIFS с 1 критерием, так как мне легче это понять, не сосредотачивайтесь на этом бите, как он делал то же, что и в формуле SUMIF).

Вот мой VBA полностью:

Sub BE_Candidate_Flow_Time()
'
' BE_Candidate_Flow_Time Macro
'
Dim StartCell As Range
Dim RangeName As String
Dim myValue As Variant

Set StartCell = Range("A1")

myValue = InputBox("Enter Date: YY-MMM")

StartCell.CurrentRegion.Select
RangeName = "Dataset"

Dim LRow As Long
Dim lCol As Long

LRow = Cells(Rows.Count, 1).End(xlUp).Row

lCol = Cells(1, Columns.Count).End(xlToLeft).Column

Columns("J:Q").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("A:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").FormulaR1C1 = "Application ID"
Range("B1").FormulaR1C1 = "Timeframe"
Range("K1").FormulaR1C1 = "Job Code"
Range("L1").FormulaR1C1 = "Time to Complete the Assessment"
Range("M1").FormulaR1C1 = "Applied/Assessed and Ready for Review"
Range("N1").FormulaR1C1 = "Time being Reviewed and Interviewed"
Range("O1").FormulaR1C1 = "Time to Accept the Offer"
Range("P1").FormulaR1C1 = "Consent to Pre-Hire Screenings"
Range("Q1").FormulaR1C1 = "Run the Pre-Hire Screenings"
Range("R1").FormulaR1C1 = "Waiting to be sent to Onboard"
Range("S1").FormulaR1C1 = "In Onboard"

Range("A2", "A" & LRow).FormulaR1C1 = "=CONCATENATE(RC[2],RC[5])"
Range("B2", "B" & LRow).Value = myValue
Columns("T:BI").NumberFormat = "0.00"
Range("L2", "L" & LRow).FormulaR1C1 = "=SUMIFS({RC[9];RC[13]},{RC[9];RC[13]}," <> ")"
Range("M2", "M" & LRow).FormulaR1C1 = "=SUMIFS({RC[7];RC[9]:RC[11];RC[13]:RC[16]},{RC[7];RC[9]:RC[11];RC[13]:RC[16]}," <> ")"
Range("N2", "N" & LRow).FormulaR1C1 = "=SUMIFS({RC[16]:RC[27]},{RC[16]:RC[27]}," <> ")"
Range("O2", "O" & LRow).FormulaR1C1 = "=SUMIFS({RC[27]:RC[31];RC[33]:RC[34]},{RC[27]:RC[31];RC[33]:RC[34]}," <> ")"
Range("P2", "P" & LRow).FormulaR1C1 = "=SUMIFS({RC[34]},{RC[34]}," <> ")"
Range("Q2", "Q" & LRow).FormulaR1C1 = "=SUMIFS({RC[35]:RC[40]},{RC[35]:RC[40]}," <> ")"
Range("R2", "R" & LRow).FormulaR1C1 = "=SUMIFS({RC[40]:RC[41]},{RC[40]:RC[41]}," <> ")"
Range("S2", "S" & LRow).FormulaR1C1 = "=SUMIFS({RC[41]:RC[42]},{RC[41]:RC[42]}," <> ")"

Range("K1", "K" & LRow).AutoFilter 1, ""
Range("K2", "K" & LRow).FormulaR1C1 = "=RC[-1]"
[K1].AutoFilter

Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

Range("J:J,T:BI").Delete Shift:=xlToLeft

Range("A1").Select

End Sub

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете добавить if в формулу напрямую. Что-то вроде

=IF(
     count({RC[7];RC[9]:RC[11];RC[13]:RC[16]})>0;
     SUM({RC[7];RC[9]:RC[11];RC[13]:RC[16]};
     ""
 )
...