ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2284|回复: 6

[求助] 如何把for循环的计算结果输入到二维数组中?一直提醒我溢出

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-7-2 23:07 | 显示全部楼层 |阅读模式
本帖最后由 zwater 于 2016-7-2 23:16 编辑
  1. Sub 计算收益()
  2. Dim Price()
  3.     rnum = SheetPrice.Range("A1").CurrentRegion.Rows.Count
  4.     cnum = SheetPrice.Range("A1").CurrentRegion.Columns.Count
  5. Price = SheetPrice.Range(Cells(2, 2), Cells(rnum, cnum))

  6. Dim Yield()
  7. Dim gap, day

  8. For gap = 1 To 300
  9.     For day = 1 To SheetPrice.Range("A1").CurrentRegion.Rows.Count - 1 - gap

  10.     SheetYield.Cells(day, gap) = Application.Ln(Price(day + gap, 1)) - Application.Ln(Price(day, 1))
  11. '    为什么不能像下面那样把结果直接输入到二维数组里面呢?应该怎么办?
  12. '       Yield(day, gap) = Application.Ln(Price(day + gap, 1)) - Application.Ln(Price(day, 1))

  13.         Next day
  14. Next gap

  15. End Sub


  16. '第二个问题,为什么只有当“价格”作为活动窗口的时候这个程序才能运行?
  17. ' 如果把视角切到第二个工作表,就会告诉我编译错误,参数不可选,这是为什么呢?应该怎么改?
复制代码

        我的水平:VBA100%纯新手,接触VBA才两天。
       现在已经可以把for循环计算的结果输出到另一个工作表里面,但是我想得到的并不是必须要输出出来的显性结果,而是存储在二维数组里的数据。
        因为以后还要对这些数据做进一步的计算,根本没有必要输出,保存在二维数组里面就好。


但是VBA不允许我这么做啊!报错告诉我脚标溢出,这是为什么呢?怎么解决?


另外还有一个小问题,我这个程序只有在第一个工作表变成活动工作表的时候才能运行,如果把视角切换到第二个工作表就不能编译,这又是为什么呢?




XLSM文件在附件里,
在程序的批注里面我应该是把问题描述的比较清楚了。


谢谢大家!!!


问题.zip (49.94 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

发表于 2016-7-2 23:46 | 显示全部楼层
Sub 计算收益()
    Dim Price(), Yield()
    rnum = SheetPrice.Range("A1").CurrentRegion.Rows.Count
    cnum = SheetPrice.Range("A1").CurrentRegion.Columns.Count
    Price = SheetPrice.Range(SheetPrice.Cells(2, 2), SheetPrice.Cells(rnum, cnum)).Value '第二个问题
    ReDim Yield(1 To rnum, 1 To 300) '第一个问题,先为数组分配存储空间
    Dim gap, day
    For gap = 1 To 300
        For day = 1 To SheetPrice.Range("A1").CurrentRegion.Rows.Count - 1 - gap
            Yield(day, gap) = Application.Ln(Price(day + gap, 1)) - Application.Ln(Price(day, 1))
        Next day
    Next gap
    Sheets("收益率").Range("a1").Resize(rnum, 300).Value = Yield
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-3 00:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2016-7-2 23:46
Sub 计算收益()
    Dim Price(), Yield()
    rnum = SheetPrice.Range("A1").CurrentRegion.Rows.Count ...

果然可以了,之前没想到range里面的cells也要写上工作表的名字。。。非常感谢

TA的精华主题

TA的得分主题

发表于 2016-7-3 10:33 | 显示全部楼层
zwater 发表于 2016-7-3 00:17
果然可以了,之前没想到range里面的cells也要写上工作表的名字。。。非常感谢

Resize()用法:
Price = SheetPrice.Range("b2").Resize(rnum - 1, cnum - 1).Value

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-4 20:07 | 显示全部楼层
山菊花 发表于 2016-7-3 10:33
Resize()用法:
Price = SheetPrice.Range("b2").Resize(rnum - 1, cnum - 1).Value

嗯,谢谢!在后面我确实用到了这个

TA的精华主题

TA的得分主题

发表于 2018-8-18 11:37 | 显示全部楼层
山菊花 发表于 2016-7-3 10:33
Resize()用法:
Price = SheetPrice.Range("b2").Resize(rnum - 1, cnum - 1).Value

其中出错代码位置:
        With Worksheets("借款申请书")
            .Activate
            sh.Cells(mrow, 2).Value = .[c6].Value     '把操作表C6单元格的值导入数据表某行第2列单元格
            sh.Cells(mrow, 3).Value = .[i6].Value      '把操作表I6单元格的值导入数据表某行第3列单元格
            Dim val As String      
            For Each mran In .[B17:B19,B23:B26]      '把操作表的7个单元格的值
                val = val & mran & " "      '串连成一个字符,保存在内存变量中,注意它没有使用分隔符,因为它以后不会被导出使用,不需被还原成原来的7个值
            Next            sh.Cells(mrow, 4).Value = val      '把上述字符串导入数据表某行第4列单元格.
            '因为我的程序中大多每张操作表导入数据表的数据个数超过一行极限275个,所以某些地方采用把操作表多个单元格的值串连后写入数据表的一个单元格,使用的时候还原为原来的多个值.
            mcol = 5
            For Each mran In .[AE10:AF10,D11,AE12:AF12,ae16,AE32,B19,G17:G19,Q19]      '把操作表的12个单元格的值
                sh.Cells(mrow, mcol).Value = mran.Value      '导入数据表某行第5至16列单元格
                mcol = 1 + mcol
            Next
        End With
上面黄色代码在执行中出错,提示为:
        mran.value <溢出>
,出错时mcol显示11,可能就是循环至AE32这个单元格时出错,但这个单元格与对应的数据表的单元格我并未设置什么,不知这是什么错?特求助.
注:我的工作簿中有二十几个工作表,其中数据表有三个,用于保存个人客户信息\单位客户信息\业务办理信息;过渡表一个,用于数据查询导出时暂存筛选结果,其他都是操作表。mran多个模块可调用的range类型的公共变量,sh是worksheet型变量,代表数据表对象。莫非在其他过程中使用变量mran次数太多影响了这个过程中的使用了?

TA的精华主题

TA的得分主题

发表于 2018-8-18 16:48 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 10:37 , Processed in 0.033932 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表