Excel-VBA-數組-03-數組與Excel單元格間的讀寫

微信公衆號原文

系統:Windows 7
軟件:Excel 2016

  • 本系列講講數組功能
  • 今天說說數組與Excel單元格傳遞信息:即數組如何讀取單元格中信息;數組信息如何寫入Excel單元格

Part 1:實現內容

  1. 有兩個Excel工作表,表1:Excel讀出;表2:數組寫入,爲空表
  2. 實現功能1,讀取Excel中信息:
  • 讀取表1的A1-C1單元格區域,賦值給數組arr1
  • 讀取表1的A2-C3單元格區域,賦值給數組arr2
  1. 實現功能2,數組寫入Excel表格中
  • arr1寫入表2的A1-C1單元格區域
  • arr2寫入表2的A2-C3單元格區域
  • 通過Array創建2個數組再寫入表2單元格

表1:Excel讀出
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g1FB2Q15-1591524526728)(https://upload-images.jianshu.io/upload_images/7490971-04a23685be638712.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

Part 2: 代碼

Sub test1()
    ' 讀取Excel數據
    Set shtExcel = ThisWorkbook.Worksheets("Excel讀出")
    arr1 = shtExcel.Range("A1:C1")
    arr2 = shtExcel.Range("A2:C3")

    ' 數組寫入Excel
    arr3 = Array(1, 2, 3)
    arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))
    '轉置
    arr5 = WorksheetFunction.Transpose(arr4)
    arr6 = WorksheetFunction.Transpose(arr5)

    Set shtArr = ThisWorkbook.Worksheets("數組寫入")
    shtArr.Cells.ClearContents
    
    shtArr.Range("A1").Resize(1, 3) = arr1
    shtArr.Range("A2").Resize(2, 3) = arr2
    
    shtArr.Range("E1").Resize(1, 3) = arr3
    shtArr.Range("E2").Resize(2, 3) = arr4
    
    shtArr.Range("E7").Resize(1, 3) = arr4(0)
    shtArr.Range("E8").Resize(1, 3) = arr4(1)
    
    shtArr.Range("E10").Resize(2, 3) = arr6
End Sub

代碼截圖
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6Yt1dpPx-1591524526730)(https://upload-images.jianshu.io/upload_images/7490971-c89984f92a98146f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

運行過程
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZpsCxrU5-1591524526732)(https://upload-images.jianshu.io/upload_images/7490971-d2559dabc4999be3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

運行結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UZIJHbci-1591524526733)(https://upload-images.jianshu.io/upload_images/7490971-f2cf5291d103feca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

Part 3: 部分代碼解讀

  1. Excel單元格讀取數據至數組,將單元格區域賦值給數組即可
    • 無論賦值的1行還是2行單元格,對應數組都是2維數組
  2. 將數組賦值給Excel單元格區域,通過Resize函數先確認單元格區域
    • 單元格.Resize(行數,列數),構建一個矩形區域,單元格爲該矩形的左上角
    • 當構建的單元格區域是多行多列時,對應的數組必須是2維數組,如果不是則賦值錯誤,如表2的E2-G3區域(對應代碼shtArr.Range("E2").Resize(2, 3) = arr4,沒有成功,返回多個#N/A)
  3. 通過arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))構建的數組本質上還是一個1維數組,如下圖所示(訂正上一篇文章的錯誤)
    • 只不過每一個元素又是一個數組
    • 通過兩次轉置WorksheetFunction.Transpose,可以將其變爲真正的2維數組arr6
    • 從本地窗口中查看兩個數據的形式可以看到兩者表達方式的不同

arr4
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3C1L9pqk-1591524526736)(https://upload-images.jianshu.io/upload_images/7490971-42522229f75a01b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

arr6
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KzClc69s-1591524526737)(https://upload-images.jianshu.io/upload_images/7490971-66d763ed4e2239e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]


  • 更多學習交流,可加小編微信號learningBin

更多精彩,請關注微信公衆號
掃描二維碼,關注本公衆號

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-elOWOTGK-1591524526737)(http://upload-images.jianshu.io/upload_images/7490971-426ce9fb969584ac.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章