【问题标题】:converting excel worksheet function into vba将excel工作表函数转换为vba
【发布时间】:2014-09-28 00:38:52
【问题描述】:

我在使用以下宏时遇到问题。我正在尝试获取以下在 VBA 中转换的函数。

=SUMPRODUCT(time!$I$1418:time!$I$39433,--(time!$E$1418:time!$E$39433=$B11),--(time!$G$1418:time!$G$39433=E$2))

这是因为如果 Excel 存在于太多单元格中,该函数会大大降低 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

第一次更新

我正在进步。我忘记了我使用的是不同的模块,因此没有在新模块上显式放置选项,并且我拼错了 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 = FalseApplication.ScreenUpdating = True 括住宏的计算
  • 将问题分解成更简单的组成部分,直到您找出问题所在。当然要确保 VBA 在模块顶部使用 Option Explicit 进行编译。
  • SumProduct 工作表函数在 VBA 中受到更多限制,因为它不支持数组参数。您可以先根据条件创建范围,然后将范围传递给 SumProduct 来解决此问题
  • 你能举个例子吗

标签: vba excel excel-formula


【解决方案1】:

问题解决了。我将工作表时间的名称更改为 time2,因为 Excel 已经将时间用作特殊功能。但是当我使用不再需要的评估功能时。

Evaluate("=SUMPRODUCT(Time!$I$2:$I$50000,--(Time!$E$2:$E$50000=" & x & "),--(Time!$G$2:$G $50000=" & y & "))")

所以问题是由于错字造成的。

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2020-06-03
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多