Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8418|回复: 5

请教个自定义函数的 Range参数的问题

[复制链接]
发表于 2013-10-12 16:44 | 显示全部楼层 |阅读模式
本帖最后由 row32hahaha 于 2013-10-12 17:00 编辑

1、自定义函数的 Range参数如何才能跨工作表引用?
比如我的自定义函数既要用到Sheet1又要用到Sheet2的引用,我写的模块用的Range参数好像不行,在同个Sheet里就可以起作用
2、另外如果是Range如何自动去除空值的单元格呢?
比如我自定义参数传递的是Sheet2!A2:A65535   这时候结果就报错了,如果刚好是可用值的范围就可以。

自定义函数是在论坛上找的一个符合对比合并字符串到同一单元格的功能。代码如下:

Public Function ConnectString(rg As Range, ag As Range, x As Range, y As String) '定义rg为查找区域,ag为对比区域,x为查找值,y为连接各个数之间的符号
Dim i As Integer, arr() '定义i,arr()
    ReDim Preserve arr(rg.Cells.Count) '储存循环返回的每个arr()结果
    For i = 1 To rg.Cells.Count  '在rg范围内循环
        If Cells(i + rg.Row - 1, rg.Column) = x Then '如果查找区域等于查找值,则返回对比区域
            arr(i) = Cells(i + rg.Row - 1, ag.Column)
        End If
    Next i
    ConnectString = Replace(Application.Trim(Replace(Join(arr(), ","), ",", " ")), " ", y) '用","把生成的数组连接起来在把多余的","去掉
End Function


111.rar

17.57 KB, 下载次数: 23

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-10-12 16:48 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-10-12 17:01 | 显示全部楼层
那么的帅 发表于 2013-10-12 16:48
提供数据附件

附件已添加,Sheet1里是成功的,Sheet2里是不成功的,还有三种都想改成支持,小弟没学过VBA不太会,请教如何修改
回复

使用道具 举报

发表于 2013-10-12 17:14 | 显示全部楼层
row32hahaha 发表于 2013-10-12 17:01
附件已添加,Sheet1里是成功的,Sheet2里是不成功的,还有三种都想改成支持,小弟没学过VBA不太会,请教如 ...

出现错误原因不是 因为 跨工作表
是因为 变量类型原因
Dim i As Integer  'i 为 整形,取值范围在 -32,768 到 32,767  之间,
你sheet2 错误公式 有的是整列,最大行 为 65536 ,超过了 i的取值范围,导致出错
修改办法
Dim i '就行,或者
Dim i as Long
回复

使用道具 举报

 楼主| 发表于 2013-10-12 20:51 | 显示全部楼层
那么的帅 发表于 2013-10-12 17:14
出现错误原因不是 因为 跨工作表
是因为 变量类型原因
Dim i As Integer  'i 为 整形,取值范围在 -32, ...

感谢你的回答。不过貌似直接Dim i所有都不能得到值了,Dim i As Long后不起作用1  起作用了,2和3还是不行。问题出在哪里?
回复

使用道具 举报

 楼主| 发表于 2013-10-14 09:01 | 显示全部楼层
顶下,谁帮忙解答下。还没解决,急~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-9 09:22 , Processed in 0.200774 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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