Страницы: 1
RSS
Подсчет общей суммы продаж клиенту с помощью функции СуммЕсли(SummIf) в VBA
 
Здравствуйте, просьба подсказать почему возникает ошибка при попытке подсчета формулы СуммЕсли(SummIf) в VBA. Сейчас показывает ошибку 438 (на сколько я понимаю я не правильно прописываю следующую строку:
Cells(CambRow, 20) = WorksheetFunction.SummIf(Range(Cells(2, 15), Cells(FIOLastRow, 17)), Cells(CambRow, 19), Range("Summ"))

Просьба указать выход из этого положения как правильно использовать эту функцию в VBA.
Ниже прикладываю файл пример.

Всем спасибо за активное внимание.
Код
Option Explicit
Sub Count_And_Print()
    Dim CambRow As Integer
    Dim LastRow2 As Long
    Dim FIOLastRow As Long
    Dim FIOLastRow2 As Long
    Dim x As Integer
      
    Application.ScreenUpdating = False
    Sheets("Злитий").Activat 

    LastRow2 = Range("N65000").End(xlUp).Row

    ActiveWorkbook.Names.Add Name:="Date1", RefersTo:=Range(Cells(2, 14), Cells(LastRow2, 14))
    ActiveWorkbook.Names.Add Name:="Agent", RefersTo:=Range(Cells(2, 15), Cells(LastRow2, 15))
    ActiveWorkbook.Names.Add Name:="Docum", RefersTo:=Range(Cells(2, 16), Cells(LastRow2, 16))
    ActiveWorkbook.Names.Add Name:="Summ", RefersTo:=Range(Cells(2, 17), Cells(LastRow2, 17))
    
    '''' Попытка перевести дату(текст) в дату (с помощью формата).. - результата нет!
    Range("Date1").Select
    Selection.NumberFormat = "0.00"
  
    FIOLastRow = Cells(65000, 15).End(xlUp).Row
    Range("Agent").Select
    Selection.Copy
    Cells(2, 19).Select
    ActiveSheet.Paste
    FIOLastRow2 = Cells(65000, 19).End(xlUp).Row
    ActiveWorkbook.Names.Add Name:="Agent2", RefersTo:=Range(Cells(2, 19), Cells(FIOLastRow2, 19))
    ActiveWorkbook.Names.Add Name:="Summ", RefersTo:=Range(Cells(2, 17), Cells(FIOLastRow, 17))
    ActiveSheet.Range("Agent2").RemoveDuplicates Columns:=1, Header:=xlNo
    
    For CambRow = 2 To FIOLastRow2 ' Ошибка 438
    Cells(CambRow, 20) = WorksheetFunction.SummIf(Range(Cells(2, 15), Cells(FIOLastRow, 17)), Cells(CambRow, 19), Range("Summ")) ' сейчас не могу сделать подсчет...
    Next CambRow

    Application.ScreenUpdating = True
End Sub

P.S.  Также очень буду благодарным за описания как правильно перевести с помощью ДатаЗнач (DateValue) значение Дат вытянутые из базы 1С…. (желательно хотя бы пример).
 
Код
Sub Count_And_Print()
    Dim CambRow As Integer
    Dim LastRow2 As Long
    Dim FIOLastRow As Long
    Dim FIOLastRow2 As Long
    Dim x As Integer
    Application.ScreenUpdating = False
    Sheets("Злитий").Activate
    LastRow2 = Range("N65000").End(xlUp).Row
    With ActiveWorkbook.Names
        .Add Name:="Date1", RefersTo:=Range(Cells(2, 14), Cells(LastRow2, 14))
        .Add Name:="Agent", RefersTo:=Range(Cells(2, 15), Cells(LastRow2, 15))
        .Add Name:="Docum", RefersTo:=Range(Cells(2, 16), Cells(LastRow2, 16))
        .Add Name:="Summ", RefersTo:=Range(Cells(2, 17), Cells(LastRow2, 17))
    End With
    With ActiveSheet
        .Range("Date1").TextToColumns
        .Range("Date1").NumberFormat = "m/d/yyyy"
        FIOLastRow = .Cells(65000, 15).End(xlUp).Row
        .Range("Agent").Copy .Cells(2, 19)
        FIOLastRow2 = .Cells(65000, 19).End(xlUp).Row
        .Parent.Names.Add Name:="Agent2", RefersTo:=Range(Cells(2, 19), Cells(FIOLastRow2, 19))
        .Parent.Names.Add Name:="Summ", RefersTo:=Range(Cells(2, 17), Cells(FIOLastRow, 17))
        .Range("Agent2").RemoveDuplicates Columns:=1, Header:=xlNo

        With .Range("Agent2").Offset(, 1)
            .Formula = "=SUMIF(R3C15:R14C17,RC[-1],Summ)"
            .Value = .Value
        End With
    End With
    Application.ScreenUpdating = True
End Sub
Изменено: kuklp - 20.04.2016 12:23:59
Я сам - дурнее всякого примера! ...
 
kuklp, Спасибо. С функцией SumIf - разобрался (оказывается была только ошибка в названии функции).
За сокращение спасибо. Думаю в остальной части кода я также проведу подобного рода чистку.  
Страницы: 1
Наверх