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 展开
多谢两位,经过启发,得到了想要的代码:
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 展开
3个回答
展开全部
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与[]来代替。
展开全部
没试过楼下的行不行,不过楼主可以通过UNION语句把不相连接单元格拼接在一起构成个range
然后用for each 的方法把数据装入数组。。但是这样不好的是只能得到一列或一行数据,不能保留源数据所存地址的其他信息。。。
然后用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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 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)
你的数组是用来干什么的。
你把整个数组返回了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询