我在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".
有关维护数组边界的任何想法都是我最初定义它们的吗?我知道在工作表中循环以使赋值完成,但它会很慢.
提前致谢.
在尝试帮助解决这个问题时,我在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中的计算模式.