У меня возникают проблемы со следующим макросом. Я пытаюсь получить следующую функцию, которая работает в VBA.преобразование функции рабочего листа excel в vba
=SUMPRODUCT(time!$I$1418:time!$I$39433,--(time!$E$1418:time!$E$39433=$B11),--(time!$G$1418:time!$G$39433=E$2))
Это потому, что эта функция слишком медленно замедляет работу Excel, если она существует в слишком большом количестве ячеек.
Вот что я получил до сих пор. Я пытаюсь выполнить цикл из столбца c в столбец, где вторая строка = «total», затем я иду вниз по следующей строке и повторяю процесс до тех пор, пока ячейка в столбце B не будет пустой.
У меня есть ошибка времени выполнения 1004, ошибка определения приложения или объектная ошибка, и они выделяют часть sumproduct.
Sub date_stats()
Dim first_cell As Integer
Dim time As Worksheet
Set time = ActiveWorkbook.Sheets("time")
Dim i As Integer, j As Integer, num As Integer
firstcell = Range("e65000").End(xlUp).Row + 1
Do Until ActiveSheet.Range("b" & firstcell).Value = ""
firstcell = firstcell + 1
i = 2
Do Until ActiveSheet.Cells(2, i).Value = "total"
i = i + 1
num = Application.WorksheetFunction.SumProduct(time.Range("i2:i50000"), --(time.Range("E2:E50000") = ActiveSheet.Range("B" & first_cell)), --(time.Range("G2:G50000") = ActiveSheet.Cells(i, 2)))
Loop
Loop
FIRST UPDATE
Я прогресс. Я забыл, что я использовал другой модуль и, следовательно, не имел явных опций в новом модуле и что я ошибочно писал firstcell и first_cell. У меня есть все ошибки, удаленные в VBA, но теперь результат, который появляется, - #REF, что означает, что он ссылается на удаленные ячейки, что явно не так. Вот новая обновленная книга.
https://drive.google.com/file/d/0B9zzW6-3m2qGeFNCdEhtem44Wnc/edit?usp=sharing
А вот код:
Sub date_stats()
Dim first_cell As Integer
Dim time2 As Worksheet
Set time2 = ActiveWorkbook.Sheets("time")
Dim i As Integer, j As Integer, num As Integer
Dim x As String
Dim y As String
Dim z As Range
'num = Format(num, "standard")
Application.ScreenUpdating = False
With ActiveSheet
first_cell = .Range("e65000").End(xlUp).Row
'=SUMPRODUCT(time!$I$1418:time!$I$39433,--(time!$E$1418:time!$E$39433=$B11),--(time!$G$1418:time!$G$39433=E$2))
Do Until .Range("b" & first_cell).Value = ""
first_cell = first_cell + 1
i = 3
Do Until .Cells(2, i).Value = "total"
x = .Range("B" & first_cell).Address
y = .Cells(2, i).Address
Set z = .Cells(first_cell, i)
z.Value = Evaluate("=SUMPRODUCT(time2!$I$2:$I$50000,--(time2!$E$2:time2!$E$50000=" & x & "),--(time2!$G$2:time2!$G$50000=" & y & "))")
i = i + 1
Loop
Loop
End With
Application.ScreenUpdating = True
End Sub
Попробуйте скопировать вычисления вашего макроса с помощью 'Application.ScreenUpdating = False' и' Application.ScreenUpdating = True' –
Это не помогло. – user147178
Это будет вопрос разбивки его на более простые составляющие, пока вы не изолируете проблему. Конечно, убедитесь, что VBA компилируется с помощью опции Option Explicit в верхней части модуля. – Smandoli