打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA(实验6)VBA

 

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

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

比如原始数据

ID
11
47
11
48
27
30
43
  1. Sub get_arr()
  2. Dim arr1(10) 'array必须定义大小后才能使用
  3. For i = 1 To 10
  4. arr1(i) = Sheets("sheet3").Cells(i + 1, 1)
  5. Debug.Print (arr1(i))
  6. Next i
  7. 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                  
  1. Sub get_arr()
  2. Dim arr1() 'array必须定义大小后才能使用
  3. Rem 取第一列的数据试试
  4. max_row = Sheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Row
  5. ReDim arr1(1 To max_row)
  6. i = 2
  7. Do
  8. i = i + 1
  9. arr1(i) = Sheets("sheet3").Cells(i, 1)
  10. Debug.Print (arr1(i))
  11. Loop While (i + 1) <= max_row
  1. Sub get_arr()
  2. Dim arr1() 'array必须定义大小后才能使用
  3. Rem 取第2行的数据试试
  4. max_column = Sheets("sheet3").Cells(2, Columns.Count).End(xlToLeft).Column
  5. ReDim arr1(1 To max_column)
  6. i = 0
  7. Do
  8. i = i + 1
  9. arr1(i) = Sheets("sheet3").Cells(2, i)
  10. Debug.Print (arr1(i))
  11. 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

  1. Sub test1()
  2. Dim arr1
  3. Dim arr2
  4. rem 思路是,先把EXCEL对象读到一个变量里,然后这个变量就是一个二维表对象
  5. rem 然后把另外一个数组,取这个二维数组的一个维度,取回数据
  6. rem 重新输入回去也好做吧
  7. arr1 = Sheets("ganzhi2").UsedRange '这里不能用set arr1 也不能都为数组?只能变量?
  8. ReDim arr2(1 To UBound(arr1, 2))
  9. For i = 1 To UBound(arr1, 2) Step 1
  10. arr2(i) = arr1(1, i)
  11. Debug.Print arr2(i)
  12. Next
  13. For i = 1 To UBound(arr2) Step 1 '这样又写回去了,嗯
  14. Cells(3, i) = arr2(i)
  15. Next
  16. 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

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用字典做多条件的数据查找
【VBA研究】如何将单元格数据赋给数组
WPS JS宏表格定位实例
VBA数组
取得工作表名称、单元格赋值个工作表名称
FpSpread控件的总结VB插件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服