VBA數組數據回填工作表

2021-01-10 VBA語言專家

大家好,最近推出的內容是「VBA信息獲取與處理」中的部分內容,這套教程面向中高級人員,涉及範圍更廣,實用性更強,現在的內容是第四個專題「EXCEL工作表數據的讀取、回填和查找」的內容。

第三節 VBA數組數據回填工作表

在前兩節我們講了如何將工作表中的數據讀到數組中,這種操作的實質其實是:將數據預存到內存中,然後在內存中調取數據再進行下一步操作,這樣可以節約反覆提取數據的時間。

當我們在內存中將數據計算完成後,需要將結果數組回填給工作表,又要注意哪些問題呢?對於工作表而言,可以回填的是數組可以是一維或二維的。我們在這一節和下一節將講解數組回填工作表的問題。本節先講解一維數組的回填。

1 一維數組回填工作表的一般原則

一維數組回填原則:若要將一維數組寫入工作表,必須創建一個Range對象,將該範圍調整為數組的大小,然後寫入該範圍。

假設我們有一個一維數組,並希望從單元格A1開始將其寫入工作表。代碼必須首先調整目標範圍的大小。例如下面的代碼:

Sub MYNZE() '一維數組數據的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Array("大象", "老虎", "獅子", "狐狸")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(1, UBound(Arr) + 1)

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代碼截圖:

代碼講解:上述代碼首先從Arr = Array("大象", "老虎", "獅子", "狐狸")中取得數組的數據,當然,這裡我沒有對取得的數組數據做任何的計算處理,只是回填的操作。在回填數據的時候,先獲取要回填區域的基準單元格,這裡我給出的是A1,然後將以這個單元格為基準進行擴展,擴展到和數組同樣大小的區域:即 Resize(1, UBound(Arr) + 1),最後進行數據的回填。關於單元格的Resize屬性,在我的教程《VBA代碼解決方案》中有詳細的講解大家可以參考。

這裡我們要注意的是對於對象變量的賦值用的是SET: Set MyRange = Range("A1"),這一點在我的教程《VBA中類的解讀及應用》中已經詳細的說明,大家要注意對象變量和普通變量的區別。

在整個代碼中還利用了單元格的ClearContents屬性對單元格進行回填前的清理工作。

最後我們看看代碼的運行結果:

對於一維數組的回填我們還要注意:當回填區域比數組大時,多餘的區域會出現」#N/A」符號,表示沒有數據可以回填。

2 二維數組回填工作表的原則

二維數組回填原則:如果將二維數組回填工作表,則需要使用「Resize」將目標範圍調整為適當的大小。第一個維度是行數,第二個維度是列數。

下面的代碼演示如何從單元格A1開始將數組Arr寫入工作表:

Sub MYNZF() '二維數組數據的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Sheets("SHEET2").Range("A1:b9")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2))

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代碼的截圖:

代碼講解:上述代碼首先從工作表SHEET2中提取數據放到數組之中,這裡的數據沒有任何的修改:Arr = Sheets("SHEET2").Range("A1:b9"),對於基準單元格我們利用了Resize 語句來擴展單元格。MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2)) ,這個語句中UBound(Arr, 1)是擴展的是行數,UBound(Arr, 2)是擴展的是列數。

下面我們看代碼的運行結果:

和一維數組的回填一樣:當回填區域比數組大時,多餘的區域會出現」#N/A」符號,表示沒有數據可以回填。

本節知識點回向:數組數據如何回填到工作表?回填的原則是什麼?

本專題參考程序文件:004工作表.XLSM

VBA是利用Office實現自己小型辦公自動化的有效手段,這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,也需要經歷一種枯燥的感覺,如太白詩云:眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山。

「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。

我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程。

第一套:VBA代碼解決方案是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;

第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。

第三套:VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。

第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。

第五套:VBA中類的解讀和利用這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。

第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。如需要可以可以WeChat: NZ9668

學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,大家可以根據以上資料1,3,2,6,5或者是4,3,2,6,5的順序逐漸深入的逐漸學習。

每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北鬥,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享成果,隨喜正能量

