vba中如何提取用户所选的若干个单元格内的数据?

如题所述

Dim A()
A = Selection.Value


通过上述代码,二维数组A()就是所选单元格区域内的数据,数组的两个维度上都以1为下边界的。

 

注:对于选择多重区域的情部,上述代码仅能取得第一个区域内的数据,如果选择的是多重区域,则要复杂一些,代码如下:

Dim a As Range, b()
Set a = Selection
ReDim b(1 To a.Areas.Count)
For i = 1 To a.Areas.Count
b(i) = a.Areas(i).Value
Next i
'注:b(i)是一个数组的数组,引用如下:
'比如:要引用选择的多重区域的第2个区域的第3行第4列的数值:
'那么引用如下:b(2)(3,4)

追问

如何使用a中的数值 a=selection.value ?谢谢

追答

a是一个二维数组,数组中数值的引用是就在数组名后加括号,并把你要取的那元素对的下标写在括号里就可以了。
比如:引用相对于第一单元格位置第1行第2列的数值,则用引用为a(1,2)。

如果是多个区域,上面的答复中已经说了。

追问

谢谢 搞定了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-03
Sub STQ()
Dim arr()
For Each r In Selection
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = r
Next
End Sub

一维数组arr中保存的就是当前工作表所有被选中的单元格内的数据
顺序的排列是先行后列本回答被提问者和网友采纳
第2个回答  2013-04-03
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim AddStr As String
If Target.Select Then
AddStr = Target.AddressLocal
End If
AddStr = Replace(AddStr, "$", "")
If InStr(AddStr, ":") = 0 Then
MsgBox Range(AddStr)
Exit Sub
End If
Range(AddStr).Select
Dim arr(), temparr()
temparr = Range(AddStr)

ReDim arr(1 To Range(AddStr).Rows.Count, 1 To Range(AddStr).Columns.Count)
Dim i As Long, j As Long
For i = 1 To UBound(temparr, 1)
For j = 1 To UBound(temparr, 2)
arr(i, j) = temparr(i, j)
Next
Next
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
MsgBox arr(i, j)
Next
Next
End Sub