ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] GETROWS方法得到的数组为什么不可以直接转置写入到单元格中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-11 16:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果要将查询结果输出到工作表,建议不要使用GetRows方法生成数组再用Transpose转置输出,因为Transpose有行数(不能超过65536行)和Null的限制,速度也很慢,建议使用CopyFromRecordset 方法。
GetRows方法生成数组可以用在数据处理方面。
如果实在想用数组输出,建议声明另一个行列与GetRows方数组相反的数组,用循环方式转置,然后将转置数组输出到工作表

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:24 | 显示全部楼层
zhaogang1960 发表于 2015-11-11 16:12
如果要将查询结果输出到工作表,建议不要使用GetRows方法生成数组再用Transpose转置输出,因为Transpose有 ...

老师,NULL的限制指单元格内数据一开始就什么也没有填写吗?也仅仅是在SQL中才有NULL值吗?

TA的精华主题

TA的得分主题

发表于 2015-11-11 16:27 | 显示全部楼层
autumnalRain 发表于 2015-11-11 16:24
老师,NULL的限制指单元格内数据一开始就什么也没有填写吗?也仅仅是在SQL中才有NULL值吗?

是后者
Excel中对待空单元格,或数组对待空元素都用空串("")表示,但数据库用Null表示,Excel或数组中不能接受Null

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:32 | 显示全部楼层
zhaogang1960 发表于 2015-11-11 16:27
是后者
Excel中对待空单元格,或数组对待空元素都用空串("")表示,但数据库用Null表示,Excel或数组中不 ...

依求助例子讲,我是不是只要把数据源的空单元格全部填充成一个不可见字符或是“-”就可以了是吗?我试着把所有空单元格全部填充为0,运行时还是那句代码出错,转置的那句

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:36 | 显示全部楼层
本帖最后由 autumnalRain 于 2015-11-11 16:41 编辑
zhaogang1960 发表于 2015-11-11 16:12
如果要将查询结果输出到工作表,建议不要使用GetRows方法生成数组再用Transpose转置输出,因为Transpose有 ...

买了论坛上几本书,其中有两本涉及到SQL的,所以就学着写了,出现问题在书上也找不到答案。用GETROWS一是学习这种方法,另外也先将数据处理下再一次性放到指定的区域,要是先采用CopyFromRecordset方法,很多情况下,相当于用了辅助区域。而且最重要的是,这个例子他要求直接将处理过的数据放在原数据区域,所以我第二种方法不用GETROWS的那个也是需要特别处理下,否则运行结果得出空记录集。

TA的精华主题

TA的得分主题

发表于 2015-11-11 16:42 | 显示全部楼层
autumnalRain 发表于 2015-11-11 16:36
买了论坛上几本书,其中有两本涉及到SQL的,所以就学着写了,出现问题在书上也找不到答案。用GETROWS一是 ...

在使用GetRows方法生成数组处理数据时,对Null处理有两种方法:
一、如果我们预先把Null当作空白处理,加一句错误处理语句即可,On Error Resume Next
二、如果当作0处理,可用IsNull 函数判断一下

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2015-11-11 16:42
在使用GetRows方法生成数组处理数据时,对Null处理有两种方法:
一、如果我们预先把Null当作空白处理, ...

感谢zhaogang1960,终于知其然,还有点知其所以然了

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:52 | 显示全部楼层
zhaogang1960 发表于 2015-11-11 16:42
在使用GetRows方法生成数组处理数据时,对Null处理有两种方法:
一、如果我们预先把Null当作空白处理, ...

老师,我试着加入了On Error Resume Next,但是结果只得到了标题行,也就是说,除标题外,后面的转置没有写入到单元格区域中。能否请老师,帮着把附件中的代码稍微改下,还用GETROWS方法,这样我能完全弄明白究竟错在哪里了!

TA的精华主题

TA的得分主题

发表于 2015-11-11 16:54 | 显示全部楼层
本帖最后由 zhaogang1960 于 2015-11-11 16:57 编辑
autumnalRain 发表于 2015-11-11 16:52
老师,我试着加入了On Error Resume Next,但是结果只得到了标题行,也就是说,除标题外,后面的转置没有 ...

我说的是用GetRows方法数组处理数据(即对数组中的每个元素进行处理运算),不是向工作表输出数据,输出数据我们用CopyFromRecordset方法。
如果就是想用数组输出,请声明一个转置数组,如brr,用循环方法把arr中的每个元素转置到brr中,再用brr向工作表输出,循环过程中请使用On Error Resume Next来处理Null

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-11 16:58 | 显示全部楼层
zhaogang1960 发表于 2015-11-11 16:54
我说的是用GetRows方法数组处理数据(即对数组中的每个元素进行处理运算),不是向工作表输出数据,输出数 ...

好的,谢谢,我再理解理解
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-5 10:32 , Processed in 0.053405 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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