小编Old*_*gly的帖子

Excel VBA - 分配数组会更改LBound和UBound

我在Excel中有一些非常大的数据集需要解析 - 在数组中执行它比循环遍历工作表中的数据更快.将所有数据加载到数组中会导致内存问题(数据集很大),因此我计划将数据的子集加载到数组中,处理该数据,然后加载另一个子集.我希望使用定义LBound和UBound的数组"功能"来帮助我跟踪我在工作表中的位置.但我发现将工作表值分配给数组会更改边界.以下代码演示了该问题......

    Sub myTest3()
    Dim myRange As Range
    Dim myArray As Variant
    Dim myOffset As Long

        myOffset = 10
        Set myRange = Worksheets("RawData").Range("A1").CurrentRegion
        ReDim myArray(myOffset To myRange.Rows.Count, myRange.Columns.Count)
        MsgBox LBound(myArray, 1) & " to " & UBound(myArray)

        Set myRange = myRange.Offset(myOffset, 0).Resize(myRange.Rows.Count - myOffset, myRange.Columns.Count)

        myArray = myRange.Value2

        MsgBox LBound(myArray, 1) & " to " & UBound(myArray)

    End Sub
Run Code Online (Sandbox Code Playgroud)

第一个MsgBox给了我"10到10931".第二个MsgBox给了我"1到10921".

有关维护数组边界的任何想法都是我最初定义它们的吗?我知道在工作表中循环以使赋值完成,但它会很慢.

提前致谢.

arrays excel vba bounds

5
推荐指数
1
解决办法
1万
查看次数

在VBA中使用Solver将计算模式设置为手动

在尝试帮助解决这个问题时,我在VBA中遇到了Solver的一些非常奇怪的行为.

我想知道是否有其他人可以重现它或我的系统是否有问题(Windows 10,Excel 2016),如果有人能指出我正在发生的事情.

工作簿设置非常简单.

在此输入图像描述

这是我正在测试的代码......

Sub mySolve()
    Dim SetRng As Range, ChangeRng As Range
    Dim i As Long
    For i = 2 To 4
        Set SetRng = Sheets("Sheet1").Cells(i, 5)
        Set ChangeRng = Sheets("Sheet1").Cells(i, 4)

        SolverReset
        SolverOk SetCell:=SetRng.Address, MaxMinVal:=3, _
            ValueOf:=1, ByChange:=ChangeRng.Address, _
            Engine:=1, EngineDesc:="GRG NONLINEAR"
        SolverSolve UserFinish:=True
        SolverFinish KeepFinal:=1

    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

我使用F8逐步执行此代码,并在执行每一行后手动检查Options中的计算模式.

  1. 在SolverSolve之后,计算模式是手动的,除非我这样做,否则不会被设置.
  2. 如果我删除对SolverReset的调用,则在调用SolverSolve后,计算模式不会更改为手动.

excel vba excel-vba

4
推荐指数
1
解决办法
2148
查看次数

标签 统计

excel ×2

vba ×2

arrays ×1

bounds ×1

excel-vba ×1