ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教关于组合的问题!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-15 20:09 | 显示全部楼层
zhouxingyu 发表于 2011-12-15 20:04
三个字:"真漂亮"!

四个字“漂亮极啦”!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-15 20:33 | 显示全部楼层
wlianke 发表于 2011-12-15 20:09
四个字“漂亮极啦”!

哈哈哈...咱们接龙呢.

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-18 20:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2011-12-15 10:16
所有计算都是VBA内存数组运行,所以基本不受影响。

只需更改如下:

美女老师:这几天都在用你的代码,越用越觉得精妙的很,在效率上得到了大幅的提升.在此表示由衷的感谢!
还想麻烦你指教:如果有10列的数据对某一列(比如"身高"列)进行组合比较,然后连同原数据输出到Sheet2,应该怎么修改?多谢了.

TA的精华主题

TA的得分主题

发表于 2011-12-19 07:57 | 显示全部楼层
嗯。楼主请上附件。

要有原始数据,
简单文字说明比较对象和比较规则。

如果可以,在sheet2简单地手工添几行比较结果的例子。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-19 20:38 | 显示全部楼层
香川群子 发表于 2011-12-19 07:57
嗯。楼主请上附件。

要有原始数据,

美女老师,附件已上.
其实就是在原来的基础上稍有变动.我的意思是想吃透你的精妙代码,现在我只是在简单的生搬硬套,没能领悟透也就不会有提高.
我知道只需要在某个部分改动下就可以达到,只是没能研究到是哪个部位.还请老师再做指点.多谢多谢!
组合.rar (10.78 KB, 下载次数: 4)




TA的精华主题

TA的得分主题

发表于 2011-12-19 22:38 | 显示全部楼层
代码稍加改动即可。
为增加可读性,多写了几行表达中间过程。

全部代码都加了详细注释。
  1. Sub test()
  2.     arr = [a1:c27] '原始数据范围直接赋值到数组arr
  3.     n = UBound(arr) '获取最大行数n
  4.    
  5.     Set d = CreateObject("Scripting.Dictionary") '定义字典d
  6.    
  7.     For i = 0 To n / 3 - 1 '在原始数据中循环遍历
  8.         j = i * 3 + 2 '获取待处理数据行位置j
  9.         t = arr(j, 2) & "," & arr(j + 1, 2) '以该行以及下一行的两个年龄作为字典关键词t
  10.         
  11.         d(t) = d(t) & ";" & arr(j, 1) & "," & arr(j, 3) & ";" & arr(j + 1, 1) & "," & arr(j + 1, 3)
  12.         '对每个关键词加入相对应的性别和身高属性
  13.     Next
  14.    
  15.     p = d.keys '获取字典关键词keys结果数组p
  16.     q = d.items '获取字典items结果数组q
  17.    
  18.     ReDim brr(1 To n, 1 To 3) '定义结果数组brr
  19.     brr(1, 1) = "性别"
  20.     brr(1, 2) = "年龄"
  21.     brr(1, 3) = "身高"
  22.    
  23.     For i = 0 To d.Count - 1 '遍历字典
  24.         k = k + 1 '序号+1,保证各年龄段隔开一行
  25.         t = Split(q(i), ";") '每个年龄段的性别及身高属性拆分
  26.         For j = 1 To UBound(t) '按拆分个数遍历
  27.             k = k + 1 '序号+1,真正的段内序号递增
  28.             brr(k, 1) = Split(t(j), ",")(0) '同一item中的性别和身高拆分,第1项为性别
  29.             brr(k, 3) = Split(t(j), ",")(1) '同一item中的性别和身高拆分,第2项为身高
  30.             brr(k, 2) = Split(p(i), ",")((k + i) Mod 2) '关键词即年龄的拆分
  31.         Next
  32.     Next
  33.    
  34.     [e:g] = "" 'E-G列清空
  35.     [e1].Resize(n, 3) = brr '最终结果输出到E1开始的范围
  36.    
  37.     Sheet2.[a:c] = "" 'sheet2的A-C列清空
  38.     Sheet2.[a1].Resize(n, 3) = brr '最终结果输出到sheet2的
  39.    

  40. End Sub

复制代码

Book2.rar

13.82 KB, 下载次数: 23

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-20 00:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2011-12-19 22:38
代码稍加改动即可。
为增加可读性,多写了几行表达中间过程。

太感谢你了,这样细致的加上注释,我就终于明白整个内涵了.
美女老师辛苦了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-4 12:24 , Processed in 0.047973 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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