【原创】VBA(实验6)VBA---如何用EXCEL表的数据给数组赋值--不只有循环法

 

方法1:循环法取数后,放在array里

  • 循环方法
  • 要求数据是有规律的,如连续等?
  • 数组必须定义大小后才可以使用?
  • 如果是用for,一般需要知道循环次数,也就是单元格个数
  • 如果用 for each ,while等,能吗?能

比如原始数据

ID
11
47
11
48
27
30
43
Sub get_arr()
Dim arr1(10)    'array必须定义大小后才能使用

For i = 1 To 10
    arr1(i) = Sheets("sheet3").Cells(i + 1, 1)
    Debug.Print (arr1(i))
Next i

End Sub

 

方法2:数组大小不定,但也需要指定

  • 好处是,不用知道 要找的行,或者列的具体多少个
  • 局限性就是,只能取 1行,或1列的数据,也许有时这是个优点?
  • 局限性:中间不能有空格,如果有,得先用 对原始数据,VBA删掉空格后,这个之前写过
  • 还有种方法,用的 cells(a1) cells(65536) ? 能弄吗?

 

ID         
11121314151617181920
47         
11         
48         
27         
30         
43         
60         
86         
99         
Sub get_arr()
Dim arr1()       'array必须定义大小后才能使用

    Rem 取第一列的数据试试

    max_row = Sheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Row
    ReDim arr1(1 To max_row)
    i = 2
Do
    i = i + 1
    arr1(i) = Sheets("sheet3").Cells(i, 1)
    Debug.Print (arr1(i))

Loop While (i + 1) <= max_row
Sub get_arr()
Dim arr1()       'array必须定义大小后才能使用

    Rem 取第2行的数据试试

    max_column = Sheets("sheet3").Cells(2, Columns.Count).End(xlToLeft).Column
    ReDim arr1(1 To max_column)
    i = 0
Do
    i = i + 1
    arr1(i) = Sheets("sheet3").Cells(2, i)
    Debug.Print (arr1(i))

Loop While (i + 1) <= max_column

 

方法3---归纳

取一列最大非空单个元行号方法

max_row = Sheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Row

max_row = Sheets("sheet3").Cells(65536, 1).End(xlUp).Row

 max_row = Sheets("sheet3").Range("a:a").End(xlDown).Row

 

取一列最小非空单个元行号方法

 max_row = Sheets("sheet3").Range("a:a").End(xlup).Row

 

 

取一行最大非空单个元行号方法

max_column = Sheets("sheet3").Cells(2, Columns.Count).End(xlToLeft).Column

max_column = Sheets("sheet3").[iv2].End(xlToLeft).Column

max_column = Sheets("sheet3").Range("iv2").End(xlToLeft).Column

错误的  max_column = Sheets("sheet3").Cells("iv2").End(xlToLeft).Column

max_column = Sheets("sheet3").Range("2:2").End(xlToRight).Column   '好像第1列不能是空的

 

 

取一行最小非空单个元行号方法

max_column = Sheets("sheet3").Range("2:2").End(xltoleft).Column    '好像第1列不能是空的

 

 

如果数据不规则呢?

当前工作表中已使用的列数
ActiveSheet.UsedRange.Columns.Count

 

 

 

方法3?

https://zhidao.baidu.com/question/1987985423240470147.html

Sub test1()
Dim arr1
Dim arr2


rem 思路是,先把EXCEL对象读到一个变量里,然后这个变量就是一个二维表对象
rem 然后把另外一个数组,取这个二维数组的一个维度,取回数据
rem 重新输入回去也好做吧


arr1 = Sheets("ganzhi2").UsedRange   '这里不能用set arr1 也不能都为数组?只能变量?
ReDim arr2(1 To UBound(arr1, 2))

For i = 1 To UBound(arr1, 2) Step 1
arr2(i) = arr1(1, i)
Debug.Print arr2(i)
Next

For i = 1 To UBound(arr2) Step 1     '这样又写回去了,嗯
Cells(3, i) = arr2(i)
Next

End Sub

 

 

 

http://club.excelhome.net/thread-1250877-1-1.html

 

需要熟悉 lbound ubound(arr,1)

https://zhidao.baidu.com/question/562477244.html

 

 

方法3?

http://club.excelhome.net/forum.php?mod=viewthread&tid=1310859

Sub test1()
Dim vArr
Dim oDic
Set oDic = CreateObject("Scripting.Dictionary")
 

vArr = Sheets("ganzhi2").UsedRange.Value '数组读表数据
For nRow = 1 To UBound(vArr) '一般第一行是标题,就从第2行开始读
oDic(vArr(nRow, 1)) = nRow '以第一列为字典关键字为例
Next

Debug.Print oDic.Count

End Sub

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值