ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助union合并区域

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-11-2 00:24 | 显示全部楼层 |阅读模式
正在参照《别怕,EXCEL VBA其实很简单》练习
写了代码Union(Range("e2:h6"), Range("c3:c10"), Range("f8")).Select可以选定三个区域的合并区域,
但为什么代码Union(Range("e2:h6"), Range("c3:c10"), Range("f8")).Cells(21).Select选定的是e8单元格,不是c3单元格?e8格子并不在合并区域内呀?
而且,我如论如何修改cells( )属性中的索引号,也选择不到Range("c3:c10")中的任何格子,这几个格子不是在合并区域内吗?
索引号增大后,总是选择Range("e2:h6")下方的格子。
捕获.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-2 00:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我的练习目的是妄想:利用union合并区域的索引号作为一维数组的索引(不知道是不是该叫变量),把合并区域的值赋给(生成)一维数组,再导进其它表格,减少代码的行数。

TA的精华主题

TA的得分主题

发表于 2017-11-2 07:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-11-2 08:02 | 显示全部楼层
OKJSJSF 发表于 2017-11-2 00:33
我的练习目的是妄想:利用union合并区域的索引号作为一维数组的索引(不知道是不是该叫变量),把合并区域 ...

这个组合有三个区域,如选取[C3]
  Union(Range("e2:h6"), Range("c3:c10"), Range("f8")).Areas(2).Cells(1).Select
如选取[C10]
   Union(Range("e2:h6"), Range("c3:c10"), Range("f8")).Areas(2).Cells(8).Select

即:需分第几区域,第几格。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-2 22:17 | 显示全部楼层
yaozong 发表于 2017-11-2 08:02
这个组合有三个区域,如选取[C3]
  Union(Range("e2:h6"), Range("c3:c10"), Range("f8")).Areas(2).Cel ...

太谢谢您了!学到了书上没有的一个属性“.areas( )”!这样一来,合并区域的索引存在二个变量:有几个区域,某个区域中有几个单元格。书中说union最多可以有30个参数,可以合并30个区域。我要试试看能不能把union合并区域定义为名称作为一个参数,再嵌套产生更大的合并区域。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-2 22:31 | 显示全部楼层
jiangxiaoyun 发表于 2017-11-2 07:58
又见奇怪问题了,哈哈

太棒了,有人笑!因为我正在学书中“职工信息管理界面”的查询、修改、新增、删除等技术,所以我妄想当要把“查询表”中的记录添加到一维“档案表”中时,能不能用union合并“查询表”中的不连续的单元格区域,用一句代码写入数组(当然加上定义变量就不是一句了),再把数组值写入“档案表”的一行中。

TA的精华主题

TA的得分主题

发表于 2017-11-3 07:06 | 显示全部楼层
OKJSJSF 发表于 2017-11-2 22:31
太棒了,有人笑!因为我正在学书中“职工信息管理界面”的查询、修改、新增、删除等技术,所以我妄想当要 ...

将不连续的区域,不能直接赋值给一个数组的
一种是根据数据分布情况,看看能不能这个赋值给数组元素,以后方便提取
另外就是将一个包含所有不连续区域赋值给数组
然后对各个区域对应数组中的位置进行读取的

TA的精华主题

TA的得分主题

发表于 2017-11-3 08:15 | 显示全部楼层
OKJSJSF 发表于 2017-11-2 22:31
太棒了,有人笑!因为我正在学书中“职工信息管理界面”的查询、修改、新增、删除等技术,所以我妄想当要 ...

你得去了解一下数组基础。这些少量的单元格操作,直接用单元格就可以了。用不用数组没影响。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 22:01 | 显示全部楼层
jiangxiaoyun 发表于 2017-11-3 08:15
你得去了解一下数组基础。这些少量的单元格操作,直接用单元格就可以了。用不用数组没影响。

谢谢!我是不这么想了,就算能把查询界面的合并区域值一次性写入数组导进一维档案表,也不一定能在查询时把档案表中的整行数据一次性输出到查询表中。但我只会用一个变量写代码,二个以上就不知如何嵌套了。如把合并区域其中一个区域写入档案表的一行,用循环,代码写在查询表中
Dim xyz As Range, xyz2 As Integer, xyz3 As Integer
Set xyz = Union([e2:h6], [c3:c10], [f8]).Areas(1或2或3)
xyz2 = 1 + Sheets("档案表").UsedRange.Rows.Count
    For xyz3 = 1 To xyz.Count
        Sheets("档案表").Cells(xyz2, xyz3).Value = xyz.Cells(xyz3).Value
    Next
但如果增加为合并区域中的某个区域Union( ).Areas(1或2或3)定义变量xyz4,如何写代码呢?如下是提示应用程序错或对象定义错:
Dim xyz As Range, xyz2 As Integer, xyz3 As Integer,xyz4 as byte
Set xyz = Union([e2:h6], [c3:c10], [f8]).Areas(xyz4)
xyz2 = 1 + Sheets("档案表").UsedRange.Rows.Count
for xyz4=1 to Union([e2:h6], [c3:c10], [f8]).Areas.count   
    For xyz3 = 1 To xyz.Count
        Sheets("档案表").Cells(xyz2, xyz3).Value = xyz.Cells(xyz3).Value
    Next xyz2
    xyz3=xyz3+Sheets("档案表").UsedRange.columns.Count
next xyz4

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-4 22:06 | 显示全部楼层
liulang0808 发表于 2017-11-3 07:06
将不连续的区域,不能直接赋值给一个数组的
一种是根据数据分布情况,看看能不能这个赋值给数组元素,以 ...

版主出场了!版主晚上好!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-25 05:24 , Processed in 0.042678 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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