excel 中如下 有几万行, 将近80列a b c d e f ............
1 0 1 1 1 1
1   2   1 1
1 1   1   1
  0 1   2  
1 1   2 1 1
. .
. .
. . 
计算的时候 定义了一个变量 tmp, tmp= tmp + cells(i,j) 用来将第j 列 的所有值累加到一起的。
可是第j列 有空值时 就会报错的。我用了这样的循环来除掉空值, 可是数据量极其大,太慢了。
for i=1 to acviterows.count
    for j=1 to acrivecolumns.count
       if cells(i,j)=""
           then cells(i,j)=0
       end if
    next j
next i可不可以做出那种 执行到tmp= tmp + cells(i,j)  报错时,就把cells(i,j) 换成0 再回来继续算呢?继续接着刚才i,j算下去。
高手指点一下,谢谢了!

解决方案 »

  1.   

    哦 补充一下 我有很多个这样的tmp如:
    tmp1= tmp1 + cells(i,1)
    tmp2= tmp1 + cells(i,2)
    tmp5= tmp1 + cells(i,5)
    应该如何处理呢?我不知道累加 到哪行哪列的单元格会出错
      

  2.   

    前面加个IF
    if cells(i,j)<>"" then
    tmp= tmp + cells(i,j)
    end if
      

  3.   

    用错误处理子程序Sub .....On Error GoTo ErrorHandler
    '这部分是正常的执行过程
    ……
    Exit SubErrorHandler:
    '这里对错误进行处理
    ……
    Resume '这个语句返回原语句重新执行
    End Sub
      

  4.   

    你直接利用 sum(A1:Z2000) 不就行了,EXCEL会自动把空值处理掉的。比如application.WorksheetFunction.Sum(range("A1:B4"))
      

  5.   

    application.WorksheetFunction.Sum(range("A1:B4"))
    但是我不知道 range("A1:B4") 如何编程 cells(i,j) 的形式。
    请高手指点一下吧 谢谢!
      

  6.   

    如果你是要对整块求和,ACMAIN_CHM据说的是个好办法,一次得出结果,而且空值自动当0处理;如果你的程序逻辑比较复杂的话,那就要看情况了。
      

  7.   


    象这样写就不会有问题了:
    tmp1= tmp1 + val(cells(i,1))
    tmp2= tmp1 + val(cells(i,2))
    tmp5= tmp1 + val(cells(i,5))
      

  8.   

    用【】中括号可以直接调用内置函数,包括application.WorksheetFunction中没有的函数(例如ROW)
    用Evaluate可以设置变量
      

  9.   

    Private Sub CommandButton1_Click()
    Dim mysum As Long
    mysum = 0
    Dim mycel As Range
    For Each mycel In UsedRange
    mysum = mysum + Val(mycel.Value)
    Next
    MsgBox (mysum)
    End Sub请调试
      

  10.   

    把上面的代码中的Dim mysum As Long 
    换成Dim mysum As Double
    就可以对小数(浮点数)求值
      

  11.   


    range("A1:B4")可换成:
    i=4  '第"4"行
    j=2  '"B"列
    Range(Cells(1, 1).Address & ":" & Cells(i, j).Address)
      

  12.   

    Private Sub CommandButton2_Click()
    Dim mysum As Double
    mysum = 0
    mysum = [sum(a1:dd50000)]
    MsgBox (mysum)
    End Sub用如上的代码(50000行108列)应该符合您的要求了,执行时间大概是2秒钟