VBA的数组 和 EXCEL的range 互相 导数据

 

 

1 在VBA里定义好数组后,导入到EXCEL里去

  • Rem 把数组导入到excel
  • REM 如果导入的是一维数据,要注意一维数组是横向的
  • REM 如果导入2维数据,就没这些问题。
  • Rem 如果把一维数组导入到纵向EXCEL格子,需要先对一维数组进行transpose
  • Rem 要注意,固定数组arr(3) 其实默认是arr(0 to 3) 是4个元素

 

Sub test003()

Dim arr1(3)   '此处定义的数组,实际是4个元素,第1个元素为空 
arr1(1) = 1
arr1(2) = 2
arr1(3) = 3


Range("a7:c7") = arr1    '会从数组的第1个元素开始赋值,而第1个元素为空
Debug.Print "a7=" & Range("a7")
Debug.Print "b7=" & Range("b7")
Debug.Print "c7=" & Range("c7")
Debug.Print vbCrLf


Range("b8:b11") = arr1   '不转置,一维数据是无法赋值进去一列的
Debug.Print "b8=" & Range("b8")
Debug.Print "b9=" & Range("b9")
Debug.Print "b10=" & Range("b10")
Debug.Print "b11=" & Range("b11")
Debug.Print vbCrLf


Range("a8:a11") = Application.Transpose(arr1)
Debug.Print "a8=" & Range("a8")
Debug.Print "a9=" & Range("a9")
Debug.Print "a10=" & Range("a10")
Debug.Print "a11=" & Range("a11")

End Sub

 

2 从EXCEL往数组导入

一般直接从excel里取出来的数组都是二维数组,

特列如果是单列数据被transpose转置后维1行后为一维数组

 

Sub test002()
arr1 = Range("a1:c3")
arr2 = Range("a1:a3")
arr3 = Application.Transpose(Range("a1:a3"))


Rem 从EXCEL里取一行仍然是1个2维数组
For i = 1 To 3
   Debug.Print "arr1(" & "1," & i & ")=" & arr1(1, i)
Next i


Rem 从EXCEL里取一列仍然是1个2维数组
For i = 1 To 3
   Debug.Print "arr2(" & i & ",1" & ")=" & arr2(i, 1)
Next i

Rem 从EXCEL里取一列+转置,却变成了1维数组
For i = 1 To 3
   Debug.Print "arr3(" & i & ")=" & arr3(i)
Next i


 

3 关于EXCEL的真1维数据和2维数据,和transpose结合的测试

  • 2维数组转置 还是2维的
  • 1行或1列 range数据才可能 transpose为1维数组
Sub test4()
arr1 = Range("a1:c3")
arr2 = Application.Transpose(arr1)
arr3 = Range("a1:a3")
arr4 = Application.Transpose(arr3)
arr5 = Range("a1:c1")
arr6 = Application.Transpose(arr5)


Rem EXCEL里真二维数组转置并不会改变数组的维数
Rem EXCEL里数据以前是1列,被转置为1行为为1维数组
Rem EXCEL里数据本身是1行,本身是1列,或者1行被转为1列。都还是2维数组


For i = 1 To 3
   For j = 1 To 3
      Debug.Print arr1(i, j)
   Next j
Next i
Debug.Print vbCrLf

For i = 1 To 3
   For j = 1 To 3
      Debug.Print arr2(i, j)
   Next j
Next i
Debug.Print vbCrLf

For i = 1 To 3
   Debug.Print (arr3(i, 1))
Next i
Debug.Print vbCrLf

For i = 1 To 3
   Debug.Print (arr4(i))
Next i
Debug.Print vbCrLf


For i = 1 To 3
   Debug.Print (arr5(1, i))
Next i
Debug.Print vbCrLf

For i = 1 To 3
   Debug.Print (arr6(i, 1))
Next i
Debug.Print vbCrLf

End Sub


 

4  如果想把1行或1列EXCEL的range数据,转为1维数组?转置1次或2次

application.transpose

 

 

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值