excel vba如何将选中的不连续单元格赋值到数组

如题,在某个自定义函数中,参数是用户选择的区域。将参数赋值到数组后,通过数组运算得出结果。但是如果选择的区域是非连续的如何处理呢?多谢两位,经过启发,得到了想要的代码:F... 如题,在某个自定义函数中,参数是用户选择的区域。将参数赋值到数组后,通过数组运算得出结果。但是如果选择的区域是非连续的如何处理呢?
多谢两位,经过启发,得到了想要的代码:

Function test(ParamArray inp())

Dim i, j

Dim score()

For j = 0 To
UBound(inp)

For Each cl In inp(j)

i = i + 1

ReDim Preserve score(i)

score(i) = cl

Next

Next



End Function
展开
 我来答
zhuying0511
推荐于2016-03-31 · TA获得超过3127个赞
知道大有可为答主
回答量:2101
采纳率:82%
帮助的人:461万
展开全部

EXCEL VBA中选中单元格的方法很多,列举如下:

1. 选中单个单元格(以单元格A1为例),可以表述为

range("a1").select

或者表述为

cells(1,1).select

也可以简写为

[a1].select

2. 选中连续单元格(以A1:B2为例),可以表述为

range("a1:b2").select

或者

range(range("a1"),range("b2")).select 此处的range("a1")同样可以表述为第一步中的cell与[a1]形式

3. 选中不连续单元格(以A1:B2,A5:B7为例),可以表述为

Union(Range("a1:b2"), Range("a5:b7")).Select 同理此处的range可以用第一步的cell与[]来代替。
百度网友eb9c235
2013-07-09 · TA获得超过478个赞
知道小有建树答主
回答量:511
采纳率:100%
帮助的人:268万
展开全部
没试过楼下的行不行,不过楼主可以通过UNION语句把不相连接单元格拼接在一起构成个range

然后用for each 的方法把数据装入数组。。但是这样不好的是只能得到一列或一行数据,不能保留源数据所存地址的其他信息。。。
追问
不过不知道有多少个Range作为参数,用union怎么写呢?用循环吗?
追答

己经忘 了哪人是楼下的了。。

sub 中用 for each in selection 应可是可以的。

但是如果你是自定义函数,你这个选择区域怎么确定呢?

如果非要用function.的话,可能要多定义几个参数。

以下自定义函数是返回区域内第r个的值,一共定义了四个参数,第一是返回数据的次序号,第二个是一个range区域,必需的,后面两个不是必需的区域,可省略

Function test1(ByVal r As Integer, ByVal rng1 As Range, Optional rng2 As Range, Optional rng3 As Range)
Dim RNG As Range, arr(), i%
If rng2 Is Nothing And rng3 Is Nothing Then
    Set RNG = rng1
    ElseIf Not rng2 Is Nothing Then
    Set RNG = Union(rng1, rng2)
    ElseIf Not rng3 Is Nothing Then
    Set RNG = Union(rng1, rng2, rng3)
End If
For Each c In RNG
    If c.Value <> "" Then
       i = i + 1
        ReDim Preserve arr(i)
        arr(i) = c
    End If
Next
test1 = arr(r)
End Function

修改了下,,但这样的效果也不是很好。。。

注意下,FOR EACH循环是先横着(行)再竖(列)这样一个顺序。

如果要把查找到的内容放入数组内,参考下楼上的redim Preserve Arr(i)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不想起名字了99
2013-07-10 · TA获得超过1694个赞
知道大有可为答主
回答量:2708
采纳率:76%
帮助的人:704万
展开全部
Option Base 1
Sub test()
Dim Arr() As Variant
Dim i As Long
For Each cl In Selection
i = i + 1
ReDim Preserve Arr(i)
Arr(i) = cl
Next cl

‘在这里你就可以使用ARR数组了

End Sub
追问
这个sub试了下好像是可以的,但是我想弄个自定义函数,好像就不行了?
Function test2(ByVal inp)
Dim Arr() As Variant
Dim i As Long
For Each cl In inp
i = i + 1
ReDim Preserve Arr(i)
Arr(i) = cl
Next cl
test2 = Arr(1)
End Function
追答
你用函数返回一个数组有什么意义
test2 = Arr(1)
你的数组是用来干什么的。
你把整个数组返回了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式