ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 变量之“变来变去”的疑惑

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-4 11:48 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 e表格学习 于 2015-11-4 12:22 编辑

山总您好!下面的问题,应该是VBA菜鸟的普遍问题,即关于变量的“变来变去、扑朔迷离”的问题。
再次深入学习您的“太极字典”时,表26“第一次练习”中就出现了上述问题,似懂非懂,很让人难受:
下面程序中,n=m为什么不能“省略”不写?为什么省略后会报错?
原程序(部分):
  1. For i = 4 To UBound(Brr) '循环读取5月份数据
  2. If Not dic1.Exists(Brr(i, 2) & Brr(i, 3)) Then '判断 Brr(i, 2) & Brr(i,3) 在字典dic1中是否存在,如果不存在,则:
  3.             If dic2.Exists(Brr(i, 2) & Brr(i, 3)) Then '再判断Brr(i, 2) & Brr(i,3) 在字典dic2中是否存在,如果存在,则:
  4.                 n = dic2(Brr(i, 2) & Brr(i, 3)) '返回"名称 & 规格"对应的序号
  5.             Else
  6.                 m = m + 1
  7.                 dic2.Add Brr(i, 2) & Brr(i, 3), m '将"名称 & 规格"添加到第二个字典中,条目为一序号。
  8.                 ReDim Preserve Crr(1 To 4, 1 To m)
  9.                 Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
  10.                 Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
  11.                 n = m
  12.             End If
  13.             Crr(3, n) = Crr(3, n) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
  14.             Crr(4, n) = Crr(4, n) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
  15.         End If
  16.     Next
复制代码
注释掉n = m的修改后的程序:
  1. <div class="blockcode"><blockquote> For i = 4 To UBound(Brr) '循环读取5月份数据
  2. If Not dic1.Exists(Brr(i, 2) & Brr(i, 3)) Then '判断 Brr(i, 2) & Brr(i,3) 在字典dic1中是否存在,如果不存在,则:
  3.             If dic2.Exists(Brr(i, 2) & Brr(i, 3)) Then '再判断Brr(i, 2) & Brr(i,3) 在字典dic2中是否存在,如果存在,则:
  4.                 m = dic2(Brr(i, 2) & Brr(i, 3)) '返回"名称 & 规格"对应的序号
  5.             Else
  6.                 m = m + 1
  7.                 dic2.Add Brr(i, 2) & Brr(i, 3), m '将"名称 & 规格"添加到第二个字典中,条目为一序号。
  8.                 ReDim Preserve Crr(1 To 4, 1 To m)
  9.                 Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
  10.                 Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
  11. 'n = m
  12.             End If
  13.             Crr(3, m) = Crr(3, m) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
  14.             Crr(4, m) = Crr(4, m) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
  15.         End If
  16.     Next
复制代码

开始运行不报错,好像约 i=20时报错。(眼花缭乱,没有信心和耐心在本地窗口分析错误了)


山总的“太极字典少年班”是菜鸟学习字典的最好的启蒙教程,没有之一!
(我认为,此“太极”的某些部分,对于有些非菜鸟们也并不是一件容易学习的事情,有难度啊。)
山总赐教,人之幸事。

TA的精华主题

TA的得分主题

发表于 2015-11-4 11:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我的天,人家的程序你还能随便省略一句话的吗?
这样的问题问出来真的有意义吗?
是学习学无聊了吗,干点事实吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-4 12:19 | 显示全部楼层
本帖最后由 e表格学习 于 2015-11-4 12:32 编辑
t13564865256 发表于 2015-11-4 11:59
我的天,人家的程序你还能随便省略一句话的吗?
这样的问题问出来真的有意义吗?
是学习学无聊了吗,干点 ...

这是自己写代码会碰到的最最基本的问题之一!
(很遗憾高手您不知道初学人的困惑。您也是从菜鸟飞到高空的啊)
您的回复倒是提醒了我。
补充一句:
楼主帖子绝无篡改原程序的意思!(本人水平不够。即使水平够,也不能擅自篡改他人的作品。)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-4 12:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主自己慢慢搞懂了:
按楼主的做法,m将不会保持在”最大值“,其恶果是:当第二个字典中有新增项目时,m=m+1结果不正确,会造成数组Crr列数的混乱不堪!

TA的精华主题

TA的得分主题

发表于 2015-11-4 12:57 | 显示全部楼层
你这样改就乱了,n 和 m 起的作用不一样,你先弄清它们的作用吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-4 13:06 | 显示全部楼层
本帖最后由 e表格学习 于 2015-11-4 13:57 编辑
小花鹿 发表于 2015-11-4 12:57
你这样改就乱了,n 和 m 起的作用不一样,你先弄清它们的作用吧。

谢谢您!您说得完全正确!之前我刚刚自己琢磨明白啦,4楼即是。 m的形成及其作用:1 to m step1,是规律地递增的,给关键字(新产品&规格)排序,是关键字的“项目”或“条目”。n的形成及其作用:其值大小由关键字的条目来决定,其变化没有规律(因为“5月新产品”在表中是无规律排列的,“随机排列”),是数组Crr的列号。
(n=m是新增最后一列时的情况。不是“新增”时,n=字典某关键字(新产品&规格)下的条目(此条目也是[1,m]之间的一个随机列数值))。
字典,或者说VBA,有很多情况用文字描述总觉得说不太清晰,只能靠学习者(包括我自己)自己理解或意会啦。




TA的精华主题

TA的得分主题

发表于 2018-7-24 18:35 | 显示全部楼层
咨询一下楼主,For i = 4 To UBound(Brr) '循环读取5月份数据
If Not dic1.Exists(Brr(i, 2) & Brr(i, 3)) Then '判断 Brr(i, 2) & Brr(i,3) 在字典dic1中是否存在,如果不存在,则:
            If dic2.Exists(Brr(i, 2) & Brr(i, 3)) Then '
疑问,dic2还未定义关键词及 对应的项目,为什么可以直接查询Brr(i, 2) & Brr(i, 3))是否存在?
我是初学者,表26 有些不太懂

疑问: dic2
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 09:39 , Processed in 0.030255 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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