ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: shenghua8

[讨论] Excel 2003另存为新工作簿时,去除模块里的宏,其实只需这一句。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-23 00:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shenghua8 发表于 2013-11-23 00:05
就知道,靠不住。在分类版块发表问题,这是坛规,谁都懂。本来指望你能顺手一下,又是推三阻四。

说你 ...

1、另存的操作是针对文件分发需求的,一般来说,一个文件要分发个其他人,去掉代码很容易,自己安装一下高版本的Excel就行了,而其他人无需安装。这个是可以做到的。

你弄懂你的需求,然后才能知道哪个方案更适合你。

2、单纯的保存Excel的数据,方法很多,XML并不是最合适的方案。此外,并不是一定需要安装兼容包才能把文件存成xlsx的,当然了,这需要你会使用第三方的支持库,大概不是一般会员能了解的。

3、每个人都想有人会顺手帮忙做出来,大家都是这么想的,我也不例外。这个论坛有240万会员,一人来一下的话,光顺手也会把版主们活活累死的,所以,大部分高级会员都会根据自己的爱好和技术发展方向来回答会员的问题,而不是单纯凭借会不会来判断。因此,你的想法有点光顾自己爽了...

当然,这很正常,年轻人都喜欢被顺手,有人帮忙多好呀

可惜,我已经过了这个岁数了


...


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-23 00:26 | 显示全部楼层
老谭酸菜 发表于 2013-11-22 23:02
“众数”? 俺不懂。刚才百度了一下。原来就是出现次数最多的那个值。
上个附件让我等小白菜练习一下?

谭Sir:
将纯数字的众数取出来好办,只一个内置函数就行了。
我现在遇到文本的(特别给那些挑刺的人说一下,有时不仅是文本数字,还有汉字等),用简单的函数不行,得出错误值“#NUM!”
还有就是如果数据区域中有空白单元格也不行,也会得出错误值“#NUM!”
就用这位很犟的学导身份证号前几位,来做个附件举个例吧。
众数.rar (1.82 KB, 下载次数: 6)
我急需用到待解决的问题是:得到整列文本(含有空白单元格)的众数。

点评

呵呵,你弄错了  发表于 2013-11-23 00:32

TA的精华主题

TA的得分主题

发表于 2013-11-23 08:28 | 显示全部楼层
俺水平有限,弄不好这个众数哦。
只好弄了个众值,不知是否合你意:
  1. Function 众值(rng As Range)
  2.     Dim d As Object, arr, n, s

  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = rng:    n = 0:   s = ""
  5.     For i1 = 1 To UBound(arr, 1)
  6.         For i2 = 1 To UBound(arr, 2)
  7.             If d.exists(arr(i1, i2)) Then
  8.                 d(arr(i1, i2)) = d(arr(i1, i2)) + 1
  9.             Else
  10.                 d(arr(i1, i2)) = 1
  11.             End If
  12.             If d(arr(i1, i2)) > n Then n = d(arr(i1, i2)): s = arr(i1, i2)
  13.         Next i2
  14.     Next i1
  15.     众值 = s
  16. End Function
复制代码
众值.zip (6.87 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

发表于 2013-11-23 08:46 | 显示全部楼层
这么写看起来代码短一点{:soso_e113:}

  1. Function 众值(rng As Range)
  2.     Dim d As Object, arr, n, s
  3.      Set d = CreateObject("scripting.dictionary")
  4.     arr = rng:    n = 0:   s = ""
  5.     For Each a In arr
  6.         If d.exists(a) Then d(a) = d(a) + 1 Else d(a) = 1
  7.         If d(a) > n Then n = d(a): s = a
  8.     Next
  9.     众值 = s
  10. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-23 09:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试了下,用EXCEL公式的话要用到辅助单元格。
用COUNTIF、MAX、VLOOKUP这三个函数可以实现。还是不如用VBA自定义函数方便。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-23 18:37 | 显示全部楼层
老谭酸菜 发表于 2013-11-23 08:46
这么写看起来代码短一点

谢谢谭Sir !
空值也试过了,没问题。
我还奢求它应用于整列。
例如:不仅仅用于“=众值(D$2:D$32)”,希望是“=众值(D:D)”

不过,这个帖子已经炒得我都不忍再接下去了。
还有,求文本众数这个话题也不该属于这个帖子。

如果您不介意的话,我能发消息请教您不?

点评

整列也可以……看我改写的自定义函数。  发表于 2013-11-23 19:28

TA的精华主题

TA的得分主题

发表于 2013-11-23 19:26 | 显示全部楼层
老谭酸菜 发表于 2013-11-23 08:46
这么写看起来代码短一点

酸菜,帮你把函数改一下:
  1. Function 众值(rng As Range)
  2.     Set d = CreateObject("Scripting.Dictionary")
  3.     Set rng = Intersect(rng, ActiveSheet.UsedRange) '确保可以直接引用整列
  4.     For Each c In rng
  5.         t = c.Text '使用变量t写入单元格值,提高效率
  6.         n = d(t) + 1: d(t) = n '不需要d.Exists判断,是多余的。
  7.         If n > m Then m = n: s = t '后面使用变量进行计算,非常地简单、高效
  8.     Next
  9.     众值 = s
  10. End Function
复制代码
如果想要定义变量,也只需加一句:
Dim m&, n&, s$, t$
其它的变量对速度关系不大,不用定义了。


…………
请注意学习我的技巧:
1. 尽量使用中间变量,提高运算效率
2. 尽可能地减少引用字典的算法(字典算法耗时很多的)


TA的精华主题

TA的得分主题

发表于 2013-11-23 19:34 | 显示全部楼层
老谭酸菜 发表于 2013-11-23 08:46
这么写看起来代码短一点

就楼主附件来说,
我改写的代码中,字典引用次数=64,
而你的代码中字典引用计算次数=137次,超过一倍多。

这个在大量数据计算中是很明显的差距。

TA的精华主题

TA的得分主题

发表于 2013-11-23 20:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2013-11-23 19:26
酸菜,帮你把函数改一下:如果想要定义变量,也只需加一句:
Dim m&, n&, s$, t$
其它的变量对速度关系 ...

{:soso_e123:}字典再慢咱也要用,不然又要累死我几个脑细胞了!
不过咱还是打算研究下你的代码。不学白不学,学了也白学。{:soso_e113:}


TA的精华主题

TA的得分主题

发表于 2013-11-23 20:36 | 显示全部楼层
香川群子 发表于 2013-11-23 19:26
酸菜,帮你把函数改一下:如果想要定义变量,也只需加一句:
Dim m&, n&, s$, t$
其它的变量对速度关系 ...

这么一改,快是快了。
可除了我这样的高手,没几个人能看懂了。{:soso_e128:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-15 23:43 , Processed in 0.043784 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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