【原创】VBA学习笔记(31)【例子】-------VBA---如何用EXCEL表的数据给数组赋值--不只有循环法

版权声明:一起学习,一起成长,欢迎关注 奔跑的犀牛先生 https://blog.csdn.net/xuemanqianshan/article/details/89163636

方法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                  
11 12 13 14 15 16 17 18 19 20
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

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/89163636