相關焦點

  • 利用VBA將數組的數據輸出到工作表,主管看了直呼大神
    :48 來源: 愛玲說愛情 舉報   今天,給各位來嘮一嘮用VBA怎麼將數組的數據輸出到工作表
  • Excel VBA:匯總多個工作簿每個工作表名稱包含指定關鍵詞的數據
    今天再分享下匯總指定文件夾下每個工作簿中工作表名稱包含某個指定關鍵詞的小代碼(當不指定關鍵詞時,則默認匯總所有工作表數據)。舉個慄子。假設有一文件夾,內有十幾個工作簿,每個工作簿又各有多個不等數量的工作表,現在我們只想匯總每個工作簿中工作表名稱包含「看見星光」的數據,那就可以使用我們今天分享的小代碼了。
  • 如何將Excel數據表單元格保存為數組,VBA數組進階應用
    No.1在vba編程中,數組應用是一個十分有用的方法。如何把數據表作為數組進行處理,是編程過程中的一個重要技能。學會之後,將大大提高編程技術,也將使數據處理的過程變得更加流暢。No.2上圖為例,把表格內容作為數組值進行保存,然後通過流程編碼對成績進行一個比較判斷,最終得出一個成績等級的判定。
  • VBA數組與字典解決方案第32講:數組的拆分和維數轉換
    大家好,我們今日繼續VBA數組與字典解決方案的講解,今日講解第32講,數組的拆分和維數轉換:一 數組的拆分1. 用Index拆分數組數組的拆分在VBA中是一個難題,如果是按行拆分數組,除了用循環外也只能借用API函數完成了。幸好我們可以借用工作表函數index達到按列拆分數組。
  • 在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法
    二:ReDim語句,這個語句在過程級別中使用,用於為動態數組變量重新分配存儲空間,語法如下:ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]]參數a) Preserve是可選的,關鍵字,當改變原有數組最末維的大小時,使用此關鍵字可以保持數組中原來的數據
  • VBA代碼解決方案第49講:VBA代碼中工作表函數SUM的利用方法 - VBA...
    對多個單元格求和,是統計工作中非常普遍的工作,在之前的函數講解過程中,我下了很大的氣力來講解SUM函數及其衍生的函數,在數組的講解中也講了此函數在數組中的利用,可以說SUM函數在統計工作中起著舉足輕重的作用,如果把這個函數利用好了,對自己的工作是非常方便的,今日我在VBA中就此函數的利用及規律再次加以講解。
  • Excel中多個工作表不同位置數據,如何進行求和?
    最近收到一個典型案例,Excel中多個工作表不同位置數據,如何進行求和。 具體如下: 一個Excel文件中,有多個sheet工作表,「一月」,「二月」,「三月」。
  • Excel VBA Array數組Transpose方法給列單元格區域賦值
    需要Excel原始碼的網友請點擊關注和轉發,然後直接私信回覆:原始碼因為一維數組是以行來分配地址,如果把一維數組的值給單元格列賦值,則需要用Transpose方法進行行列轉換。#005 Range("A1:E10").Value = Application.Transpose(arr) '給A1:E10單元格區域賦數組值#006 Range("A1:E10").Select
  • Excel VBA 數組基礎知識,初學者不可不學的關鍵知識
    今天和大家要說的是VBA數組的基本知識點,等你學到後面就會知道,數組和字典搭配起來真的是事半功倍的啦!所以學習好數組的基本知識點也是必不可少的,基礎知識有了,才能有後面的應用。數組的基本概念數組其實是一組擁有相同元素的的組合。我們可以使用數組名稱和他在數組中的位置來指定某些特定的值。可以擁有很多的值,他們在數組內部是通過引索號進行區分的。
  • 記錄集賦值給數組後,利用轉置函數處理多維數組的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日講解的是第76講,內容是:記錄集賦值給數組後,利用轉置函數處理多維數組的方法。我在第一冊的第43講中,我講了將記錄集存入數組的方案,並通過一個Index函數在工作表中恢復數組數據的方法。今日講的是利用轉置函數來完成同樣的功能。
  • Filter函數和ReDim語句講解,以及VBA中利用動態數組排重的方法一
    大家好,我們今日繼續講解VBA代碼解決方案的第61講內容:在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法。在上一講中我們講了使用數組函數將單元格中的文本進行分隔後寫入到工作表中的方法,那麼問題來了,如果文本中含有大量的重複值,在寫入時也會將重複值寫入到工作表中,此時,如果我們要剔除重複值,該怎麼辦?用VBA的方法該如何做到呢?我在這講和下一講中將解答這個問題,並提供給讀者一個可以測試的實例。今日先講這個內容要用到的知識點。
  • Excel如何批量提取全部工作表名稱公式
    在使用公式查詢或匯總多工作表數據時經常需要用到整個工作簿所有工作表的名稱,下面介紹如何用宏表函數GET.WORKBOOK來提取工作表名稱。 INDEX函數使用說明:  INDEX(數組,第二參數)表示從數組中提取第幾個元素。
  • 辦公室必備的Excel工作表函數應用技巧解讀!
    Excel工作表中的函數是非常繁多的,如果要全部掌握,還是有一定困難的的,但是對於一些辦公室必備的函數公式,我們一定要掌握,並能靈活的加以應用!一、Excel工作表函數:IF。功能:判斷是否滿足某個條件,如果滿足條件返回一個值,不滿足則返回另外一個值。語法結構:=If(判斷條件,條件成立時的返回值,條件不成立時的返回值)。
  • EXCEL之VBA-For Each……Next 語句的使用方法
    For Each……Next在一個集合或數組中遍歷循環一次,每循環一次都會把當前循環到的對象或元素賦值給變量。>a = a + 1X.Font.Bold = TrueX.Font.Color = RGB(255, 0, 0)End IfNextMsgBox "共有" & a & "個符合條件的數據
  • 利用VBA代碼將文本轉換為數組函數
    當前的代碼多是出自VBA數組與字典解決方案,今日分享的是NO.245,內容是:VBA過程代碼246:文本轉換為數組函數SplitSub MyNZ()Dim Arr As VariantArr = Split(Sheets("21").Cells(1, 1), " ")Sheets("21").Cells(3, 1).Resize(
  • VBA中動態數組的創建及利用
    今日分享的是NO.244,內容是:VBA過程代碼244:VBA中動態數組的定義及創建VBA過程代碼244:VBA中動態數組的定義及創建Sub Mynz()Dim arr() As Stringerow = [c65536].End(3).Row '最後一個非空單元格行號j = 1 '數組索引號
  • EXCEL中數組的應用專題之一:數組公式是如何輸入的
    在EXCEL的應用中,數組是經常用到的一個知識點,在實際工作中,巧妙的利用數組可以在實際的工作中可以得心應手,配合必要的函數和公式,可以讓你的工作變得簡單高效。數組公式就是可以同時進行多重計算並返回一種或多種結果的公式。比一般的公式要複雜些,理解上要和普通的公式加以區別。必要時要藉助VBA的思想來來考慮問題,因為數組公式的應用在很多的時候和VBA是一樣的。
  • Excel小技巧:使用VBA,10秒鐘搞定拆分工作表(內附代碼)
    前面我們發布過將多個工作簿中的工作表合併到一個工作表簿中,就有網友提了一個問題,如何講一個工作表拆分成多個工作表,其實實現的方法很多,如果數據少的話,我們直接採用篩選後複製粘貼就可以了,如果數據比較多,或者是日常工作的話,每天這樣複製粘貼,就很麻煩~,或者我們使用透視表也可以。。
  • VBA代碼中數組的拆分與合併的實現
    數據,每當看到一串串的數據,心情很難好起來,本該是春暖花開的季節,但現在確實恐慌瀰漫。PMI,CPI,M2,非農指標,一個個揪心的數據,股市震蕩,信心不足,熔斷頻發。後疫情時代的資本市場是否開始布局?終將演繹一場戰勝蕭條的戰役。無論怎樣,我們一定要堅信,疫情終將會過去,曙光一定會到來。
  • Excel工作表中最常用的10個函數,中文解讀,動圖演示,易學易用
    三、Excel工作表函數:Lookup功能:從單行或單列或數組中查找一個值。Lookup具有兩種形式:向量形式和數組形式。解讀:此方法主要應用了Lookup函數的數組形式和「向下匹配」的特點。解讀:1、當有多個查詢的條件時,用連接符「&」連接在一起,對應的數據區域也用「&」連接在一起。2、公式中IF({1,0},B3:B9&C3:C9,D3:D9)的作用為形成一個以B3:B9和C3:C9為第一列,D3:D9為第二列的臨時數組。